我正在尝试设计一个宏,将某一行中值为 4 的所有单元格更改为值 3。但前提是我更新另一张表上的单元格。
可以这样做吗?是否也可以在一个公式中跨多行执行此操作?
我需要这样做来更新训练矩阵。这样当我更新工作表 1 中的 SOP 编号时,它会将代码 4(当前已训练)上的所有人更改为代码 3(已训练到以前的版本)。由于我有数百行 SOP,我不希望每行都有不同的代码。
希望这一切都有意义。
答案1
检查屏幕截图:
将下面编写的 VBA 代码作为模块插入到 Sheet 2 中:
Sub MultiFindReplace()
Dim Rng As Range
Dim InputRng As Range, ReplaceRng As Range
xTitleId = "Find & Replace"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Original Range ", xTitleId, InputRng.Address, Type:=8)
Set ReplaceRng = Application.InputBox("Replace Range :", xTitleId, Type:=8)
Application.ScreenUpdating = False
For Each Rng In ReplaceRng.Columns(1).Cells
If Sheet1.Range("A208").value = "OTP" Then
InputRng.Replace what:=Rng.value, replacement:=Rng.Offset(0, 1).value
End If
Next
Application.ScreenUpdating = True
End Sub
怎么运行的:
- 运行此宏,在第一个弹出的提示框中指定要将 4 替换为 3 的数据范围。
- 对于所示示例,选择 A350:E352。
- 单击“确定”后,将显示另一个提示框,提醒您选择条件(查找和替换值范围)。
- 对于所示示例,选择 G350:H350。
- 单击“确定”完成,您会发现所有 4 都已被替换为 3,正如您所需要的那样。
注意:
对于第一个提示框,您可以选择整个范围(如我在示例中所示)或您想要用 3 替换 4 的任何列。
不要忘记在第 1 张表的 A208 单元格在运行此宏之前。
- 你必须写G350 中有 4 个,H350 中有 3 个。
- 您可以根据您的选择调整 A208(Sheet1)中的单元格地址和值。
答案2
好的,通过编辑上面发布的解决方案,我得到了一些可行的东西。
我在 sheet1(代码) 中有这个
Private Sub Worksheet_change(ByVal Target As Range)
If Target.Address = "$D$3" Then
Call MultiFindReplace
End If
If Target.Address = "$D$4" Then
Call MultiFindReplace2
End If
End Sub
我在 Module1(代码) 上有这个
Sub MultiFindReplace()
Dim Rng As Range
Dim InputRng As Range, ReplaceRng As Range
For Each Worksheet In ThisWorkbook.Worksheets
Set InputRng = Worksheet.Range("D4:S4")
Set ReplaceRng = Worksheet.Range("D4:S4")
InputRng.Replace what:=(4), replacement:=(3)
Next
Application.ScreenUpdating = True
End Sub
Sub MultiFindReplace2()
Dim Rng As Range
Dim InputRng As Range, ReplaceRng As Range
For Each Worksheet In ThisWorkbook.Worksheets
Set InputRng = Worksheet.Range("D5:S5")
Set ReplaceRng = Worksheet.Range("D5:S5")
InputRng.Replace what:=(4), replacement:=(3)
Next
Application.ScreenUpdating = True
End Sub
有没有更聪明的方法来编写这个,以便我不用进行数百次不同的调用?