【问题标题】:Excel VBA to replace column values with another value?Excel VBA用另一个值替换列值?
【发布时间】:2011-03-09 15:48:09
【问题描述】:

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

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

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

【问题讨论】:

  • @Mikeb 对 VLookUp 的评论听起来像是最好的选择,但如果它不适合,您不妨看看 ADO。

标签: excel vba


【解决方案1】:

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

【讨论】:

  • 对!无需为此使用 VBA
【解决方案2】:

这是一个快速的 VBA 混搭,它将用替代品替换您的当前选择值:

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

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

希望这能解决您的问题。

【讨论】:

  • 谢谢。我试过了。我可以将其添加到新模块中还是需要在 Sheet1 或 ThisWorkbook 下(我在 VBA 非常新)?我究竟如何让这个模块针对选定的列运行?
  • 好吧,我通过将它放到一个模块中然后使用运行宏对话框来运行它,同时我在工作表中设置了我想要的选择。可能是最简单的方法。或者,您可以在 Dim RangeCells as Range 行之后使用 Set RangeCells = Sheet1.Range("A1:A4") 对 RangeCells 变量的范围进行硬编码
  • 太棒了,谢谢!我现在遇到的唯一问题是当我从 RanngeCell.Value = LookupArray(RangeCell.Value) 行运行代码时出现“类型不匹配”错误
  • 这意味着单元格的值不是数字。我将更新代码以使其更健壮。如果您最终超出数组索引范围,也会进行补偿。
【解决方案3】:

要执行 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 更好,原因很简单:我们使用宏来自动执行重复操作,我假设有人主要在这种情况下寻找宏解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多