EXCEL VBA: редактирование столбца строк с помощью функции

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

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

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

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Попробуйте найти строку, в которой вы получаете сообщение об ошибке, используя F8.

Mikku 29.05.2019 05:25

Не могу поверить, что одна строчка испортила весь код! Большое спасибо, это исправлено.

j18273018 29.05.2019 05:40

Ну, это ответ сейчас

alowflyingpig 29.05.2019 05:46

Другие вопросы по теме