【问题标题】:Utilizing VLookup in VBA在 VBA 中使用 VLookup
【发布时间】:2019-01-18 01:20:02
【问题描述】:

我目前正在处理电子表格并希望使用 vlookup,但如果它是通过 VBA 更愿意。

我附上了两张表格的截图,所以你们可以直观地看到我想要做什么。

基本上我试图从工作表 IW38 列 K 中提取“优先级”并将其放在工作表“IW47”列 R 上,但使用订单号作为匹配信息。订单号在表 IW47 的“E”列和表 IW47 的“A”列中。

以下是我尝试使用的当前宏:

Sub PriorityNUM()

'Variables----------------------------------------

'Defining WorkBook
Dim wb As Workbook

'Defining Sheets----------------------------------------------
'Working Asset Sheet
Dim IW47ws As Worksheet
'Sheet for Parts List Submission
Dim IW38ws As Worksheet

'Setting Worksheets
Set IW47ws = Sheets("IW47")
Set IW38ws = Sheets("IW38")

'Defigning Ranges within Worksheets----------------------------
Dim IW38rng As Range

'Setting Ranges within Submit Worksheets-------------------
Set IW38rng = IW38ws.Range("A:Z")

'Defining the Last Cell in Each Task Column----------------
Dim IW47last As Long

'Assigning Values to Last Row Variables
IW47last = IW47ws.Range("E" & Rows.Count).End(xlUp).Row

'Updating Drawings Identified---------------------------------------------------
Dim PriorityCell As Range
Dim PriorityLookup As String

For Each PriorityCell In IW47ws.Range("R:R")
If IsEmpty(DICell.Offset(0, -13).Value) Then
Exit For
End If
On Error Resume Next
PriorityLookup = WorksheetFunction.VLookup(PriorityCell.Offset(0, -13), IW38rng, 11, False)

If Err = 0 Then
PriorityCell.Value = PriorityLookup
Else
Err.Clear
End If
On Error GoTo 0
Next PriorityCell

End Sub

任何帮助将不胜感激。

谢谢, 娟

【问题讨论】:

  • 刚刚意识到我还不能发布图片。对不起。
  • 故障点是分享的重要内容。
  • 感谢您指出这一点!我收到“424”错误代码,但说实话,我不确定我是否一开始就做对了。感谢您的回复!
  • 我认为你需要使用PriorityCell.Offset(0, -13).Value 而不是PriorityCell.Offset(0, -13)
  • 424 后执行什么行?

标签: excel vba vlookup


【解决方案1】:

可读性

OP,您的代码可以像下面这样重组。我还使用了一些简写变量来使事情变得更容易。理想情况下,您的变量名称应该简洁(易于阅读且易于键入)。可读性在故障排除方面大有帮助。

看到后告诉我,我可以删除

Sub PNum()

Dim ws47 As Worksheet: Set ws47 = ThisWorkbook.Sheets("IW47")
Dim ws38 As Worksheet: Set ws38 = ThisWorkbook.Sheets("IW38")

Dim Arr As Range: Set Arr = ws38.Range("A:K")

Dim LR As Long, MyCell As Range, Priority As String

LR = ws47.Range("E" & ws47.Rows.Count).End(xlUp).Row

For Each MyCell In ws47.Range("R2:R" & LR)
    If IsEmpty(MyCell.Offset(-13)) Then Exit Sub

    On Error Resume Next
        Priority = WorksheetFunction.VLookup(MyCell.Offset(, -13), Arr, 11, 0)

        If Err = 0 Then
            MyCell = Priority
        Else
            Err.Clear
        End If
    On Error GoTo 0

Next MyCell

End Sub

【讨论】:

  • 请阅读您的评论。在 S.O 社区的帮助下,我能够让我的工作,但我也会试一试。非常感谢。我真的很感谢你抽出时间帮助我。胡安
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多