我对VBA很新,任何帮助都将不胜感激。我正在尝试创建一个宏来执行vlookup而不是在单元格中手动键入它。
我的excel文件有2个工作表,一个名为' Microsoft'另一个名为' SN用户名'。
所以我在' SN用户名'中查找数据将查找结果返回到工作表' Microsoft' (B21)
这是我在VBA中尝试做的vlookup = VLOOKUP(B21,' SN用户名'!A:B,2,FALSE)
任何帮助都将不胜感激! 感谢
答案 0 :(得分:0)
您可以使用VBA版本函数Application.VLookup
。
下面的片段代码检查Sheet" Microsoft"中的Cell B21的值。可以在工作表A列中找到:B" SN用户名"。如果发现它将第二列返回到单元格A21(您可以根据需要对其进行修改)。如果没有,则在单元格A21中放入" Item Not Found"的文本消息。 - 仅供参考。
Option Explicit
Sub VLookup_withErrHandling()
Dim Cell As Range
Dim Rng As Range
Dim lRow As Range
Set Cell = Sheets("Microsoft").Range("B21")
Set Rng = Sheets("SN Username").Range("A:B")
If Not IsError(Application.VLookup(Cell, Rng, 2, False)) Then
Cell.Offset(0, -1).Value = Application.VLookup(Cell, Rng, 2, False)
Else
Cell.Offset(0, -1).Value = "Item Not Found"
End If
End Sub
添加For
循环:如果您要循环浏览" Microsoft"中的许多行表格,您可以在下面添加以下代码:
Dim lRow As Long
' just for example, loop from row 21 until row 30
For lRow = 21 To 30
Set Cell = Sheets("Microsoft").Range("B" & lRow)
If Not IsError(Application.VLookup(Cell, Rng, 2, False)) Then
Cell.Offset(0, -1).Value = Application.VLookup(Cell, Rng, 2, False)
Else
Cell.Offset(0, -1).Value = "Item Not Found"
End If
Next lRow
修改 1:根据下面的PO修改说明:
Option Explicit
Sub VLookup_withErrHandling()
Dim Cell As Range
Dim Rng As Range
Dim LastRow As Long
Dim lRow As Long
With Sheets("SN Username")
' find last row with username in column A
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
Set Rng = Sheets("SN Username").Range("A2:B" & LastRow)
End With
' loop through row 2 until row 20
For lRow = 2 To 20
Set Cell = Sheets("Microsoft").Range("A" & lRow)
If Not IsError(Application.VLookup(Cell.Value, Rng, 2, False)) Then
Cell.Offset(0, 1).Value = Application.VLookup(Cell.Value, Rng, 2, False)
Else
Cell.Offset(0, 1).Value = "UserName Not Found in SN UserNames sheet"
End If
Next lRow
End Sub