Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1688to1692
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 - Namen austauschen

VBA - Namen austauschen
08.05.2019 18:08:10
Fred

Hallo VBA-Experten,
Ich habe im Sheet "Export" Spielpaarungen,- die Namen der Teams in den Spalten (F2:G)
Eine Liste der Clubs ist in Blatt "Kriterien", beginnend bei "A2"
Meine Frage:
Ist es möglich, die Namen der Clubs (in "Export") auszutauschen?
Neben der Liste in"Kriterien" ist ab "B2" eine weitere, welche die neuen Namen hat.
https://www.herber.de/bbs/user/129672.xlsb
Mit "schleifen usw. bin ich noch überfordert,- könnte mir bitte da jemand weiter helfen?
Mit freundlichen Gruß
Fred Neumann

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Namen austauschen
08.05.2019 18:30:41
Hajo_Zi
Hallo Fred;
extra Spalte

Export
 LM
2Bayern MunichHoffenheim

verwendete Formeln
Zelle Formel Bereich N/A
L2:M2=SVERWEIS(F2;Kriterien!$A:$B;2;0)  
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 25.16 einschl. 64 Bit



Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
AW: VBA - Namen austauschen
09.05.2019 11:05:04
fcs
Hallo Fred,
sollte mit suchen / ersetzen so funktionieren.
LG
Franz
Sub NamenErsetzen()
Dim Zeile As Long, varSuchen, varErsetzen
Dim CalcStatus
Dim wksKrit As Worksheet, wksEx As Worksheet
Set wksKrit = ActiveWorkbook.Worksheets("Kriterien")
Set wksEx = ActiveWorkbook.Worksheets("Export")
With Application
.ScreenUpdating = False
CalcStatus = .Calculation
.Calculation = xlCalculationManual
End With
With wksKrit
For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
varSuchen = .Cells(Zeile, 1).Value
varErsetzen = .Cells(Zeile, 2).Value
With wksEx
With .Range(.Cells(2, 6), .Cells(.Rows.Count, 7).End(xlUp))
.Replace What:=varSuchen, replacement:=varErsetzen, lookat:=xlWhole, _
MatchCase:=True
End With
End With
Next
End With
With Application
.ScreenUpdating = True
.Calculation = CalcStatus
End With
End Sub

Anzeige
AW: VBA - Namen austauschen
09.05.2019 11:18:27
Fred
Franz, Hammer!
Zuvor hatte ich eine echt amateurhafte Lösung selbst geschustert,- dein VBA werde ich übernehmen.
Vielen Dank!
Gruß
Fred
VBA - Namen austauschen
09.05.2019 11:12:54
Fred
Hallo Hajo,
ja, eine Formellösung (in 2 weiteren Spalten) hatte ich zuvor auch in Betracht gezogen. Ist aber sicherlich nicht notwendig,- zumal das Originalsheet ohnehin bis Spalte "HH" mit Formeln gefüllt ist.
Ich habe mit meinen besch... VBA-Kenntnissen mal was zurecht gebastelt.
Sub teil_1()
With ActiveSheet
lngLastRow1 = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("L2").FormulaLocal = "=WENN(ISTFEHLER(SVERWEIS(F2;Kriterien!$A:$B;2;0));F2;SVERWEIS(F2; _
Kriterien!$A:$B;2;0))"
.Range("M2").FormulaLocal = "=WENN(ISTFEHLER(SVERWEIS(G2;Kriterien!$A:$B;2;0));F2;SVERWEIS(G2; _
Kriterien!$A:$B;2;0))"
.Range("L2:M2").AutoFill Destination:=Range("L2:M" & lngLastRow1), Type:=xlFillDefault
End With
Call teil_2
End Sub

In diesem Makro wird in Zellen "L2" und "M2" die von dir empfohlene Formel eingefügt.
Anschließend werden die 2 Zellen markiert und bis ende "runtergezogen"
dann Aufruf von Makro2
Sub teil_2()
Dim wksBlatt As Worksheet
Dim lngLastRow As Long
Dim lngC As Long
Set wksBlatt = ActiveSheet
With wksBlatt
lngLastRow2 = .Cells(.Rows.Count, 1).End(xlUp).Row
For lngC = 2 To lngLastRow2
.Cells(lngC, 6) = .Cells(lngC, 12)
.Cells(lngC, 7) = .Cells(lngC, 13)
Next lngC
End With
Sheets("Export").Columns("L:M").Delete
End Sub

in einer Schleife (meine erste überhaupt...) werden die Zellen der Spalten "F:G" "abgearbeitet".
Zum Schluss werden die 2 "Hilfsspalten" "L:M" gelöscht.
Hm, es funzt.
https://www.herber.de/bbs/user/129681.xlsb
Dennoch die "Nachfrage": Kann meinen Code nicht "kürzen",- optimieren?
Mit freundlichen Gruß
Fred Neumann
Anzeige
AW: VBA - Namen austauschen
11.05.2019 08:09:38
fcs
Hallo Fred,
eine Optimierung kann wie folgt ausssehen:
  • 1. man kann die Formeln direkt in den gesamten Bereich eintragen ohne zusätzliches AutoFill.

  • 2. Die berechneten Formelwerte muss man nicht Zelle für Zelle übertragen. man kann den kompletten Bereich als Werte eintragen. Alternativ könnte man den Bereich mit den Formeln im L:M kopieren und als Werte in F:G einfügen.

  • Eine Aufteilung auf 2 Makros ist hier auch nicht zweckmäßig, da die Berechnung der letzten Zeile in beiden Makros erfolgen muss.
    Da du in weiteren Spalte viele Formeln hast sollte wie bei meinem Vorschlag zusätzlich vorübergend die Berechnung auf manuell gesetzt und die Bildschirmaktualisierung deaktiviert werden. Dadurch wird di Ausführung des Makros erheblich beschleunigt.
    LG
    Franz
    Sub teil_1()
    With ActiveSheet
    lngLastRow1 = .Cells(.Rows.Count, 1).End(xlUp).Row
    With .Range("L2:M" & lngLastRow1)
    .FormulaLocal = _
    "=WENN(ISTFEHLER(SVERWEIS(F2;Kriterien!$A:$B;2;0));F2;SVERWEIS(F2;Kriterien!$A:$B;2;0))"
    .Calculate
    End With
    End With
    Call teil_2
    End Sub
    Sub teil_2()
    Dim wksBlatt As Worksheet, lngLastRow2 As Long
    Set wksBlatt = ActiveSheet
    With wksBlatt
    lngLastRow2 = .Cells(.Rows.Count, 1).End(xlUp).Row
    .Range(.Cells(2, 6), .Cells(lngLastRow2, 7)).Value = _
    .Range(.Cells(2, 12), .Cells(lngLastRow2, 13)).Value
    .Columns("L:M").Delete
    End With
    End Sub
    
    Beide Makros zusammengefasst:
    Sub teil_1_und_2()
    With ActiveSheet
    lngLastRow1 = .Cells(.Rows.Count, 1).End(xlUp).Row
    With .Range("L2:M" & lngLastRow1)
    .FormulaLocal = _
    "=WENN(ISTFEHLER(SVERWEIS(F2;Kriterien!$A:$B;2;0));F2;SVERWEIS(F2;Kriterien!$A:$B;2;0))"
    .Calculate
    End With
    .Range(.Cells(2, 6), .Cells(lngLastRow1, 7)).Value = _
    .Range(.Cells(2, 12), .Cells(lngLastRow1, 13)).Value
    .Columns("L:M").Delete
    End With
    End Sub
    

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige