Как использовать VLookup в качестве параметра диапазона в VBA? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть оператор IF, работающий нормально, но мне нужно использовать VLookup в качестве диапазона, так как ячейка, которая является субъектом IF, может находиться в другой строке, но никогда не в другом столбце.

Я новичок в VBA (но не для того, чтобы преуспеть), поэтому VLookup был инстинктивным ходом, но я не привязан к нему, если смогу добиться того же самого другим способом.Я пытался найти решения в Интернете, но, похоже, на самом деле не отвечаю на этот запрос.

Ниже приведен исходный код со статическим диапазоном.

Sub FINDTOTAL()

Dim Amount As String
Amount = "Subtotal"

thetotal = Application.WorksheetFunction.Vlookup(Amount, Sheet1.Range("G:H"), 2, False)

End Sub

Sub CalculateSubtotal()

If Range("H25") > 10000 Then
    Sheets("Billing").Select
Else
    Worksheets("Sheet1").Range("H25").Copy
    MsgBox "Subtotal has been copied and can be pasted into the quote"

End If
End Sub

VLookup работает, и оператор IF работает, я просто не могу их получитьработать вместе.Мне нужно, чтобы промежуточный итог оценивался для оператора IF, независимо от того, где он находится в столбце (вероятно, он может находиться где угодно между строками 3–50).

1 Ответ

0 голосов
/ 09 мая 2019

Может быть что-то вроде этого:

Sub FindTotal()

    Dim Total As Variant
    Total = Application.VLookup("Subtotal", Sheet1.Range("G:H"), 2, False)

    If Not IsError(Total) Then
        If IsNumeric(Total) Then
            If Total > 10000 Then
                ' Do one thing
            Else
                ' Do another thing
            End If
        End If
    End If

End Sub

Если вы хотите записать сумму в другую ячейку в другом месте, вам не нужно копировать, просто прямая передача значения.


Демонстрация подхода Find / Offset:

Sub FindTotal()

    Dim rng As Range
    Set rng = Sheet1.Columns("G").Cells.Find(What:="Subtotal")

    If Not rng Is Nothing Then
        Dim totalRng As Range
        Set totalRng = rng.Offset(, 1)

        If IsNumeric(totalRng.Value) Then
            If totalRng.Value > 10000 Then
                ' Do one thing
            Else
                ' Do another thing
            End If
        End If
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...