Преобразование из формулы Excel в код VBA - PullRequest
0 голосов
/ 20 ноября 2018

Что эквивалентно следующему коду Excel в VBA?

=MATCH(A1,Ranged_Name,0)

, где Ranged_Name - это ранжированное имя на уровне книги.

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

В ячейке рабочего листа и в VBA:

Sub dural()
    MsgBox Evaluate("Match(A1,Range_Name,0)")
End Sub

enter image description here

РЕДАКТИРОВАТЬ # 1:

На основе комментариев, лучшая альтернатива:

Sub dural()
    Dim r1 As Range, r2 As Range, v As Variant, wf As WorksheetFunction

    Set r1 = Sheets("Sheet1").Range("A1")
    Set r2 = Range("Range_Name")
    Set wf = Application.WorksheetFunction

    v = wf.Match(r1, r2, 0)
    MsgBox v
End Sub

и использовать Find():

Sub larud()
    Dim r1 As Range, r2 As Range, v As Variant

    Set r1 = Sheets("Sheet1").Range("A1")
    Set r2 = Range("Range_Name")

    v = r2.Find(What:=r1.Value, After:=r2(1)).Row

    MsgBox v
End Sub
0 голосов
/ 20 ноября 2018

Чтобы добавить еще один:

Dim r
With Activesheet
    r = Application.Match(.Range("A1").Value, Range("Ranged_Name"), 0)
End with

If Not IsError(r) Then
    'got a match
End If
0 голосов
/ 20 ноября 2018

Вы можете использовать Range (). Find или Evaluate () your Match, если лист является ActiveSheet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...