我可以添加一个宏来根据增加 Sheet 1 中单元格的值来更改 Sheet 2 中单元格的值吗?

我可以添加一个宏来根据增加 Sheet 1 中单元格的值来更改 Sheet 2 中单元格的值吗?

我正在尝试设计一个宏,将某一行中值为 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

怎么运行的:

  1. 运行此宏,在第一个弹出的提示框中指定要将 4 替换为 3 的数据范围。
  2. 对于所示示例,选择 A350:E352。
  3. 单击“确定”后,将显示另一个提示框,提醒您选择条件(查找和替换值范围)。
  4. 对于所示示例,选择 G350:H350。
  5. 单击“确定”完成,您会发现所有 4 都已被替换为 3,正如您所需要的那样。

注意:

  1. 对于第一个提示框,您可以选择整个范围(如我在示例中所示)或您想要用 3 替换 4 的任何列。

  2. 不要忘记在第 1 张表的 A208 单元格在运行此宏之前。

  3. 你必须写G350 中有 4 个,H350 中有 3 个。
  4. 您可以根据您的选择调整 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

有没有更聪明的方法来编写这个,以便我不用进行数百次不同的调用?

相关内容