【问题标题】:Vlookup Macro 2 worksheetsVlookup 宏 2 工作表
【发布时间】:2016-11-15 21:05:20
【问题描述】:

我对 VBA 非常陌生,我们将不胜感激。我正在尝试创建一个宏来进行 vlookup,而不是在单元格中手动输入它。

我的 excel 文件有 2 个工作表,一个名为“Microsoft”,另一个名为“SN 用户名”。

所以我正在“SN 用户名”中查找数据,并将查找结果返回到工作表“Microsoft”(B21)

这是我尝试在 VBA 中执行的 vlookup =VLOOKUP(B21,'SN 用户名'!A:B,2,FALSE)

任何帮助将不胜感激! 谢谢

【问题讨论】:

  • 您是否正确搜索了该站点?我已经多次看到这个问题了。请参考以下链接为您提供帮助:[stackoverflow.com/questions/40512439/… :)
  • 如果我理解正确,听起来您希望 vlookup 的结果进入 B21,但是通过将 B21 作为参数传递,您就有了循环引用。如果您发布您遇到的任何错误或意外行为的详细信息,将会有所帮助。
  • @Shah Miah 您可以将 VBA 版本的 VLOOKUP 与Application.VLookup 一起使用,这取决于哪种类型的解决方案适合您的需求。在下面查看我的答案,让我知道它是否适合您

标签: vba excel macros


【解决方案1】:

你可以使用VBA版函数Application.VLookup

下面的代码检查工作表“Microsoft”中单元格 B21 的值是否在工作表“SN 用户名”的 A:B 列中找到。如果找到它,它将第二列返回到单元格 A21(您可以根据需要对其进行修改)。如果没有,它会在单元格 A21 中放置一条“未找到项目”的文本消息 - 仅供参考。

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

【讨论】:

  • 嗨 Shai,非常感谢您的回复!我是新手,所以请和我一起裸露。让我再次尝试解释一下,因为我想我以前可能没有这样做过。
  • 嗨 Shai,非常感谢您的回复!我是新手,所以请和我一起裸露。让我再次尝试解释一下(道歉)工作表“Microsoft”在“A 列”中有一个用户名列表(用户名从 A2 开始并完成 A20)工作表“SN 用户名”在 A 列有完全相同的用户名列表(用户名从A2 并完成 A20)但在“B 列”中也有一个“全名”列表(全名从 B2 开始并完成 B20)所以我要做的是对用户名进行 Vlookup 并返回“全名”值“B 列”中的“Microsoft”工作表
  • @ShahMiah 尝试我的Edit 1 部分中的代码,它是根据您对所需内容的最新解释
  • 嗨,Shai..这太棒了!我感激不尽。我现在终于一点一点地理解代码了。非常感谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多