Добрый день,
Имеется таблица с данными по товарам, людям, поставщикам и пр. Некоторые столбцы заполняю данными используя процедуры, написанные на VBA
Но реалии таковы, что иногра в существующую таблицу приходится добавлять новые столбцы.
Посетила мысль, что, если в макросах ссылаться на номера столбцов не прямо (1, 2, 3 и т.д.), а предварительно проводя поиск номера нужного столбца по его названию, то это позволит свободно вставлять столбцы в таблицу и не беспокоиться о том, что в ранее написанном макросе надо изменить в диапазоне столбец 3 на 4, т.к. перед ним вставили еще один.
Для того, чтобы пробежаться по всем столбцам в шапке таблицы (это у меня строка 1) использовался ранее метод .Find и все работало до тех пор, пока не возникла необходимость провести поиск, когда некоторые столбцы скрыты. И оказалось, что Find не работает.
Пробуду перейти на поиск через массив (ниже пример кода с комментарием, что делаю).
Вопрос следующий: мне кажется, я делаю этот поиск в массиве неэффективно. (через множество if).
Наверняка можно оптимизировать мой поиск. Если есть предложения, помогите, пожалуйста.
Имеется таблица с данными по товарам, людям, поставщикам и пр. Некоторые столбцы заполняю данными используя процедуры, написанные на VBA
Но реалии таковы, что иногра в существующую таблицу приходится добавлять новые столбцы.
Посетила мысль, что, если в макросах ссылаться на номера столбцов не прямо (1, 2, 3 и т.д.), а предварительно проводя поиск номера нужного столбца по его названию, то это позволит свободно вставлять столбцы в таблицу и не беспокоиться о том, что в ранее написанном макросе надо изменить в диапазоне столбец 3 на 4, т.к. перед ним вставили еще один.
Для того, чтобы пробежаться по всем столбцам в шапке таблицы (это у меня строка 1) использовался ранее метод .Find и все работало до тех пор, пока не возникла необходимость провести поиск, когда некоторые столбцы скрыты. И оказалось, что Find не работает.
Пробуду перейти на поиск через массив (ниже пример кода с комментарием, что делаю).
Вопрос следующий: мне кажется, я делаю этот поиск в массиве неэффективно. (через множество if).
Наверняка можно оптимизировать мой поиск. Если есть предложения, помогите, пожалуйста.
Код |
---|
' определяем массив MyArr = Range("A1", Cells.SpecialCells(11)).Value ' происк провожу по 1 строке по всем столбцам (это шапка таблицы с заголовками) For lc = 1 To UBound(avArr, 2) 'через условие в массиве ищу ячейку, где встречается нужное значение и передаю в переменную номер найденного столбца If MyArr(lr, lc) = "Страна происхождения" Then ' передаю в переменную iCOO номер столбца, где в заголовке "страна происхождения" iCOO = Cells(lr, lc).Column End If If MyArr(lr, lc) = "Наименование" Then ' передаю в переменную iDescr номер столбца, где в заголовке "Наименование" iDescr = Cells(lr, lc).Column End If If MyArr(lr, lc) = "Название завода" Then ' передаю в переменную iFactory номер столбца, где в заголовке "Название завода" iFactory = Cells(lr, lc).Column End If Next lc |