Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1812to1816
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige