Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

komma finden und diese Zeile kopieren
#1
Hallo,

ich habe ein Problem und finde irgendwie keine Lösung.

Ich habe eine Tabelle, an der in Spalte 14 immer Werte mit einem Komma stehen.

Per Makro suche ich diese Zeile und Excel soll mir die unter die bestehende Zeile kopieren.

Mit dem Makro:

Dim LR As Long, i As Long, A As Integer
    Application.ScreenUpdating = False
    With Sheets("Testblatt")
    If .FilterMode Then .ShowAllData ' Autofilter alle
        LR = .Cells(.Rows.Count, "B").End(xlUp).Row 'letzte Zeile der Spalte
        For i = 2 To LR
            If InStr(.Cells(i, 14), ",") > 0 Then
          .Range(.Cells(i, 1), .Cells(i, 14)).Select
        Selection.Copy
    Selection.Insert Shift:=xlDown
  End If
  Next
End With


macht er es zwar, allerdings verdoppelt er mir dann immer wieder die gleiche Zeile.

Wo liegt der Fehler?

Natürlich bei mir, da das makro die Zeile 280 als erstes findet, die Zeile 280 als Zeile 281 einfügt, dann als nächstes die Zeile 281 findet, diese als Zeile 282 einfügt usw.

Er soll aber nach dem kopieren quasi einfach in der Liste weitersuchen und die nächste kopieren....

Viele Grüße
Andreas
Antworten Top
#2
Hallo,

so sollte es gehen:

Code:
Dim LR As Long, i As Long, A As Integer
    Application.ScreenUpdating = False
    With Sheets("Testblatt")
    If .FilterMode Then .ShowAllData ' Autofilter alle
        LR = .Cells(.Rows.Count, "B").End(xlUp).Row 'letzte Zeile der Spalte
        For i = 2 To LR
            If InStr(.Cells(i, 14), ",") > 0 Then
          .Range(.Cells(i, 1), .Cells(i, 14)).Select
        Selection.Copy
    Selection.Insert Shift:=xlDown
    i = i + 1
  End If
  Next
End With

Er muss nach einem "Fund" immer eine Zeile weiterspringen, sonst wird die kopierte Zeile wieder gefunden.

Grüße

NobX
[-] Folgende(r) 1 Nutzer sagt Danke an NobX für diesen Beitrag:
  • ari-2001
Antworten Top
#3
Moin!
Ohne mir die Logik näher angeschaut zu haben:
Hilft statt
For i = 2 To LR
For i = LR To 2 Step -1
?

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • ari-2001
Antworten Top
#4
Hallo

sieht so nach Code von mir aus. 19

Sowas macht man immer von unten nach oben
Außerdem kann man in 99% auf Select verzichten

also so
Code:
    Dim LR As Long, i As Long, A As Integer
    Application.ScreenUpdating = False
    With Sheets("Testblatt")
        If .FilterMode Then .ShowAllData ' Autofilter alle
        LR = .Cells(.Rows.Count, "B").End(xlUp).Row 'letzte Zeile der Spalte
        For i = LR To 2 Step -1
            If InStr(.Cells(i, 14), ",") > 0 Then
                With .Range(.Cells(i, 1), .Cells(i, 14))
                    .Offset(1, 0).Insert Shift:=xlDown
                    .Copy .Offset(1, 0)
                End With
            End If
        Next
    End With

LG UweD
[-] Folgende(r) 1 Nutzer sagt Danke an UweD für diesen Beitrag:
  • ari-2001
Antworten Top
#5
Vielen Dank an alle,

es funktioniert.

@UWE: Ja, ein Teil des Codes ist von Dir.

Den kann ich eigentlich für irgendetwas immer brauchen Smile


Viele Grüße
Andreas
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste