Использование VLookup в VBA - PullRequest
       8

Использование VLookup в VBA

0 голосов
/ 17 января 2019

В настоящее время я работаю с электронной таблицей и хотел бы использовать vlookup, но предпочел бы, чтобы это было через VBA.

Я приложил два скриншота листов, чтобы вы, ребята, могли наглядно увидеть, что я пытаюсь сделать.

По сути, я пытаюсь извлечь «Приоритет» из столбца K листа IW38 и поместить его в столбец R листа «IW47», но с использованием номера заказа в качестве информации о соответствии. Номера для заказа указаны в столбце «E» на листе IW47 и в столбце «A» на листе IW47.

Ниже приведен текущий макрос, который я пытался использовать:

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

Любая помощь будет принята с благодарностью.

Спасибо, Juan

1 Ответ

0 голосов
/ 17 января 2019

читаемость

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
...