答案1
您可以设置一个工作表或一些列来将每个字母翻译为“自定义名称”,然后以这种方式引用它们。
但是我会给你一些例子来说明如何在没有任何单元格中包含名称的情况下做到这一点。
示例 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
大写,否则它将不起作用。
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”都将被视为相同。