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

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

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.


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?

Anzeige
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

346 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige