Использование vlookup с повторным интервалом + сплит - PullRequest
2 голосов
/ 25 сентября 2019

У меня есть список с кодами покупки и серийным номером продукта, и я хотел бы узнать цену покупки каждого продукта.Во втором списке у меня есть столбец с кодом покупки, серийным номером группы продуктов, разделенных запятыми, в другом столбце, а в третьем столбце - цена каждой группы продуктов.

Я являюсьиспользуя формулу ниже, но когда коды в столбце «E» повторяются, формула не работает:

=IF(HLOOKUP(B2;SPLIT(VLOOKUP(A2;$E$1:$F$1000;2;FALSE);", ";TRUE);1;FALSE)<>"#N/A";VLOOKUP(A2;$E$1:$G$5;3;FALSE);"")

Пример

Тестовая таблица

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Вы можете использовать запрос

=query(E:G,"select G where E='"&A2&"' and F contains '"&B2&"' limit 1 label G ''")

при условии, что ни один из идентификаторов в столбце B не может быть подстрокой другого идентификатора.

enter image description here

1 голос
/ 26 сентября 2019

Я взял на себя смелость написать код скрипта приложений для того, что вам нужно, вот оно:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSheet();
  var data = ss.getRange("B2:B" + ss.getLastRow()).getValues(); // IDs
  var list = ss.getRange("F2:G" + ss.getLastRow()).getValues(); // ID List
  var prices = [];

  for (var i = 0; i < data.length; i++) { 
    for (var j = 0; j < list.length; j++){     
      if (list[j][0].indexOf(data[i][0]) >- 1){
        prices.push([list[j][1]]);
        break;
      }
    }
  }
  ss.getRange("C2:C" + ss.getLastRow()).setValues(prices);
}

он выполняет проверку на основе значений списка идентификаторов и самого идентификатора, ничего не делаетсо значением cod.

...