背景:我有一个包含两张纸的文件(我们称它们为Sheet1
和Sheet2
)。
在中Sheet1
,我的A列具有唯一标识符,B列具有一些文本。
来自的样本数据Sheet1
:
A | 乙
1 | 苹果
2 | 橙子
3 | 柠檬
4 | 胡椒
在中Sheet2
,我的A列具有相同的唯一标识符,而B列则具有不同的文本。
来自的样本数据Sheet2
:
A | 乙
1 | 你好
2 | 怎么样
3 | 是
4 | 您
问题:我想拥有一个vba代码,该代码一次从a列获取一个标识符,然后从中Sheet2
找到它,Sheet1
并Sheet1
用from中的文本覆盖(替换)其中的文本Sheet2
。
代码:我发现此代码部分对我有用,但不是用中的文本Sheet1
替换A列中的标识符,而不是替换其中的B列中Sheet1
的文本Sheet2
。
Sub multiFindandReplace()
Dim myList, myRange
Set myList = Sheets("Sheet2").Range("A2:B10")
'two column range with find/replace pairs
Set myRange = Sheets("Sheet1").Range("A2:B10")
'range to be searched and replace
For Each cel In myList.Columns(1).Cells
myRange.Replace What:=cel.Value, Replacement:=cel.Offset(0, 1).Value, LookAt:=xlWhole
Next cel
End Sub
问题: 我知道为什么这样做,但是如何更改它以替换文本而不是标识符?基本上,我希望Sheet1
最终看起来像Sheet2
但Sheet1
具有更多的行Sheet2
,因此行的顺序不同,并且并非所有行都需要更新(这就是为什么我需要“查找并替换”)的原因。理想情况下,每当更改B列中的单元格时,都将触发此代码。
我也欢迎其他代码想法或补充!
谢谢!
您可以用来Match
在sheet1上找到相应的行:
Sub multiFindandReplace()
Dim myList As Range, myRange As Range, rw As Range, m
Set myList = Sheets("Sheet2").Range("A2:B10")
Set myRange = Sheets("Sheet1").Range("A2:B10")
For Each rw In myList.Rows
'Find match on sheet1
m = Application.Match(rw.Cells(1).Value, myRange.Columns(1), 0)
If Not IsError(m) Then
'Got a match: replace in ColB
myRange.Cells(m, 2).Value = rw.Cells(2).Value
End If
Next rw
End Sub
编辑:如果从事件处理程序调用,则必须在进行任何工作表更新之前禁用事件,否则您将陷入无尽的循环中
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Goto haveError
If Not Intersect(Target, Range("$B$2:$B$10")) Is Nothing Then
Application.EnableEvents = False
multiFindandReplace 'name of my macro
Application.EnableEvents = True
End If
Exit Sub
haveError:
Application.EnableEvents = True
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句