Каждый день я работаю с отчетами, в которых перечисляются результаты для каждой инициативы, с которой мы работаем, в диапазоне около 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. Я полагаю, что совершил довольно простую ошибку, но не могу понять это ради своей жизни!