По сути, у меня есть категории, которые суммируются одной буквой алфавита при запуске данных, но, очевидно, это не имеет смысла для постороннего.

Мне нужен макрос, чтобы выделить в столбце, что там, где это "G", он заменяется "Custom name" и так далее.

"A" - изменено на "Custom1" "B" - изменено на "Custom2" и т.д.

1 ответ1

0

Вы можете настроить лист или несколько столбцов для перевода каждой буквы в "Пользовательское имя", а затем обращаться к ним таким образом.

Но я дам вам несколько примеров того, как это сделать, не имея имен ни в одной ячейке.

Пример 1

Просто зациклите все строки, и укажите каждую букву и ее название должно измениться.

Sub change()
Dim i As Integer, r As Integer, c As String
c = "E"
r = Cells(Rows.Count, c).End(xlUp).Row
For i = 1 To r
    Select Case UCase(Cells(i, c).Value)
        Case "A"
            Cells(i, c).Value = "Custom1"
        Case "B"
            Cells(i, c).Value = "Custom2"
        Case "C"
            Cells(i, c).Value = "Custom3"
        Case "D"
            Cells(i, c).Value = "Custom4"
        Case "E"
            Cells(i, c).Value = "Custom5"
        Case "F"
            Cells(i, c).Value = "Custom6"
        Case "G"
            Cells(i, c).Value = "Custom7"
        Case "H"
            Cells(i, c).Value = "Custom8"
        Case "I"
            Cells(i, c).Value = "Custom9"
        Case "J"
            Cells(i, c).Value = "Custom10" 'And so on
    End Select
Next i

End Sub

Для простоты доступа имя столбца (число работает также) задается переменной c .
Это будет работать только на точных совпадениях и игнорировать все остальное.
Он не чувствителен к регистру (благодаря UCase), просто не забудьте указать букву в case как Upper case, иначе она не будет работать.

Case "A" 'Will work
Case "a" 'Won't work

Это может превратиться в довольно длинный список, поэтому другой способ сделать это:

Пример 2

Sub changeArray()
Dim i As Integer, r As Integer, c As String

Dim Product
Product = Array("Custom1-A", "CustomB", "Custom3", "CustomD", , , , "Custom8", , , , , "Custom13", , , , , , , "Custom20", , , , , , "Custom25-Z")

c = "E"
r = Cells(Rows.Count, c).End(xlUp).Row
For i = 1 To r
    Select Case UCase(Cells(i, c).Value)
        Case "A" To "Z"
            Cells(i, c).Value = Product(Asc(UCase(Mid(Cells(i, c).Value, 1, 1))) - 65)
    End Select
Next i

End Sub

Основа этого кода такая же. Он все еще проходит по столбцу, указанному переменной c . Но ведет себя совсем по-другому.
Этот код выбирает первую букву в столбце, и если это буква az, он изменит ячейку на произвольное имя, указанное в массиве.
Он не чувствителен к регистру и будет игнорировать все, кроме первой буквы. Таким образом, "A" и "Another1" будут рассматриваться одинаково.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .