Excel VBA是否将列值替换为其他值?
我有一个大约3000行的工作表。其中一列包含种族数据,但为数字格式,而非文本格式,例如:Excel VBA是否将列值替换为其他值?,excel,vba,Excel,Vba,我有一个大约3000行的工作表。其中一列包含种族数据,但为数字格式,而非文本格式,例如: 1=美洲印第安人或阿拉斯加土著 2=亚裔、亚裔美国人或太平洋岛民 3=非裔美国人或黑人 4=墨西哥或墨西哥裔美国人 我想在VBA中编写一个模块,它使用一个Select Case(或…?)将此列中的值从整数转换为文本。有人能告诉我如何做到这一点吗?Excel中的非VBA(在我看来更简单)方法是使用该数据创建一个查找表-第一列中的整数,第二列中的文本,然后在数据旁边的列中,使用VLOOKUP查找相应的文本。
- 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)运行代码时,出现了一个“类型不匹配”错误,这意味着该单元格的值不是数字。我将更新代码,使其更加健壮。如果最终超出数组索引的范围,也将进行补偿。