需要宏来用自定义数据替换列中的值

需要宏来用自定义数据替换列中的值

基本上,我在运行数据时按字母表中的单个字母总结类别,但对于局外人来说这显然没有意义。

我需要在列中突出显示“G”的宏,将其替换为“自定义名称”,依此类推

“A”-更改为“Custom1” “B”-更改为“Custom2”等等。

在此处输入图片描述

答案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”都将被视为相同。

相关内容