Я пытаюсь создать макрос, который изменит все ячейки подряд со значением 4 на значение 3. Но только если я обновлю ячейку на другом листе.

Можно ли это сделать? Можно ли сделать это в одной формуле, но в нескольких строках?

Мне нужно сделать это, чтобы обновить тренировочную матрицу. Так что, когда я обновляю номер СОП в листе 1, он изменит всех в коде 4 (в настоящее время обученном) на код 3 (обученный в предыдущей версии). Поскольку у меня есть сотни строк СОП, я не хочу, чтобы у каждой строки был свой код.

Надеюсь, что все это имеет смысл.

2 ответа2

0

Проверьте снимок экрана:

Вставьте ниже написанный код VBA как модуль в Листе 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. Закончив с OK, вы обнаружите, что все 4 были заменены на 3 по мере необходимости.

NB

  1. Для первого всплывающего окна подсказки вы можете выбрать либо весь диапазон (как я показал в примере), либо любой столбец, в котором вы хотите заменить 4 на 3.

  2. Не забудьте написать "OTP" в ячейке A208 листа 1, прежде чем запускать этот макрос.

  3. Вы должны написать 4 в G350 и 3 в H350.
  4. Вы можете настроить адрес ячейки, а также значение в A208 (Sheet1) в соответствии с вашим выбором.
0

Итак, у меня есть кое-что, что работает, отредактировав решение, опубликованное выше.

У меня есть это в 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

Есть ли более умный способ написать это, чтобы у меня не было сотен разных звонков?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .