excel如何用宏来批量替换

现在我有两个表,Sheet1和Sheet2。Sheet2是一个数据库,有A、B两列。我希望检查Sheet1A列的所有数据,如果发现有Sheet2中B列的数据,就把它替换成对应Sheet2A列的数据。
譬如:
Sheet1
2
1
3

Sheet2
1 a
2 b
3 c

执行结束:
Sheet1
b
a
c
如果Sheet1改为
200
100
300
要求执行结果:
b00
a00
c00
这样应该怎么弄呢?

在sheet1的B1中输入:=VLOOKUP(A1,Sheet2!A:B,2,FALSE)
向下拖动
再将sheet1的B列替换到A列

那就改成这样:
在sheet1的B1中输入:=VLOOKUP(LEFT(A1,1)*1,Sheet2!A:B,2,0)&RIGHT(A1,LEN(A1)-1)
向下拖动
再将sheet1的B列替换到A列
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-03
Sub test()
Dim rs As Range
Dim B As Long
Set fDic = CreateObject("Scripting.Dictionary")
iRow = Sheet2.Cells(1, 1).End(xlDown).Row
Arr = Sheet2.Cells(1, 1).Resize(iRow, 2)
For w = 1 To iRow
On Error Resume Next
m = Arr(w, 1)
fDic.Add m, 0
If Err.Number = 0 Then
fDic.Item(m) = Sheet2.Cells(w, 2)
Else
Err.Clear
On Error GoTo 0
fDic.Item(m) = fDic.Item(m) + Sheets2.Cells(w, 2)
End If
Next
For Each rs In Sheet1.UsedRange
B = Left(rs.Value, 1)
rs.Value = fDic.Item(B) & Right(rs.Value, 2)
Next
End Sub

这样就可以了 ,我觉得你还是把你表里的数据格式发出来点,否则很有可能不通用,要让别人一次次的改
第2个回答  2012-09-03
不用宏,用VLOOKUP即可
假设你的Sheet1里的数据在A列
Sheet2里的数据在A,B两列
具体公式如下
“=if(isna(vlookup(a1,sheet2!a:b,2,0)),a1,vlookup(a1,sheet2!a:b,2,0))”
第3个回答  2017-10-20
复制以下宏,有疑问再私信我。
Sub Macro3()
'
' Macro3 Macro
'

'
Sheets("sheet1").Select
Range("D1").Select
ActiveCell.FormulaR1C1 = _
"=INDEX(Sheet2!R1C2:R3C2,MATCH(MID(RC[-3],1,1)*1,Sheet2!R1C1:R3C1,0))&MID(RC[-3],2,2)"
Range("D1").Select
Selection.AutoFill Destination:=Range("D1:D3"), Type:=xlFillDefault
Range("D1:D3").Select
Range("D1").Select
Range("D1:D3").Select
Selection.Copy
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("D1:D3").Select
Selection.ClearContents
Range("D1").Select
ActiveWindow.SmallScroll Down:=-9
End Sub
相似回答