Kann ich ein Makro hinzufügen, um den Wert einer Zelle in Blatt 2 zu ändern, indem ich den Wert einer Zelle in Blatt 1 erhöhe?

0

Ich versuche, ein Makro zu entwerfen, das alle Zellen in einer Reihe mit einem Wert von 4 in einen Wert von 3 ändert. Dies ist jedoch nur möglich, wenn ich eine Zelle auf einem anderen Blatt aktualisiere.

Kann das gemacht werden? Ist es auch möglich, dies in einer Formel zu tun, jedoch über mehrere Zeilen hinweg?

Ich muss dies tun, um eine Trainingsmatrix zu aktualisieren. Wenn ich eine SOP-Nummer in Blatt 1 aktualisiere, werden alle auf Code 4 (derzeit trainiert) in Code 3 (auf vorherige Version trainiert) geändert. Da ich Hunderte von SOP-Zeilen habe, möchte ich nicht für jede Zeile einen anderen Code haben.

Hoffe das alles macht Sinn.

Steve
quelle
1
Ja, das ist möglich.
Sir Adelaide
Sir Adelaide, können Sie mir bitte sagen, wie?
Steve
1
@Steve Dies ist kein Skriptschreibdienst. Probieren Sie es aus und bearbeiten Sie Ihre Frage erneut (oder stellen Sie eine neue Frage, wenn diese geschlossen ist), um zu erklären, was Sie versucht haben und wo Sie feststecken.
Kevin Anthony Oppegaard Rose
Sie wollen sagen, wenn Sie in einer Zelle von Blatt 1 die SOP-Nummer in wenigen Zeilen von Blatt 2 eingeben und mit 3 aktualisieren möchten, schreiben?
Rajesh S
@ RajeshS - einige Spalten in einer Zeile müssten von 4 auf 3 geändert werden. Dies ist jedoch nur erforderlich, wenn der aktuelle Wert 4 ist. Dies muss jedoch für mehrere Zeilen gelten. Nur Spalten in dieser Zeile werden aktualisiert
Steve

Antworten:

0

Überprüfen Sie den Screenshot:

Bildbeschreibung hier eingeben

Fügen Sie den unten angegebenen VBA-Code als Modul in Blatt 2 ein:

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

Wie es funktioniert:

  1. Führen Sie dieses Makro aus, und geben Sie im ersten angezeigten Eingabeaufforderungsfeld den Datenbereich an, in dem die 4 durch die 3 ersetzt werden soll.
  2. Für das gezeigte Beispiel wählen Sie A350: E352.
  3. Klicken Sie auf OK. Ein weiteres Dialogfeld wird angezeigt, in dem Sie daran erinnert werden, die Kriterien auszuwählen (Wertebereich suchen und ersetzen).
  4. Für das gezeigte Beispiel wählen Sie G350: H350.
  5. Beenden Sie mit OK, und stellen Sie fest, dass alle 4er bei Bedarf durch 3er ersetzt wurden.

NB

  1. Für die erste Eingabeaufforderung können Sie entweder den gesamten Bereich (wie im Beispiel gezeigt) oder eine der Spalten auswählen, in denen Sie 4 durch 3 ersetzen möchten.

  2. Vergessen Sie nicht, "OTP" in Zelle A208 von Blatt 1 zu schreiben, bevor Sie dieses Makro ausführen .

  3. Sie müssen 4 in G350 und 3 in H350 schreiben .
  4. Sie können die Zellenadresse sowie den Wert in A208 (Sheet1) gemäß Ihrer Wahl anpassen.
Rajesh S
quelle
0

OK, also ich habe etwas, das funktioniert, wenn ich die oben veröffentlichte Lösung bearbeite.

Ich habe dies in Sheet1 (Code)

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

Und ich habe dies auf Modul1 (Code)

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

Gibt es eine intelligentere Art, dies zu schreiben, damit ich nicht Hunderte verschiedener Anrufe habe?

Steve
quelle