Как заполнить переменную с помощью формулы - PullRequest
0 голосов
/ 16 мая 2019

Основная идея состоит в том, чтобы иметь поиск, который не только выделит строку, которая содержит определенное значение в столбце C, но и приведет меня туда. Я пытаюсь объединить условное форматирование с функцией CTRL + F, в основном.

Моя таблица состоит из 6000 строк.

Я пробовал разные подходы, но самое близкое, что мне удалось получить, это:

=MATCH($U$1, $C2:$C6000,0) 

Чтобы получить строку, в которой текст в этой строке соответствует значению, которое я напечатал в моем «окне поиска», расположенном в ячейке U1. Эта ячейка является частью моей замороженной строки заголовка, поэтому она всегда доступна на экране.

Это вернет строку из моего диапазона поиска, скажем, 1175. Поскольку у меня есть строка с замороженным заголовком, моей целевой строкой станет строка 1176 в реальной электронной таблице. Моя цель - заставить Excel перейти к строке 1176, выделить эту строку и выбрать ее в качестве активной строки, чтобы я мог немедленно поработать над этой строкой.

Я использую эту формулу для создания фактической ссылки на ячейку:

=CONCATENATE("C",MATCH($U$1, $C2:$C6000,0)+1)

Моя проблема в том, что я не могу найти способ заставить Excel просто перейти к строке 1176, основываясь на результате вышеупомянутого forumla. Поэтому мое решение было коротким сабвуфером в VBA:

Sub Go_To()
    Dim Target_Cell As String
    Target_Cell = CONCATENATE("C",MATCH($U$1, $C2:$C6000,0)+1)
    Range(Target_Cell).Activate
End Sub

Это не работает, и я не могу понять, почему. Кажется, переменная не наполняется C1176. Официально работает нормально и отображает правильную ссылку на ячейку, когда я использую его в Excel, но он не работает в VBA.

Может кто-нибудь пролить свет на то, почему он там терпит неудачу?

1 Ответ

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

Вам необходимо правильно использовать метод WorksheetFunction.Match . И строки объединяются с & в VBA:

Option Explicit

Public Sub JumpTo()
    Dim MatchedRow As Double
    On Error Resume Next 'next line throws error if no match is found
    MatchedRow = Application.WorksheetFunction.Match(Range("U1"), Range("C2:C6000"), 0)
    On Error Goto 0 'always re-activate error reporting

    If MatchedRow <> 0 Then
        Range("C" & MatchedRow + 1).Select
    Else
        MsgBox "'" & Range("U1") & "' was not found."
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...