Vba 在不同的列中进行过滤和更换
我有以下格式的一些数据: 表1,65000行:Vba 在不同的列中进行过滤和更换,vba,filter,find,Vba,Filter,Find,我有以下格式的一些数据: 表1,65000行: Food Type Mango Fruit Mango Fruit Mango Vegetable Pineapple Fruit Cabbage Flower Carrot Fruit 等等,有许多列,其中“Type”列可能不正确 因此,我想从另一个具有正确类型映射的不同数据集中更正“Type”列: 表2,3000行: Food Typ
Food Type
Mango Fruit
Mango Fruit
Mango Vegetable
Pineapple Fruit
Cabbage Flower
Carrot Fruit
等等,有许多列,其中“Type”列可能不正确
因此,我想从另一个具有正确类型映射的不同数据集中更正“Type”列:
表2,3000行:
Food Type
Cabbage Vegetable
Carrot Vegetable
Mango Fruit
等等
我试图用表2中的“类型”更新表1中的“类型”数据
通常,在MATLAB或R中,我会使用矢量符号,这将非常快。我会手动使用VLOOKUP(),这也不慢,但我想删除这个手动过程
我似乎无法在VBA for Excel中实现快速。双循环显然不是一个选项,因此我想我应该使用以下方法:
Worksheets(Table1).Activate
For index = 2 To lastType 'For loop that goes from row 2 to last row of Table2
'Filter for the rows we need
With Range("A1")
.AutoFilter Field:=1, Criteria1:=Worksheets(Table2).Cells(index, 1).Value
End With
'Update the value of column 2, Table1 with the corresponding value from column 2, Table2
Range("A2:A" & lastData).SpecialCells(xlCellTypeVisible).Offset(0, 1).Value = Worksheets(Table2).Cells(index, 2).Value
ActiveSheet.AutoFilterMode = False
Next index
任何更有效的方法建议都将不胜感激。正如您所指出的,VLOOKUP并不太慢。也许你可以把每个细胞的公式改成VLOOKUP。下面的代码可能需要针对您的特定范围稍作修改,但应该可以很好地工作
Sub fixtable1()
Dim rng As Excel.Range
Dim row As Excel.Range
Dim cell As Excel.Range
Set rng = Worksheets(1).Range("A2")
lngLastRow = rng.End(xlDown).row
lastRowTxt = "B" & lngLastRow
Set rng = Worksheets(1).Range("A2:" & lastRowTxt)
i = 2
For Each row In rng.Rows
row.Cells(1, 2).Formula = "=VLOOKUP(A" & i & ", Table2!$A$2:$B$5, 2, FALSE)"
'First loop B2 = "=VLOOKUP(A2, Table2!$A$2:$B$5, 2, FALSE)"
i = i + 1
Next
End Sub
当然,根据您的帖子,您可能会将“Table2!$A$2:$B$5”更改为“Table2!A$2:$B$3001”