Excel 多项查找和替换

Excel 多项查找和替换

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

在此处输入图片描述

它确实至少有一个缺陷。如果同一个单元格中存在多个条目,我们会找到第一个条目,但会替换所有条目,因此它们只会算作一个。所以如果这是一个问题,那么你必须解决这个问题。

相关内容