Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1328to1332
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

Wenn Kriterium erfüllt - Zeile einfügen

Wenn Kriterium erfüllt - Zeile einfügen
03.09.2013 18:17:56
Felix
Hallo zusammen,
vielleicht kann mir jemand helfen? Wir bekommen eine Excel Liste, die in einer Spalte eine oder mehrere Lieferscheinnummern als Kriterium enthält. Diese Spalte dient als Kriterium für einen SVERWEIS zu einer anderen Datei. Da einige Zeilen jedoch mehrere Werte enthalten (zum Großteil mit einem / getrennt), muss man die Datei erst manuell bearbeiten.
Gibt es hier eine Lösung? Kann man mit einem Makro evtl. die Zeile kopieren wenn ein / vorkommt?
Hier die Datei - die gesamte Datei ist viel größer, sonst würde sich das nicht rentieren... Es dreht sich um die Spalte U
https://www.herber.de/bbs/user/87141.xlsx
Vielen Dank im Voraus,
viele Grüße
Felix

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn Kriterium erfüllt - Zeile einfügen
03.09.2013 22:48:46
Bastian
Hallo Felix,
probier mal folgenden Code:
Option Explicit
Sub Kopieren()
Dim varNummer As Variant
Dim intZaehler As Integer
Dim intZaehler2 As Integer
Dim intZaehler3 As Integer
Dim lngLZeile As Long
lngLZeile = Worksheets("detfat").Cells(Rows.Count, 1).End(xlUp).Row
intZaehler3 = lngLZeile + 1
For intZaehler = 2 To lngLZeile
If InStr(1, Cells(intZaehler, 21).Value, "/", 1)  0 Then
varNummer = Split(Cells(intZaehler, 21), "/")
For intZaehler2 = 0 To UBound(varNummer)
Cells(intZaehler, 1).EntireRow.Copy Destination:=Cells(intZaehler3, 1)
Cells(intZaehler3, 21).Value = varNummer(intZaehler2)
intZaehler3 = intZaehler3 + 1
Next intZaehler2
End If
Next intZaehler
End Sub
Die Zeilen werden unter die alten Zeilen kopiert. In die Zelle in Zeile U wird jeweils nur eine Nummer geschrieben.
Gruß, Bastian

Anzeige
Korrektur...
03.09.2013 23:11:07
Bastian
Option Explicit
Sub Kopieren()
Dim varNummer As Variant
Dim intZaehler As Integer
Dim intZaehler2 As Integer
Dim intZaehler3 As Integer
Dim lngLZeile As Long
lngLZeile = Worksheets("detfat").Cells(Rows.Count, 1).End(xlUp).Row
intZaehler3 = lngLZeile + 1
For intZaehler = 2 To lngLZeile
With Worksheets("detfat")
If InStr(1, .Cells(intZaehler, 21).Value, "/", 1)  0 Then
varNummer = Split(.Cells(intZaehler, 21), "/")
For intZaehler2 = 0 To UBound(varNummer)
.Cells(intZaehler, 1).EntireRow.Copy Destination:=.Cells(intZaehler3, 1)
.Cells(intZaehler3, 21).Value = varNummer(intZaehler2)
intZaehler3 = intZaehler3 + 1
Next intZaehler2
End If
End With
Next intZaehler
End Sub

Anzeige
AW: Korrektur...
04.09.2013 10:20:32
Felix
Hi Bastian,
erstmal Vielen Dank! Das funktioniert super.
Ich habe noch eine Ergänzung, wenn irgendwie möglich.
Kann man die alte Zeile, in der die Trennung vorhanden war, löschen und in den eingefügten Zeilen einen Zähler mitgeben? D.h. wenn hier zwei Werte drin standen, werden zwei neue Zeilen unten angefügt, die hinten dran eine 1 und eine 2 haben?
Vielen Dank im Voraus,
Felix

AW: Korrektur...
04.09.2013 11:22:36
Bastian
Hi Felix,
hier der angepasste Code. Der Zähler ist in Zeile V (kannst Du im Code leicht anpassen. Ich habe die
Stellen mit einem Kommentar markiert.
Option Explicit
Sub Kopieren()
Dim varNummer As Variant
Dim intZaehler As Integer
Dim intZaehler2 As Integer
Dim intZaehler3 As Integer
Dim lngLZeile As Long
With Worksheets("detfat")
lngLZeile = .Cells(Rows.Count, 1).End(xlUp).Row
intZaehler3 = lngLZeile + 1
.Cells(1, 22).Value = "Zähler" 'Hier anpassen, in welche Spalte der Zähler soll (22  _
bedeutet Spalte V)
For intZaehler = 2 To lngLZeile
If InStr(1, .Cells(intZaehler, 21).Value, "/", 1)  0 Then
varNummer = Split(.Cells(intZaehler, 21), "/")
For intZaehler2 = 0 To UBound(varNummer)
.Cells(intZaehler, 1).EntireRow.Copy Destination:=.Cells(intZaehler3, 1)
.Cells(intZaehler3, 21).Value = varNummer(intZaehler2)
.Cells(intZaehler3, 22).Value = intZaehler2 + 1  'Hier anpassen, in welche  _
Spalte der Zähler soll (22 bedeutet Spalte V)
intZaehler3 = intZaehler3 + 1
Next intZaehler2
End If
Next intZaehler
Range("A2:A" & lngLZeile).EntireRow.Delete Shift:=xlUp
End With
End Sub
Gruß, Bastian

Anzeige
AW: Korrektur...
04.09.2013 12:37:59
Felix
Hi Bastian,
Vielen Dank. Nur kommen in der Originaldatei auch Zeilen vor, die nur ein Wert und kein Trennzeichen enthalten. Diese werden gelöscht, aber nicht kopiert. :-(
Viele Grüße
Felix

AW: Korrektur...
04.09.2013 13:06:03
Bastian
Hi Felix,
sorry, mein Fehler. Hier der korrigierte Code. Teste mal, aber sollte so passen.
Option Explicit
Sub Kopieren()
Dim varNummer As Variant
Dim intZaehler As Integer
Dim intZaehler2 As Integer
Dim intZaehler3 As Integer
Dim intZaehler4 As Integer
Dim lngLZeile As Long
With Worksheets("detfat")
lngLZeile = .Cells(Rows.Count, 1).End(xlUp).Row
intZaehler3 = lngLZeile + 1
.Cells(1, 22).Value = "Zähler" 'Hier anpassen, in welche Spalte der Zähler soll (22  _
bedeutet Spalte V)
For intZaehler = 2 To lngLZeile
If InStr(1, .Cells(intZaehler, 21).Value, "/", 1)  0 Then
varNummer = Split(.Cells(intZaehler, 21), "/")
For intZaehler2 = 0 To UBound(varNummer)
.Cells(intZaehler, 1).EntireRow.Copy Destination:=.Cells(intZaehler3, 1)
.Cells(intZaehler3, 21).Value = varNummer(intZaehler2)
.Cells(intZaehler3, 22).Value = intZaehler2 + 1  'Hier anpassen, in welche  _
Spalte der Zähler soll (22 bedeutet Spalte V)
intZaehler3 = intZaehler3 + 1
Next intZaehler2
End If
Next intZaehler
lngLZeile = .Cells(Rows.Count, 1).End(xlUp).Row
For intZaehler4 = 2 To lngLZeile
If InStr(1, .Cells(intZaehler4, 21).Value, "/", 1)  0 Then
.Cells(intZaehler4, 1).EntireRow.Delete Shift:=xlUp
intZaehler4 = intZaehler4 - 1
End If
Next intZaehler4
End With
End Sub
Gruß, Bastian

Anzeige
AW: Korrektur...
04.09.2013 13:11:45
Bastian
oder vielleicht besser noch so:
Erst werden ALLE Zeilen kopiert (und mit einem Zähler versehen) und dann alle alten Zeilen gelöscht.
Gruß, Bastian
Option Explicit
Sub Kopieren()
Dim varNummer As Variant
Dim intZaehler As Integer
Dim intZaehler2 As Integer
Dim intZaehler3 As Integer
Dim lngLZeile As Long
With Worksheets("detfat")
lngLZeile = .Cells(Rows.Count, 1).End(xlUp).Row
intZaehler3 = lngLZeile + 1
.Cells(1, 22).Value = "Zähler" 'Hier anpassen, in welche Spalte der Zähler soll (22  _
bedeutet Spalte V)
For intZaehler = 2 To lngLZeile
varNummer = Split(.Cells(intZaehler, 21), "/")
For intZaehler2 = 0 To UBound(varNummer)
.Cells(intZaehler, 1).EntireRow.Copy Destination:=.Cells(intZaehler3, 1)
.Cells(intZaehler3, 21).Value = varNummer(intZaehler2)
.Cells(intZaehler3, 22).Value = intZaehler2 + 1  'Hier anpassen, in welche Spalte  _
der Zähler soll (22 bedeutet Spalte V)
intZaehler3 = intZaehler3 + 1
Next intZaehler2
Next intZaehler
Range("A2:A" & lngLZeile).EntireRow.Delete Shift:=xlUp
End With
End Sub

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige