Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: vba - suchen, ersetzen

vba - suchen, ersetzen
11.02.2021 11:43:27
Fred

Hallo Excel,- VBA Profis,
ich habe in Blatt "Basis" teilweise "fehlerhafte Werte".
In Blatt "Reparatur" stehen die benötigten "richtigen Werte".
Ich habe ein Makro, welches mir die fehlerhaften Einträge in Basis (durch die Einträge in "Reparatur") ersetzt.
Das Makro;
Sub korrigieren()
Dim ArZiel, ArQuelle, rngZiel As Range, n&, c&
With Sheets("Basis")
Set rngZiel = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 29)
End With
ArZiel = rngZiel.Value2
With Sheets("Reparatur")
ArQuelle = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 27).Value2
End With
For n = LBound(ArQuelle) To UBound(ArQuelle)
For c = LBound(ArZiel) To UBound(ArZiel)
If ArZiel(c, 3) = ArQuelle(n, 1) Then
If ArZiel(c, 6) = ArQuelle(n, 4) Then
ArZiel(c, 8) = ArQuelle(n, 6) ' Basis, Reparatur
ArZiel(c, 9) = ArQuelle(n, 7)
ArZiel(c, 10) = ArQuelle(n, 8)
ArZiel(c, 11) = ArQuelle(n, 9)
ArZiel(c, 12) = ArQuelle(n, 10)
ArZiel(c, 13) = ArQuelle(n, 11)
ArZiel(c, 14) = ArQuelle(n, 12)
ArZiel(c, 15) = ArQuelle(n, 13)
ArZiel(c, 16) = ArQuelle(n, 14)
ArZiel(c, 17) = ArQuelle(n, 15)
ArZiel(c, 18) = ArQuelle(n, 16)
ArZiel(c, 19) = ArQuelle(n, 17)
ArZiel(c, 20) = ArQuelle(n, 18)
ArZiel(c, 21) = ArQuelle(n, 19)
ArZiel(c, 22) = ArQuelle(n, 20)
ArZiel(c, 23) = ArQuelle(n, 21)
ArZiel(c, 24) = ArQuelle(n, 22)
ArZiel(c, 25) = ArQuelle(n, 23)
ArZiel(c, 26) = ArQuelle(n, 24)
ArZiel(c, 27) = ArQuelle(n, 25)
ArZiel(c, 28) = ArQuelle(n, 26)
ArZiel(c, 29) = ArQuelle(n, 27)
Exit For
End If
End If
Next
Next
rngZiel.Value = ArZiel
End Sub

Das finden und ersetzen der Werte klappt bestens!
Das Problem;
Im kompletten Blatt "Basis" werden vorhandene Formel durch Formelergebnisse ersetzt,- das möchte ich allerdings nicht!
Meine Frage;
Kann mir bitte jemand das Makro entsprechend ändern,- so das "suchen, ersetzen" wie bisher stattfindet, allerdings die Formeln "drumrum" nicht in Formelergebnisse umgewandelt werden?
Zum besseren Verständnis;
https://www.herber.de/bbs/user/143816.xlsb
Für die Hilfe bin ich sehr dankbar,
Gruss
Fred
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba - suchen, ersetzen
11.02.2021 11:56:24
Rudi
Hallo,
versuch mal
ArZiel = rngZiel.Formula
rngZiel.Formula = ArZiel

Gruß
Rudi
AW: vba - suchen, ersetzen
11.02.2021 12:02:24
Fred
Hallo Rudi,
bei entsprechender Korrektur tut sich gar nichts,- auch die Werte werden nicht "ausgetauscht".
Gruss
Fred
AW: vba - suchen, ersetzen
11.02.2021 12:27:22
MCO
Hallo Fred!
Ich weiß leider nicht, ob die Vorlage falsch ist, oder deine Beschreibung, oder ob ich selbst ein Brett vor dem Kopf habe, aber in BASIS stehen oben Formeln, in Reparatur nicht, dennoch ist BASIS die Quelle?
Wie auch immer, so hab ich es umgesetzt, bzw unverändert gelassen.
Mit dem Einlesen der Werte als array kannst du eben nur Werte einlesen und keine Formeln, daher der Datenverlust.
Ich hab das Array verkleinert auf die abzugleichenden Spalten, dann den passenden Datensatz gesucht und dann mit Schleife erst die Werte von links nach rechts und mit einer anschließenden Schleife dann die Formeln von links nach rechts geschrieben.
Ich denke, damit kommst du klar :-)

Sub korrigieren_neu()
Dim ArZiel, ArQuelle, rngZiel As Range, n&, c&
With Sheets("Reparatur")
Set rngQuell = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 4)
End With
With Sheets("Basis")
Set rngZiel = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).Offset(0, 2).Resize(, 4)
End With
ArQuelle = rngQuell.Value2
ArZiel = rngZiel.Value2
For n = LBound(ArQuelle) To UBound(ArQuelle)
For c = LBound(ArZiel) To UBound(ArZiel)
If ArZiel(c, 1) = ArQuelle(n, 1) And _
ArZiel(c, 4) = ArQuelle(n, 4) Then
For sp = 8 To 14 'Wertespalten
Sheets("Basis").Cells(c + 1, sp) = Sheets("Reparatur").Cells(n + 1, sp - 2)  _
' Basis, Reparatur
Next sp
For sp = 15 To 29 'Formelspalten
Sheets("Basis").Cells(c + 1, sp).Formula = Sheets("Reparatur").Cells(n + 1,  _
sp - 2).Formula ' Basis, Reparatur
Next sp
Exit For
End If
Next
Next
End Sub
Gruß, MCO
Anzeige
AW: vba - suchen, ersetzen
11.02.2021 12:49:53
Fred
Hallo MCO,
genau so möchte ich korrigiert haben.
Große Klasse MCO !!
Vielen Dank!
Gruss
Fred
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige