Excel VBA是否将列值替换为其他值?

Excel VBA是否将列值替换为其他值?,excel,vba,Excel,Vba,我有一个大约3000行的工作表。其中一列包含种族数据,但为数字格式,而非文本格式,例如: 1=美洲印第安人或阿拉斯加土著 2=亚裔、亚裔美国人或太平洋岛民 3=非裔美国人或黑人 4=墨西哥或墨西哥裔美国人 我想在VBA中编写一个模块,它使用一个Select Case(或…?)将此列中的值从整数转换为文本。有人能告诉我如何做到这一点吗?Excel中的非VBA(在我看来更简单)方法是使用该数据创建一个查找表-第一列中的整数,第二列中的文本,然后在数据旁边的列中,使用VLOOKUP查找相应的文本。

我有一个大约3000行的工作表。其中一列包含种族数据,但为数字格式,而非文本格式,例如:

  • 1=美洲印第安人或阿拉斯加土著
  • 2=亚裔、亚裔美国人或太平洋岛民
  • 3=非裔美国人或黑人
  • 4=墨西哥或墨西哥裔美国人

我想在VBA中编写一个模块,它使用一个Select Case(或…?)将此列中的值从整数转换为文本。有人能告诉我如何做到这一点吗?

Excel中的非VBA(在我看来更简单)方法是使用该数据创建一个查找表-第一列中的整数,第二列中的文本,然后在数据旁边的列中,使用VLOOKUP查找相应的文本。

这里有一个快速的VBA mashup,它将用替换项替换当前选择值:

Option Explicit
Option Base 1

Public Sub ReplaceData()

    Dim RangeCells As Range

    Dim LookupArray(4) As String, RangeCell As Range

    LookupArray(1) = "Test A"
    LookupArray(2) = "Test B"
    LookupArray(3) = "Test C"
    LookupArray(4) = "Test D"

    For Each RangeCell In Selection

        If IsNumeric(RangeCell.Value) And RangeCell.Value <= UBound(LookupArray) And RangeCell.Value >= LBound(LookupArray) Then
            RangeCell.Value = LookupArray(Val(RangeCell.Value))
        End If

    Next RangeCell

End Sub
选项显式
选项基数1
公共子数据()
将范围单元格设置为范围
Dim LookupArray(4)作为字符串,RangeCell作为范围
LookupArray(1)=“测试A”
查找阵列(2)=“测试B”
查找数组(3)=“测试C”
查找阵列(4)=“测试D”
对于选择中的每个RangeCell
如果IsNumeric(RangeCell.Value)和RangeCell.Value=LBound(LookupArray),则
RangeCell.Value=LookupArray(Val(RangeCell.Value))
如果结束
下一个测距单元
端接头
假设:所有可能的单元格值都包含在数组索引中。否则,您可能希望切换到select case。如果你不知道如何切换到那个位置,请告诉我


希望这能解决您的问题。

要做类似VLOOKUP的事情,但有了替换,您可以尝试以下方法

Option Explicit
Sub ReplaceData()

Dim i As Integer
Dim ABCArray() As Variant, DEFArray As Variant

    ABCArray = Array("A", "b", "C")
    DEFArray = Array("D", "E", "F")

    With ActiveSheet.Range("A:A")

        For i = LBound(ABCArray) To UBound(ABCArray)

            .Replace What:=ABCArray(i), _
            Replacement:=DEFArray(i), _
            LookAt:=xlWhole, _
            SearchOrder:=xlByColumns, _
            MatchCase:=False

        Next i

    End With
End Sub

我不能同意VLOOKUP更好,原因很简单:我们使用宏来自动执行重复的操作,我认为在这种情况下,有人正在寻找宏解决方案。

@Mikeb对VLOOKUP的评论听起来是最好的选择,但如果不合适,你可能希望看看ADO。对!不需要用VBA,谢谢。我试过了。我可以把它添加到一个新模块中吗?或者它是否需要放在Sheet1或ThisWorkbook下(我是VBA的新手)?如何使该模块针对所选列运行?我在工作表中设置所需的选择时,将其放入模块中,然后使用“运行宏”对话框来运行该模块。可能是最简单的方法。或者,您可以使用
设置RangeCells=Sheet1.range(“A1:A4”)
将RangeCells变暗为rangelineAwesome,谢谢!我现在遇到的唯一问题是,当我从行RanngeCell.Value=LookupArray(RangeCell.Value)运行代码时,出现了一个“类型不匹配”错误,这意味着该单元格的值不是数字。我将更新代码,使其更加健壮。如果最终超出数组索引的范围,也将进行补偿。