Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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

Makro Anfang von Zellen vergleichen und

Makro Anfang von Zellen vergleichen und
11.01.2022 16:20:32
Zellen
Hallo zusammen und noch ein frohes neues Jahr,
ich würde mal behaupten, dass meine Excel-Kenntnisse auf einem guten Niveau basieren, jedoch habe ich mich bisher kaum und nur sehr selten an VBA herangetraut. Das soll sich aber nun ändern.
Ich habe eine Excel-Tabelle vorliegen in dessen Spalten A und B Telefon-Nummern stehen. Normalerweise sollte es so sein, dass in A die Festnetztnummern stehen und Spalte B lediglich Mobilfunknummern. Da es allerdings auch vorkommt, dass gewisse Personen in unserem System die Mobilfunknunmer als Festnetztnummer eingetragen habe, stehen diese teilweise auch in Spalte A.
Ich brauche allerdings nur ausschließlich die Mobilfunknummern. Da Mobilfunknummern in der Regel mit "01" beginnen, würde ich das gerne darüber laufen lassen.
Meine Idee war nun ein Makro zu schreiben, dass prüft, ob Zelle B1 mit "01" beginnt. Ist dies der Fall, soll die Nummer in Zelle D1 kopiert werden. Beginnt B1 nicht mit "01", soll geprüft werden, ob Zelle A1 so beginnt. Dann diesen Wert in D1 kopieren.
Das ganze als Schleife, sodass alle Zeilen durchgegangen werden. Ich hoffe ihr versteht mein Problem.
Vielleicht kann mir da jemand helfen :)
Liebe Grüße
Timo
PS: Ja, ich weiß, dass es auch als wenn-Funktion geht. Allerdings würde ich das mit den Makros gerne lernen und bräuchte dabei Hilfe. Wenn mir jemand zu dieser Aufgabenstellung oben helfen könnte, dann könnte ich das ja nach weiteren "Kriterien" (+491) erweitern. So lerne ich von euch :)

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Anfang von Zellen vergleichen und
11.01.2022 16:29:35
Zellen
Hallo timo,
schön, dass Du dir Ziele gibst.
Versuche mal mit:

Sub PrüfenUndAblegen()
Dim Z As Range ' für Zelle
For Each Z In Worksheets("Tabelle1").Range("B2:B100")
If Left(Z.Value, 2) = "01" Then Z.Offset(0, 1) = Z.Value
Next
End Sub
Wichtig ist, das Du versuchst den Code zu lesen. Je mehr Du liest, desto einfacher wird es.
In dem Fall liest es wie folgt:
Für alle einzelne Zelle in Bereich B2:B100
wenn die 2 ersten Stellen der Werte der Zelle ist gleich "01" dann übernimmt die Zelle in gleiche Zeile (0) aber eine Spalte rechts (1) den Wert der Zelle
dann nächste Zelle.
VG
Yal
Anzeige
Nachtrag
11.01.2022 16:41:39
Yal
Hallo Timo,
nicht "für alle" sondern "für jede".
Ausserdem

For Each Z In Worksheets("Tabelle1").Range("B2:B100")
ist die Kurzform von

For Each Z In Worksheets("Tabelle1").Range("B2:B100").Cells
Es liegt daran, dass "Cells" der Default-Eigenschaft vom Range ist. Besser ist -eigentlich- .Cells einzugeben.
Als Anfänger solltest Du die Option "Variabledeklaration erforderlich" (Extras, Optionen).
Mit F8 lässt Du den Code Schritt für Schritt durchlaufen. Mit offenen Lokalfenster (Ansicht, Lokalfenster) hast Du dann ein guten Blick auf die Objekte, Eigenschaften und sonstige Variablen und ihre Werte. Das ist ein Booster um VBA zu beherrschen.
VG
Yal
Anzeige
AW: Makro Anfang von Zellen vergleichen und
11.01.2022 18:11:44
Zellen
Moin,
Schleifen Teil II - For..Next-Schleife ( Teil I = While..Wend und Do..Loop; Teil III = For..Each )

Sub Test()
Dim lngLetzteZeile As Long, lngZeile As Long
lngLetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row 'Zeile der untersten Zelle in Spalte A mit Wert
If Cells(Rows.Count, 2).End(xlUp).Row > lngLetzteZeile Then
lngLetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row 'Zeile der untersten Zelle in Spalte B mit Wert
End If
For lngZeile = 2 To lngLetzteZeile
If Left$(Cells(lngZeile, 2)).Value = "01" Then
Cells(lngZeile, 4).Value = Cells(lngZeile, 2).Value
ElseIf Left$(Cells(lngZeile, 1)).Value = "01" Then
Cells(lngZeile, 4).Value = Cells(lngZeile, 1).Value
End If
Next
End Sub
Gruß Gerd
Anzeige
AW: Makro Anfang von Zellen vergleichen und
14.01.2022 13:22:08
Zellen
Hey ihr beiden,
danke für eure Hilfe. Das hat bisher echt super funktioniert.
Jetzt kam mir allerdings noch eine Frage auf... Kann man in der If-Bedingung ergänzen, dass nicht nur geprüft wird, ob die Nummer mit "01" beginnt, sondern auch mindestens 9 Ziffern enthält?
Für eure Hilfe danke ich euch jetzt schon, so langsam verstehe ich VBA immer besser :-)
Liebe Grüße, Timo
AW: Makro Anfang von Zellen vergleichen und
14.01.2022 14:50:19
Zellen
Hallo
das geht mit beiden Codes, der von Yal ist kürzer. Probier bitte mal die IsNumeric Methode mit Left = 9 Stellen. Ich hoffe du verstehst was ic da programmiert habe.
@ Gruss an die Kollegen Yal, und GerdL, beide Codes sind ja von ihnen.
mfg Piet
  • 
    Sub PrüfenUndAblegen()
    Dim Z As Range ' für Zelle
    Dim Wert As Variant
    For Each Z In Worksheets("Tabelle1").Range("B2:B100")
    Wert = Replace(Z, " ", "")   '" " mit Replace löschen!
    If Left(Z.Value, 2) = "01" And _
    IsNumeric(Left(Wert, 9)) Then Z.Offset(0, 1) = Z.Value
    Next
    End Sub
    

  • Anzeige
    AW: Makro Anfang von Zellen vergleichen und
    14.01.2022 15:15:10
    Zellen
    Hallo Timo,
    die grösste Schwierigkeit beim Erschliessen eines neuen Wissensfeldes, ist zu wissen, nach welchem Begriff man googeln muss.
    In dem Fall hätte "VBA string länge" durchaus brauchbare Ergebnisse geliefert. Das erste: https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/len-function
    
    Sub PrüfenUndAblegen()
    Dim Z As Range ' für Zelle
    For Each Z In Worksheets("Tabelle1").Range("B2:B100")
    If Left(Z.Value, 2) = "01" And Len(Z.Value) = 9 Then Z.Offset(0, 1) = Z.Value
    Next
    End Sub
    
    wobei Du sicherstellen müsstest, dass es sich um 9 Zahlen handelt. Keine Leerzeichen oder Bindestrich:
    
    Sub PrüfenUndAblegen()
    Dim Z As Range ' für Zelle
    Dim ZielNr As String
    Dim i As Integer
    For Each Z In Worksheets("Tabelle1").Range("B2:B100")
    If Left(Z.Value, 2) = "01" Then
    ZielNr = ""
    For i = 1 To Len(Z.Value)
    ZielNr = ZielNr & IIf(IsNumeric(Mid(Z.Value, i, 1)), Mid(Z.Value, i, 1), "")
    Next
    If Len(ZielNr) = 9 Then Z.Offset(0, 1) = CStr(ZielNr)
    End If
    Next
    End Sub
    
    VG
    Yal
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige