Использование Excel VBA для поиска диапазона - PullRequest
0 голосов
/ 18 ноября 2009

Мне дали несколько книг, которые отформатированы для глаз, а не для чего-либо функционального. Таким образом, у меня есть довольно много заголовков столбцов, которые выглядят так:

  A             B         C         D      E
1               'YTD      'Monthly  'YTD   'Monthly
2               Figures'  Figures'  Plan'  Plan'
3  
4  Account1     1         3         5      7
5  Account2     2         4         6      8

Я использовал .Find для определения строки для 'Account 1', а затем заголовок столбца для 'Monthly Plan' и скопировал значение этой ячейки в массив. Однако есть несколько областей (например, мой пример выше), где я не могу легко найти столбец E, потому что поиск либо 'Monthly', либо 'Plan', очевидно, дает мне ненадежные результаты.

До сих пор я использовал Do... While... Loop, чтобы найти адрес ячейки для 'Monthly', затем проверял значение ячейки сразу для слова 'Plan' и выполнял цикл с использованием .FindNext до совпадения.

Это не очень элегантно - так есть ли способ поиска фиктивного массива / диапазона по расположению слов, которые я ищу?

1 Ответ

1 голос
/ 18 ноября 2009

Что если вы обнаружите конкатенацию одной ячейки и ближайшей ниже?

Вы можете уточнить его, обрезав или удалив пробелы, символы и преобразовав все в строчные буквы, чтобы упростить обнаружение.

Вместо использования find вы должны зацикливаться на ячейках.

Редактировать: вот возможное решение:

Sub Macro1()

    Dim idx_row As Long
    Dim idx_column As Long
    Dim idx_row_temp As Long
    Dim found_row As Boolean
    Dim found_column As Boolean
    Dim str_concat As String

    found_row = False
    idx_row = 1
    idx_column = 1
    Do While (Not found_row)
        If (Cells(idx_row, idx_column).Value = "Account1") Then
            found_row = True
        Else
            idx_row = idx_row + 1
        End If
    Loop

    found_column = False
    idx_row_temp = 1
    Do While (Not found_column)

        str_concat = Cells(idx_row_temp, idx_column).Value & Cells(idx_row_temp + 1, idx_column).Value

        MsgBox (str_concat)

        If (str_concat = "'MonthlyPlan'") Then
            found_column = True
        Else
            idx_column = idx_column + 1
        End If
    Loop

    MsgBox "Row: " & idx_row & vbCrLf & "Column: " & idx_column

End Sub

Конечно, его можно улучшить и улучшить, но это будет основной идеей.

Или ... почему вы не нашли первое числовое значение?

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