копировать значение в столбцы текущей строки из др листа по условию

Автор fi1ip, 14 июля 2015, 10:57

0 Пользователи и 1 гость просматривают эту тему.

fi1ip

Добрый день.
Прошу помощи советом или решением задачи за доп плату :beer: следующей задачи.

Пытаюсь сделать макрос который будет в цикле на текущем листе таблицы Calc считывать строку в столбце Е, искать строку с таким значением в столбце Е на другом листе который называется Spec. Если строка будет найдена, то нужно скопировать данные из столбцов с G по AA найденной строки листа Spec на текущий лист в текущую строку в столбцы с аналогичными номерами.

JohnSUN

...а если вдруг не будет найден, то пусть напишет хотя бы "#Н/Д" ("нет данных)?
Как насчет использования функции VLOOKUP() без всякой дополнительной платы?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

fi1ip

Sub Main
   dim iskomy_text
   dim i as integer
   dim iskomy_num
   Sheet1 = thiscomponent.getcurrentcontroller.activesheet
   Sheet2 = thiscomponent.sheets.getByIndex(0)
   for I = 1 to 77
      iskomy_text = Sheet1.getCellByPosition(4, i).GetString()
      
                rem тут выполняем поиск
                vlookup(iskomy_text, ДиапазонПоиска, НомерКолонки)

   next i
End Sub


Возникает вопрос, как передать диапазон поиска с другого листа (sheet1) книги, в котором будем искать
Пытаюсь получить данные с нулевого листа по параметру на текущем

JohnSUN

Дело в том, что функцию VLOOKUP() нужно вызывать не из кода макроса, а вписать в ячейку таблицы.

Предположим, что первое искомое значение находится в E2 (ну, в первой строке обычно пишут какие-то названия колонок, а данные располагают ниже, со второй строки и дальше). Тогда достаточно в ячейку G2 вписать формулу
=VLOOKUP($E2;$Spec.$E$2:$AA$500;COLUMN()-5;0)
растянуть её влево до колонки AA, а затем вниз... Всё, задача решена. И макрос здесь действительно не нужен, дальше Calc всё сделает сам.

Если надпись "#Н/Д" для не найденных значений раздражает, то формулу можно немного усложнить
=IF(ISERROR(VLOOKUP($E2;$Spec.$E$2:$AA$500;1;0));"";VLOOKUP($E2;$Spec.$E$2:$AA$500;COLUMN()-5;0))
В этом случае ячейки для ошибочных значений останутся пустыми
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

fi1ip