Excel VBA用另一个值替换列值?

时间:2011-03-09 15:48:09

标签: excel vba

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

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

下面是一个快速的VBA mashup,它将用替换值替换你的Current Selection值:

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

假设:数组索引中包含所有可能的单元格值。否则,选择大小写可能就是您要切换到的大小写。如果你不知道如何切换到那个,请告诉我。

希望这能解决你的问题。

答案 2 :(得分:0)

要做一些类似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更好的原因有一个简单的原因:我们使用宏来自动执行重复操作,我认为有人正在寻找宏解决方案,主要是在这种情况下。