Использование функций соответствия и адреса в макросах или VBA - PullRequest
1 голос
/ 06 декабря 2011

У меня есть две таблицы, я хочу использовать значение на листе to_approve для поиска по column A на листе submitted, затем определить ссылку на ячейку, чтобы я мог вставить значение в соседнюю ячейку (column B).

Я использовал следующее для определения ссылки на ячейку, но не знаю, как использовать ее в коде VBA.

=ADDRESS(MATCH(To_Approve!D19,Submitted!A:A,0),1,4,1,"submitted")

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Хотя многие функции можно использовать в VBA, используя Application.WorksheetFunction.FunctionName АДРЕС не является одним из них (MATCH есть)

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

  • дает вам возможность сопоставлять строки целиком или частично, с учетом регистра или без
  • возвращает объект диапазона для работы, если найдено значение
  • легко справляется с несоответствием
  • Вы можете контролировать точку в диапазоне поиска, где начинается поиск
  • несколько матчей могут быть возвращены с FindNext

что-то вроде

Sub GetCell()
 Dim ws As Worksheet
    Dim rng1 As Range
    Set ws = Sheets("submitted")
    Set rng1 = ws.Columns("A").Find(Sheets("To_Approve").[d19], , xlValues, xlWhole)
    If Not rng1 Is Nothing Then
        MsgBox rng1.Address & " in sheet " & ws.Name
    Else
        MsgBox "not found", vbCritical
    End If
End Sub
0 голосов
/ 06 декабря 2011

Этот пример должен дать вам представление о том, как найти соответствующее значение на другом листе и поместить второе значение в столбец слева. При использовании VBA нет необходимости выделять ячейки, а затем вставлять; Вы можете напрямую ввести значение в объект диапазона (ячейки).

Sub TransferValue()
    Dim rngSearch As Range
    Dim rngFind As Range
    Dim dValue As Double
    ' initialization
    Set rngSearch = Worksheets("to_approve").Range("D19")
    dValue = Date
    ' find the match & insert value
    Set rngFind = Worksheets("submitted").Columns(1).Find(What:=rngSearch.Value)
    If Not rngFind Is Nothing Then
        rngFind.Offset(ColumnOffset:=1).Value = dValue
    End If
End Sub

(Примечание: dValue является заполнителем для любого значения, которое вы хотите ввести.)

...