这是我的问题:
我有两个范围,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)时,它将它作为一个Index值并返回B3(P1-BQ900)而不是我想要的,即B2(S1- RP003)。
我的问题是如何找到cellfound中的索引号?如果不可能,我如何使用行号从r_ptypes中提取数据?
答案 0 :(得分:3)
Dante上面的解决方案运行正常。此外,我设法使用内置的Excel函数匹配而不是使用范围的查找方法来获取索引值。在此处列出以供参考。
indexval = Application.WorksheetFunction.Match("searchvalue", r_products, 0)
使用上面的内容,我现在能够引用r_ptypes中的行
skuvalue = r_ptypes.Rows(indexval).Value
答案 1 :(得分:0)
因为.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中的单元格。