VBA查找功能

时间:2017-05-31 12:37:52

标签: excel vba excel-vba

我在工作簿的sheet1中有一个表格,如下所示:

section  |  Class  
11       |  2  
11       |  2  
12       |  3  
12       |  3  
12       |  3  
13       |  4

在表2中我有这样的事情:

section  |  Class  
11       |    
11       |   
11       |  
11       |  
11       |  
11       |   
12       |    
12       |    
12       |  
12       |  
12       |    
13       |  

我想使用sheet2中的lookup函数从sheet1获取Class的值,这是仅为第一个单元格生成的宏:

ActiveCell.FormulaR1C1 = _
        "=LOOKUP(RC[-1],Sheet1!RC[-1]:R[4]C[-1],Sheet1!RC:R[4]C)"

我的实际公式是:

=LOOKUP(A2,Sheet1!A2:A6,Sheet1!B2:B6)

我希望它像:

=LOOKUP(A2,Sheet1!$A$2:A6,Sheet1!$B$2:B6)

但这不允许。 有人可以帮我填写课程栏吗?

2 个答案:

答案 0 :(得分:2)

尝试这样的事情......

Sub GetClasses()
Dim wsSource As Worksheet, wsDest As Worksheet
Dim lr1 As Long, lr2 As Long
Application.ScreenUpdating = False
Set wsSource = Sheets("Sheet1")
Set wsDest = Sheets("Sheet2")
lr1 = wsSource.Cells(Rows.Count, 1).End(xlUp).Row
lr2 = wsDest.Cells(Rows.Count, 1).End(xlUp).Row
wsDest.Range("B2:B" & lr2).Formula = "=LOOKUP(A2,'" & wsSource.Name & "'!$A$2:$A$" & lr1 & ",'" & wsSource.Name & "'!$B$2:$B$" & lr1 & ")"
Application.ScreenUpdating = True
End Sub

答案 1 :(得分:2)

R1C1参考样式起初有点奇怪,但是如果你打算做VBA,你应该尝试理解它。

方括号表示相对参考,没有括号表示绝对参考:

IPCache$i =第1行,第4列= R1C4
$D$1 =相对于公式的位置,1行向下,2列向左 R[1]C[-2]变为空,[0]实际上会变成R[0]C[1],意思是同一行,右边一列。

所以在你的情况下,公式应如下所示:

RC[1]

您可以使用Excel显示这样的公式,这可能有助于了解此公式类型的工作原理。在文件/选项/公式中,勾选“R1C1参考样式”。

或者,您可以使用ActiveCell.FormulaR1C1 = _ "=LOOKUP(RC[-1],Sheet1!R2C1:R[4]C[-1],Sheet1!R2C2:R[4]C)" 代替.Formula,而不是@sktneer。起初它更容易,但你会发现它在VBA中的用途更为有限。