Как ссылаться на несколько столбцов в таблице по номеру - PullRequest
0 голосов
/ 22 января 2020

Я хочу использовать Application.Match, чтобы найти строку таблицы и сохранить ее в массиве. У меня это работает для поиска в одном столбце:

With Worksheets("Data").ListObjects(tblName)
    myArray = Application.Transpose(Application.Transpose(.ListRows( _
         Application.Match(searchTerm, .ListColumns(1).DataBodyRange, 0 _
    ).Range)))
End With

Но некоторые таблицы, на которые я хочу посмотреть с этим подпунктом, могут иметь searchTerm в столбце 2, поэтому я хочу расширить диапазон, на который ссылаются в Application.Match" to the 1st and 2nd columns. I've heard about using .Resize (, 2) `но я не могу заставить его работать. Сегодня я узнал о структурированных ссылках и могу ссылаться на столбцы следующим образом:

Worksheets("Data").Range("tblName[[Column1]:[Column2]]").Activate

Но для этого требуется, чтобы я ссылался на столбцы по их заголовкам, которые отличаются в разных таблицах, и я хочу иметь возможность используйте их номер. Кто-нибудь знает решение, которое не включает циклы, если searchTerm не найден в первом столбце?

Обновление:

Чтобы предоставить больше информации по моему вопросу.

  1. Пользователь выбирает ячейку, которая содержит строку. Строка разбивается на 2 элемента в массиве instruction.

  2. instruction(0) = имя таблицы, в которой я хочу посмотреть. instruction(1) = термин, который я ищу. Этот термин может быть в столбце 1 или 2.

  3. Строка таблицы instruction(0), содержащая instruction(1), затем загружается в другой массив с именем interactData

  4. У каждой таблицы есть свой саб, в котором элементы interactData используются для разных действий.

1 Ответ

0 голосов
/ 23 января 2020

Вот обходной путь, который мне удалось найти:

Dim headers As Variant
headers = Application.Transpose(Application.Transpose(Data.Range(instruction(0) & "[#Headers]")))
interactData = Application.Transpose(Application.Transpose(Data.ListObjects(instruction(0)).ListRows( _
Data.Range(instruction(0) & "[[" & headers(1) & "]:[" & headers(2) & "]]").Find(instruction(1)).Row - 2 _
).Range))
Erase headers

Я использовал другой массив headers для хранения имен столбцов, а затем использовал headers(1) и headers(2) в структурированные ссылки для функции Range().Find().Row. К сожалению, .DataBodyRange не очень подходит для этого метода, поэтому мне пришлось вычесть 2 из результата строки, потому что строка 1 таблицы находится в строке 3 листа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...