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

Forumthread: ersten Zeichen einer Zelle ermitteln

ersten Zeichen einer Zelle ermitteln
11.02.2013 09:04:00
kikimat
Hallo,
kann mir vielleicht jemand einen Tip geben, was an meinem Code falsch ist. Ich möchte, dass in einer Spalte jede Zelle darauf überprüft wird, ob die ersten vier Zahlen 1300 sind und wenn ja, soll darunter eine Zeile eingefügt werden. Bei meinem Code erscheint immer die Fehlermeldung "Typen unverträglich"
set Spalte= Thisworkbook.Worksheets(1).Columns("E:E")
For Each rng In Spalte
If Left(rng.Value, 4) = "1300" Then
rng.Offset(1, 0).EntireRow.Insert
End If
Next
Gruß, kikimat

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: ersten Zeichen einer Zelle ermitteln
11.02.2013 09:18:00
Klaus
Hi,
du kannst das rng nicht über die ganze Spalte gehen lassen, wie du es probierst. Gib mal zwischendurch rng.select ein und geh in den Debugmodus: du siehst, dass rng nicht die Zelle, sondern die ganze Spalte markiert.
Selbst wenn das behoben ist: willst du wirklich eine Schleife über knapp 66.000 Zeilen laufen lassen? Ich hab den Code mal umgeschrieben:
Letzte Zeile wird gesucht, schleife geht nur von letzter bis erster Zeile, und die Schleife läuft rückwärts (das sollte man beim einfügen / löschen immer so machen) damit das INSERT den Bereich nicht beim Durchlauf vergrößert.
Übrigens: "1300" muss nicht in Anführungsstriche, wenns eine Zahl ist. Dann reicht = 1300.
Option Explicit
Sub test()
Dim spalte As Range
Dim rng As Range
Dim lRow As Long
Dim lZeile As Long
'With ThisWorkbook.Worksheets(1)
'    lRow = .Cells(.Rows.Count, 5).End(xlUp).Row
'    Set spalte = ThisWorkbook.Worksheets(1).Range("E1:E" & lRow)
'End With
'For Each rng In spalte
'If Left(rng.Value, 4) = "1300" Then
'rng.Offset(1, 0).EntireRow.Insert
'End If
'Next
With ThisWorkbook.Worksheets(1)
For lZeile = lRow To 1 Step -1
lRow = .Cells(.Rows.Count, 5).End(xlUp).Row
If VBA.Left(.Cells(lZeile, 5).Value, 4) = 1300 Then
.Cells(lZeile, 5).Offset(1, 0).EntireRow.Insert
End If
Next lZeile
End With
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: ersten Zeichen einer Zelle ermitteln
11.02.2013 09:42:44
Beverly
Hi,
falls deine Zellinhalte keine Formelergebnisse sind, kannst du es so lösen:
For Each rng In ThisWorkbook.Worksheets(1).Columns("E:E").SpecialCells(xlCellTypeConstants)
If Left(rng.Value, 4) = 1300 Then rng.Offset(1, 0).EntireRow.Insert
Next
Sind es Formelergebnisse, dann ersetze xlCellTypeConstants durch xlCellTypeFormulas.


Anzeige
AW: ersten Zeichen einer Zelle ermitteln
11.02.2013 12:51:38
kikimat
Super, vielen Dank für die Hilfe! Ich habe es jetzt mit der zweiten Variante gelöst und statt der ganzen Spalte doch nur einen bestimmten range angegeben. Ist ja wirklich Quatsch alle Zellen zu durchsuchen. Aber warum funktioniert es denn jetzt mit specialcells und vorher nicht?

AW: ersten Zeichen einer Zelle ermitteln
11.02.2013 13:51:31
Klaus
Aber warum funktioniert es denn jetzt mit specialcells und vorher nicht?
Hi,
vorher hat er pro Schleifendurchlauf die ganze Spalte als Range angenommen statt jeder Zelle der Spalte (siehst du, wenn du rng.select in den Code einbaust). Durch "specialcells" wurde die Spalte auf ein begrenztes Range reduziert, dadurch greift rng.select jetzt nicht mehr die ganze Spalte, sondern jede Zelle einzeln pro Schleifendurchlauf.
(nach meinem Verständniss von Logik hätte aber schon die erste Version funktionieren müssen, keine Ahnung warum "for each" die Spalte nicht zellenweise durchläuft)
Grüße,
Klaus M.vdT.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Ersten Zeichen einer Zelle ermitteln


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und lade die Arbeitsmappe, mit der du arbeiten möchtest.

  2. Öffne den VBA-Editor (drücke Alt + F11).

  3. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf VBAProject (deineDatei.xlsx) und wähle Einfügen > Modul.

  4. Füge den folgenden Code ein, um die ersten Zeichen einer Zelle zu überprüfen:

    Option Explicit
    Sub checkFirstCharacter()
       Dim spalte As Range
       Dim rng As Range
       Dim lRow As Long
       Dim lZeile As Long
    
       With ThisWorkbook.Worksheets(1)
           lRow = .Cells(.Rows.Count, 5).End(xlUp).Row
           For lZeile = lRow To 1 Step -1
               If VBA.Left(.Cells(lZeile, 5).Value, 4) = "1300" Then
                   .Cells(lZeile, 5).Offset(1, 0).EntireRow.Insert
               End If
           Next lZeile
       End With
    End Sub
  5. Führe das Skript aus: Drücke F5 oder klicke auf Run.

  6. Überprüfe die Ergebnisse: Die Zeilen sollten entsprechend eingefügt worden sein.


Häufige Fehler und Lösungen

  • Typen unverträglich: Dies passiert oft, wenn der Code nicht auf die einzelnen Zellen zugreift. Stelle sicher, dass du die richtige Range verwendest. Verwende SpecialCells, wenn du nur bestimmte Zellen überprüfen möchtest.

  • Keine Zeilen eingefügt: Überprüfe, ob der Bereich, den du überprüfst, tatsächlich Werte enthält, die mit "1300" beginnen. Nutze Debug.Print oder MsgBox, um Werte während der Schleife zu überprüfen.


Alternative Methoden

Falls du nur die ersten 5 Zeichen einer Zelle ermitteln möchtest, kannst du den Left-Befehl entsprechend anpassen:

If Left(rng.Value, 5) = "deinWert" Then

Für das Einfügen von Zeilen basierend auf dem ersten Zeichen kannst du auch If Left(rng.Value, 1) = "Z" Then verwenden, wenn du nur das erste Zeichen prüfen möchtest.


Praktische Beispiele

Wenn du beispielsweise nur die ersten 5 Zeichen einer Zelle in Excel überprüfen möchtest, kann dies folgendermaßen aussehen:

For Each rng In ThisWorkbook.Worksheets(1).Columns("E:E").SpecialCells(xlCellTypeConstants)
    If Left(rng.Value, 5) = "ABCDE" Then
        rng.Offset(1, 0).EntireRow.Insert
    End If
Next

Das Beispiel zeigt, wie du nur die ersten 5 Zeichen einer Zelle in einer bestimmten Spalte überprüfst.


Tipps für Profis

  • Verwende SpecialCells: Damit kannst du gezielt nur die Zellen mit Werten oder Formeln bearbeiten, was die Leistung verbessert.

  • Debugging: Nutze Debug.Print oder MsgBox, um den Inhalt der Zellen während der Schleife zu überprüfen. Das hilft dir, Fehler schneller zu finden.

  • Ereignisgesteuerte Programmierung: Denke daran, dass du auch Ereignisse in Excel nutzen kannst, um den Code auszuführen, wenn bestimmte Bedingungen erfüllt sind.


FAQ: Häufige Fragen

1. Warum funktioniert das Einfügen von Zeilen nicht? Das kann daran liegen, dass die Schleife nicht korrekt auf die einzelnen Zellen zugreift. Stelle sicher, dass du SpecialCells verwendest, um nur die relevanten Zellen zu prüfen.

2. Wie kann ich nur das erste Zeichen einer Zelle ermitteln? Nutze den Left-Befehl mit If Left(rng.Value, 1) = "X" Then, um nur das erste Zeichen zu überprüfen.

3. Welche Excel-Version benötige ich? Die beschriebenen VBA-Methoden sind in Excel 2010 und späteren Versionen anwendbar.

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