Excel VBA - ссылка между диапазонами - PullRequest
2 голосов
/ 30 марта 2011

Вот моя проблема:

У меня есть два диапазона, r_products и r_ptypes, которые принадлежат двум разным листам, но одинаковой длины, т.е.

Set r_products = Worksheets("Products").Range("A2:A999")
Set r_ptypes = Worksheets("SKUs").Range("B2:B999")

Я ищу что-то в r_products, и мне нужно выбрать значение в той же позиции в r_ptypes. Результат метода Find сохраняется в cellfound. Теперь рассмотрим следующие данные:

Sheet: Products
   A          B        C          D 
1  Product
2  S1
3  P1
4  P2
5  S2
6  S3

Sheet: SKUs
   A         B         C          D
1           SKU
2           S1-RP003
3           P1-BQ900
4           P2-HE300
5           S2-NB280
6           S3-JN934

Теперь, когда я ищу S1, cellfound.Row дает мне значение 2, которое, как я понимаю, 2-я строка в общем листе, но на самом деле это 1-я строка в диапазоне (A2: A999).

Когда я использую это значение cellfound.Row для ссылки на r_ptypes.cells (cellfound.Row), оно принимает его как значение индекса и возвращает B3 (P1-BQ900) вместо того, что я хочу, то есть B2 (S1- RP003).

Мой вопрос: как я узнаю номер индекса в ячейке? Если это невозможно, как я могу использовать номер строки для извлечения данных из r_ptypes?

Ответы [ 2 ]

3 голосов
/ 30 марта 2011

Решение Данте выше работает отлично.Также мне удалось получить значение индекса, используя встроенную функцию Excel Match, а не метод Find для диапазона.Перечислите его здесь для справки.

indexval = Application.WorksheetFunction.Match("searchvalue", r_products, 0)

Используя вышеизложенное, теперь я могу ссылаться на строки в r_ptypes

skuvalue = r_ptypes.Rows(indexval).Value
0 голосов
/ 30 марта 2011

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

Итак, просто сделайте небольшую работу, чтобы справиться с этим.

Например,

r_ptypes.Cells(cellfound.Row - r_ptypes.Cells(1).Row + 1)

или немного аккуратно (?)

With r_ptypes
    .Cells(cellfound.Row - .Cells(1).Row + 1)
End With

То есть, получить разницу строк между cellfound и первой ячейкой и + 1, потому что Excel считает ячейки от 1.

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