我C2:F2
在 sheet1 中应该从 sheet2 的所有单元格中找到它们,然后C13:F13
用 sheet2 中具有相同值的所有单元格替换 sheet1 中的值
然后我需要知道任何值发生了多少变化
工作表2: ![工作表2][2]
为了便于理解,我附加了一个 GIF:
[动图][3]
它非常好,对我的工作很有用,但我想知道我们可以对它进行一些修改吗?
1-在 T1220 单元格旁边,当找不到任何数字时,会自动删除 IP 我们可以更改代码,以便在 Sheet2 中找不到任何 IP 时不会删除 IP
2 - 我们是否可以做一些按下按钮后不会改变选定单元格的值的事情?
3-按下按钮后有什么办法可以撤消吗?按下按钮后撤消不起作用
抱歉,问题太多
我可以将此 Excel 文件的原件作为私人消息发送给您,但无法在此门户中发送私人消息
答案1
因此,在 VBA 中使用“查找和替换”非常简单,我们使用 Range.Replace()
Range.Replace (What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat)
因此,要搜索整个工作表,我们可以执行以下操作:
Worksheets(1).Cells.replace What:=Range("A2"), Replacement:=Range("B2")
将第一张表中A2
与 的值匹配的所有内容替换为 的值B2
。但是,我们不知道更改了多少个值。
通过该.find()
方法,我们可以找到每个条目,对其进行计数,然后转到下一个。
我所做的是两个子程序,一个用于查找和替换,另一个用于定义应该查找和替换的内容。
它当前会改变所选内容,并且还依赖于单元格在示例图片中的确切位置,因此您可能需要进行一些编辑。
Option Explicit
Sub run()
Dim cell As Range
With ActiveSheet
For Each cell In Selection ' Select what cells you want to use
Call CountReplace(cell, cell.Offset(8), 2) 'Replace with cell 8 cells down, and on sheet number 2
Next cell
End With
End Sub
Sub CountReplace(ByVal find_me As Range, replace_with As Range, dataSheet As Long)
Dim c As Range, i As Long
If find_me = replace_with Then Exit Sub 'Skip if the numbers are the same
i = 0
With Worksheets(dataSheet).UsedRange
Set c = .find(find_me, LookIn:=xlValues)
If Not c Is Nothing Then
Do
c.replace What:=find_me, Replacement:=replace_with 'The find and replace function
Set c = .FindNext(c)
i = i + 1 'Counting how many times we find something
Loop While Not c Is Nothing
End If
End With
find_me = replace_with 'Replace the searched number with the replaced value
find_me.Offset(1) = i 'Store the number in the cell below the selected cell
End Sub
它确实至少有一个缺陷。如果同一个单元格中存在多个条目,我们会找到第一个条目,但会替换所有条目,因此它们只会算作一个。所以如果这是一个问题,那么你必须解决这个问题。