Чи можу я додати макрос для зміни значення комірки в аркуші 2 на основі збільшення значення комірки в аркуші 1


0

Я намагаюся створити макрос, який змінить усі комірки підряд зі значенням від 4 до значення 3. Але лише якщо я оновлюю комірку на іншому аркуші.

Це можна зробити? Чи можливо це зробити і в одній формулі, але в декількох рядках?

Мені потрібно це зробити, щоб оновити навчальну матрицю. Так що коли я оновлю SOP-номер на аркуші 1, він змінить усіх на коді 4 (зараз навчається) на код 3 (навчений до попередньої версії). Оскільки у мене є сотні рядків SOP, я не хочу мати різний код для кожного рядка.

Сподіваюся, що це все має сенс.


1
Так, це можливо.
Сер Аделаїда

Сер, Аделаїда, чи можете ви мені скажіть як?
Стів

1
@Steve це не сервіс написання сценарію. Спробуйте спробувати повернутися до редагування вашого питання (або задайте нове запитання, якщо це закрито), щоб пояснити, що ви спробували і де ви застрягли.
Кевін Ентоні Оппегаард Роза

Ви хочете сказати, якщо в комірці Листа 1 ви вводите номер SOP в декількох рядках Листа 2 повинен бути оновлений з 3, напишіть?
Rajesh S

@RajeshS - кілька стовпців поспіль потрібно буде змінити з 4 на 3. Але тільки якщо поточне значення дорівнює 4. Але потрібно буде це застосувати до кількох рядків. Лише оновлення стовпців у цьому рядку
Стів

Відповіді:


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

Чи є розумніший спосіб написати це, щоб у мене не було сотні різних дзвінків?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.