Frage von PinoGrigio, 38

Suchen / Ersetzen in VBA?

nachdem ich durch per Dialog den Benutzer nach Jahreszahl "JJJJ" und Bereich gefragt habe,

    Dim JJJJminus2, JJJJminus1, JJJJ As Double    
    Dim Zelle As Range    Dim Bereich As Range
    Dim s As String
' Range markieren
    s = ActiveCell.Address
    Set Bereich = Application.InputBox _
    ("Wählen Sie den Bereich, den Sie bearbeiten möchten", Type:=8)
    Range(s).Select

und der Benutzer 2016 als Jahreszahl eingegeben und den betreffenden Bereich markiert hat, möchte ich jetzt, dass in dem Bereich die Jahreszahlen sukzessive geändert werden:

'
' akt. Jahr "JJJJ" für Ersetzungen einlesen
    JJJJ = InputBox("Jahr eingeben, vier Ziffern", "Jahr")
    JJJJminus1 = JJJJ - 1
    JJJJminus2 = JJJJ - 2

und zwar so: JJJJminus1 in JJJJ und JJJJminus2 in JJJJminus1

wie muss dieses Stück VBA-Code dazu aussehen?

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 23

Auf die Reihenfolge kommt es an. Du musst zuerst JJJJMinus1 durch JJJJMinus2 ersetzen, also zum Beispiel aus allen 2015 2014 machen. erst dann kannst du aus den 2016-Einträgen 2015 machen.

Gehst du andersherum vor, operierst du auf dem Ergebnis des letzten Ersetzens.

Kommentar von PinoGrigio ,

Nein, ich möchte die Jahreszahlen in dem Bereich (jedes Jahr einmal) um +1 weiterschalten. Also aus 2015 soll 2016 werden, dann erst 2014 ändern in 2015. Händisch hat das bisher ja immer so funktioniert, nur eben in VBA bekomme ich das nicht hin. 

JJJJminus1 in JJJJ --> 2015 in 2016 
JJJJminus2 in JJJJminus1 --> 2014 in 2015

LG PG

Kommentar von PinoGrigio ,


Wenn ich die manuelle Änderung aufzeichne sieht das Ergebnis so aus: 

    Range("D23:D26").Select

Selection.Replace What:="=", Replacement:=" =", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="2015", Replacement:="2016", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="2014", Replacement:="2015", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=" =", Replacement:="=", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Die Änderung am Anfang und am Schluss bewirken eine Deaktivierung des externen Bezugs während der zwei Änderungsschritten. 

PG

Kommentar von Suboptimierer ,

Vorschlag:

Sub JahreszahlAendern()
  Dim Bereich As Range
  Dim iJahrNeu As Integer

Set Bereich = Application.InputBox("Wählen Sie den Bereich, den Sie bearbeiten möchten", Type:=8) iJahrNeu = InputBox("Jahr eingeben, vier Ziffern", "Jahr") Bereich.Replace What:=CStr(iJahrNeu - 1), Replacement:=CStr(iJahrNeu), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Bereich.Replace What:=CStr(iJahrNeu - 2), Replacement:=CStr(iJahrNeu - 1), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub
Kommentar von PinoGrigio ,

Hallo Suboptimierer, ja, das war's! Danke für die schnelle Hilfe.

PG

Kommentar von Suboptimierer ,

Bitteschön!

Kommentar von Suboptimierer ,

Dann ist die Reihenfolge korrekt.

Was fehlt dir denn genau noch? Der Ersetzenbefehl lautet Replace. https://msdn.microsoft.com/de-de/library/bt3szac5(v=vs.90).aspx

Keine passende Antwort gefunden?

Fragen Sie die Community