EXCEL VBA: редактирование столбца строк с помощью функции - PullRequest
0 голосов
/ 29 мая 2019

Каждый день я работаю с отчетами, в которых перечисляются результаты для каждой инициативы, с которой мы работаем, в диапазоне около 40 возможных результатов. Я создал 4 группы, в которые может попасть каждый из этих результатов, чтобы уменьшить требуемое понимание, и хотел бы, чтобы мой код заменял каждый отдельный результат в столбце B на назначенную ему группу результатов. Я впервые создаю свою собственную функцию в VBA, поэтому, пожалуйста, простите за любые очевидные ошибки.

Я создал простой Sub, который должен (надеюсь) найти последнюю строку столбца B, а затем зациклить каждую строку в столбце, передавая содержащуюся строку в созданную мной функцию. Он должен принять строку, выполнить «выбор случая», чтобы выяснить, какой группе результатов будет назначена строка, а затем вернуть группу результатов в Sub для текущей ячейки, которую нужно отредактировать. Варианты выбора регистра в моем коде были уменьшены для удобства чтения. Кроме того, функция хранится в отдельном модуле VBA для sub.

Sub fixOutcomeColumn()

    Dim lastRow As Long
    Dim rng As Range, col As Range
    Dim val As String

    lastRow = Cells(Rows.Count, 2).End(xlUp).Row
    val = "test"
    Set col = ActiveWorkbook.ActiveSheet.Range("B1" & lastRow)
    Set rng = ActiveWorkbook.ActiveSheet.Range("B1")

    For Each rng In col.Cells
        val = rng.Value
        rng = changeOutcomesToOG(val)
    Next rng

End Sub

Public Function changeOutcomesToOG(str As String) As String

    Select Case str
        Case "a"
            changeOutcomesToOG = "A"
        Case "b"
            changeOutcomesToOG = "B"
        Case "c"
            changeOutcomesToOG = "C"
        Case "d"
            changeOutcomesToOG = "D"
        Case "e"
            changeOutcomesToOG = "E"
        Case Else
            changeOutcomesToOG = str
    End Select

End Function

Выполнение кода в редакторе при чтении окна Locals показывает, что моя переменная rng не заполняется никакими значениями при запуске кода. Кроме того, код не проходит по каждой ячейке в столбце, а вместо этого запускает цикл for. Я полагаю, что совершил довольно простую ошибку, но не могу понять это ради своей жизни!

1 Ответ

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

Можете ли вы попробовать это:

Sub fixOutcomeColumn()

    Dim lastRow As Long
    Dim rng As Range, col As Range
    Dim val As String

    lastRow = Cells(Rows.Count, 2).End(xlUp).Row
    val = "test"
    Set col = ActiveWorkbook.ActiveSheet.Range("B1:B" & lastRow)
    'Set rng = ActiveWorkbook.ActiveSheet.Range("B1")

    For Each rng In col.Cells
        val = rng.Value
        rng.Value = changeOutcomesToOG(val)
    Next rng

End Sub

Public Function changeOutcomesToOG(str As String) As String

    Select Case str
        Case "a"
            changeOutcomesToOG = "A"
        Case "b"
            changeOutcomesToOG = "B"
        Case "c"
            changeOutcomesToOG = "C"
        Case "d"
            changeOutcomesToOG = "D"
        Case "e"
            changeOutcomesToOG = "E"
        Case Else
            changeOutcomesToOG = str
    End Select

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