Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
260to264
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
260to264
260to264
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zeilen n mal duplizieren

Zeilen n mal duplizieren
23.05.2003 11:36:11
Hermann
Hallo,

ich habe eine Excel-Tabelle mit den Spalten A:AJ und beliebig viele Zeilen.
Die erste Zeile enthält Überschriften zu den Spalten.

In Spalte C mit der Überschrift Code7 stehen ein oder mehrere siebenstellige Codes (z.B.: 123MXYZ, 321ABCD, 999QWER, usw.), wenn mehr als ein Code, dann immer durch Komma und blank getrennt.
Jetzt soll jede Zeile mit mehreren Codes n mal untereinander kopiert werden und in Spalte C nur noch einen Code enthalten, d.h. aus
Kurt, Klaus, Otto hat 50 EURO
soll werden:
Kurt hat 50 EURO
Klaus hat 50 EURO
Otto hat 50 EURO
wobei die Zeilen unverändert kopiert werden sollen, bis auf die Spalte C, die soll vom Dateninhalt vereinzelt werden.

Hat da jemand eine Idee?

Gruß und Danke Hermann


10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Zeilen n mal duplizieren
23.05.2003 13:34:28
th.heinrich
hallo Hermann,

meine erste idee war DATEN-TEXT IN SPALTEN. damit habe ich ein bisschen experimentiert, leider ohne richtigen erfolg :-(

da hilft wahrscheinlich nur VBA, fuer mich zu hoch.

gruss thomas

Re: Zeilen n mal duplizieren
23.05.2003 14:00:38
PeterG
Hallo Hermann,

versuch's mal mit folgendem Makro (mit heißer Nadel gestrickt und ungetestet).

Sub Umkopieren()
Dim T1$, T2$, n%, z1%, z2%, k%, C$, C1$, C2(30) As String, D$, s%
T1 = "Tabelle1"
T2 = "Tabelle2"
z1 = 2
z2 = 2
Sheets(T1).Rows(1).Copy
Sheets(T2).Select: Rows(1).Select: ActiveSheet.Paste
Do While Sheets(T1).Cells(z1, 1) > Empty
C = Sheets(T1).Cells(z1, 3): n = 0
Do While Len(C) > 0
n = n + 1
k = InStr(C, ",")
If k = 0 Then
k = InStr(C, " ")
C2(n) = Left(C, k - 1): D = Mid(C, k + 1)
Exit Do
End If
C2(n) = Left(C, k - 1)
C = Mid(C, k + 2)
Loop
Sheets(T1).Rows(z1).Copy
For s = 1 To n
Rows(z2).Select: ActiveSheet.Paste
Cells(z2, 3) = C2(s) & " " & D
z2 = z2 + 1
Next
z1 = z1 + 1
Loop
End Sub

Gruss
Peter

Anzeige
Re: Zeilen n mal duplizieren
26.05.2003 09:01:36
Hermann
Hallo,

War am WE weg und hatte erst heute (Montag) wieder Zeit, reinzuschauen und weiterzuarbeiten.

Danke, für die Hilfe erstmal, nun geht's ans Testen, ich melde mich dann wieder.

Gruß Hermann

Re: Zeilen n mal duplizieren
26.05.2003 09:22:13
Hermann
Hallo Peter,

ich habe dein VBA-Makro getestet:
- erfolgreiches Kopieren der ersten Zeile in Tabelle2
- dann Laufzeitfehler 5, (=Ungültiger Prozedurenaufruf oder ungültiges Argument)
- Umschalten auf Debuggen
- danach war dieser Teil des Makros gelb markiert

C2(n) = Left(C, k - 1)

Wo liegt der Fehler?

Gruß Hermann

Fehlersuche in Makro "Umkopieren"
26.05.2003 10:33:39
Hermann
Hallo Peter, und alle Interessierten,

Frage zu der IF-Bedingung: If k = 0 Then

- wenn ein Komma gefunden wurde, dann ist k größer Null
- die IF-Bedingung sucht aber bei k=0 (richtiger vielleicht k>0 ? dann k aber irgendwo wieder Null setzen, wo?)


ich hab es mal testweise mit "If k > 0 Then" versucht, aber so läuft es auch noch nicht,
weil nach der END IF-Zeile das Programm dann hier hängenbleibt: C2(n) = Left(C, k - 1)

wie korrigiere ich das Makro, damits läuft?

Gruß Hermann


Anzeige
Fehlersuche in Makro "Umkopieren"
26.05.2003 10:33:47
Hermann
Hallo Peter, und alle Interessierten,

Frage zu der IF-Bedingung: If k = 0 Then

- wenn ein Komma gefunden wurde, dann ist k größer Null
- die IF-Bedingung sucht aber bei k=0 (richtiger vielleicht k>0 ? dann k aber irgendwo wieder Null setzen, wo?)


ich hab es mal testweise mit "If k > 0 Then" versucht, aber so läuft es auch noch nicht,
weil nach der END IF-Zeile das Programm dann hier hängenbleibt: C2(n) = Left(C, k - 1)

wie korrigiere ich das Makro, damits läuft?

Gruß Hermann


Zeilen duplizieren - es läuft!
26.05.2003 13:28:45
Hermann
Hallo Peter,

es läuft!!!

Nach ein paar Korrekturen habe ich dein Makro zum Laufen gebracht, Die Struktur hat gestimmt, nur so ein paar Indizes waren um +-1 verschoben. Und dann habe ich den Fall noch eingefügt, dass bei keinem Code auch kopiert wird.

Ich stell das Makro mal hier rein, aber wundere dich nicht über meine Comments im Makro, die brauch ich als nicht VBA-ler zur Stütze.


Sub Umkopieren1()

Dim T1$, T2$, m%, n%, z1%, z2%, k%, C$, C1$, C2(7) As String, D$, s%
T1 = "Tabelle1" ' Name der Tabelle1
T2 = "Tabelle2" ' Name der Tabelle2
z1 = 2 ' Zeilenzähler von Tabelle1 auf 2 (wegen Überschrift)
z2 = 2 ' Zeilenzähler von Tabelle2 auf 2 (wegen Überschrift)
Sheets(T1).Rows(1).Copy ' Kopieren der Überschrift von Tabelle1 in Tabelle2
Sheets(T2).Select: Rows(1).Select: ActiveSheet.Paste


Do While Sheets(T1).Cells(z1, 1) > Empty ' LOOP1: über alle belegten Zeilen der Tabelle1
C = Sheets(T1).Cells(z1, 3): n = 0: m = 0 ' Untersuche Wert in Spalte C (=3. Spalte)
If Len(C) = 0 Then ' kein Code in Spalte 3? (Hesi)
m = 1 ' Merker für kein Code in Spalte 3 (Hesi)
End If


Do While Len(C) > 0 ' LOOP2: über alle n Codes
n = n + 1 ' Anzahl Codes erhöhen
k = InStr(C, ",") ' suche die Position des Kommas

If k = 0 Then ' wenn kein Komma enthalten, d.h. nur 1 Code
C2(n) = Left(C, 7) ' Code = 7 Zeichen und dann EXIT
Exit Do ' LOOP2: Exit
End If '

C2(n) = Left(C, k - 1) ' Code extrahieren bis 1 Stelle vor Komma
C = Mid(C, k + 2) ' zu untersuchenden String C kürzen
Loop ' LOOP2: über alle n Codes

Sheets(T1).Rows(z1).Copy ' Kopiere Zeile aus Tabelle1
If m = 1 Then ' Zeile auch ohne Code einfügen (Hesi)
Rows(z2).Select: ActiveSheet.Paste ' Zeile auch ohne Code einfügen (Hesi)
z2 = z2 + 1 ' nächste Zeile in Tabelle2 (Hesi)
End If

For s = 1 To n ' LOOP3: Einfügen von n Zeilen in Tabelle2
Rows(z2).Select: ActiveSheet.Paste ' ganze Zeile einfügen
Cells(z2, 3) = C2(s) ' extrahierter Code in Zelle in Spalte 3
z2 = z2 + 1 ' nächste Zeile in Tabelle2
Next ' LOOP3: Ende

z1 = z1 + 1 ' nächste Zeile in Tabelle1
Loop ' LOOP1: über alle Zeilen der Tabelle1

End Sub

Danke nochmals und
Gruß Hermann

Anzeige
Re: Zeilen duplizieren - es läuft!
26.05.2003 13:46:02
Hermann
Hier nochmals der Code, jetzt besser lesbar:


'Nicht registrierte Benutzung der Excel Code Jeanie 1.0
Sub Umkopieren1()

Dim T1$, T2$, m%, n%, z1%, z2%, k%, C$, C1$, C2(7) As String, D$, s%
T1 = "Tabelle1" ' Name der Tabelle1
T2 = "Tabelle2" ' Name der Tabelle2
z1 = 2 ' Zeilenzähler von Tabelle1 auf 2 (wegen Überschrift)
z2 = 2 ' Zeilenzähler von Tabelle2 auf 2 (wegen Überschrift)
Sheets(T1).Rows(1).Copy ' Kopieren der Überschrift von Tabelle1 in Tabelle2
Sheets(T2).Select: Rows(1).Select: ActiveSheet.Paste


Do While Sheets(T1).Cells(z1, 1) > Empty ' LOOP1: über alle belegten Zeilen der Tabelle1
C = Sheets(T1).Cells(z1, 3): n = 0: m = 0 ' Untersuche Wert in Spalte C (=3. Spalte)
If Len(C) = 0 Then ' kein Code in Spalte 3? (Hesi)
m = 1 ' Merker für kein Code in Spalte 3 (Hesi)
End If


Do While Len(C) > 0 ' LOOP2: über alle n Codes
n = n + 1 ' Anzahl Codes erhöhen
k = InStr(C, ",") ' suche die Position des Kommas

If k = 0 Then ' wenn kein Komma enthalten, d.h. nur 1 Code
C2(n) = Left(C, 7) ' Code = 7 Zeichen und dann EXIT
Exit Do ' LOOP2: Exit
End If '

C2(n) = Left(C, k - 1) ' Code extrahieren bis 1 Stelle vor Komma
C = Mid(C, k + 2) ' zu untersuchenden String C kürzen
Loop ' LOOP2: über alle n Codes

Sheets(T1).Rows(z1).Copy ' Kopiere Zeile aus Tabelle1
If m = 1 Then ' Zeile auch ohne Code einfügen (Hesi)
Rows(z2).Select: ActiveSheet.Paste ' Zeile auch ohne Code einfügen (Hesi)
z2 = z2 + 1 ' nächste Zeile in Tabelle2 (Hesi)
End If

For s = 1 To n ' LOOP3: Einfügen von n Zeilen in Tabelle2
Rows(z2).Select: ActiveSheet.Paste ' ganze Zeile einfügen
Cells(z2, 3) = C2(s) ' extrahierter Code in Zelle in Spalte 3
z2 = z2 + 1 ' nächste Zeile in Tabelle2
Next ' LOOP3: Ende

z1 = z1 + 1 ' nächste Zeile in Tabelle1
Loop ' LOOP1: über alle Zeilen der Tabelle1

End Sub

Code eingefügt mit: Excel Code Jeanie


Gruß Hermann

Anzeige
Re: Zeilen duplizieren - es läuft!
26.05.2003 14:09:56
Hermann
Hier nochmals in einer anderen Form: (für mich zum Testen des Aussehens)



Sub Umkopieren1()

Dim T1$, T2$, m%, n%, z1%, z2%, k%, C$, C1$, C2(7) As String, D$, s%
T1 = "Tabelle1"                           ' Name der Tabelle1
T2 = "Tabelle2"                           ' Name der Tabelle2
z1 = 2                                    ' Zeilenzähler von Tabelle1 auf 2 (wegen Überschrift)
z2 = 2                                    ' Zeilenzähler von Tabelle2 auf 2 (wegen Überschrift)
Sheets(T1).Rows(1).Copy                   ' Kopieren der Überschrift von Tabelle1 in Tabelle2
Sheets(T2).Select: Rows(1).Select: ActiveSheet.Paste


Do While Sheets(T1).Cells(z1, 1) > Empty  ' LOOP1: über alle Zeilen der Tabelle1
C = Sheets(T1).Cells(z1, 3): n = 0: m = 0    ' Untersuche Wert in Spalte C (=3. Spalte)
If Len(C) = 0 Then                           ' kein Code in Spalte 3(Hesi)
m = 1                                        ' kein Code in Spalte 3(Hesi)
End If


Do While Len(C) > 0                          ' LOOP2: über alle n Codes
n = n + 1                                       ' Anzahl Codes erhöhen
k = InStr(C, ",")                               ' suche die Position des Kommas
 
If k = 0 Then                                   ' wenn kein Komma enthalten, d.h. nur 1 Code
C2(n) = Left(C, 7)                                 ' Code = 7 Zeichen und dann EXIT
Exit Do                                      ' LOOP2: Exit
End If                                          '

C2(n) = Left(C, k - 1)                          ' Code extrahieren bis 1 Stelle vor Komma
C = Mid(C, k + 2)                               ' zu untersuchenden String C kürzen
Loop                                         ' LOOP2: über alle n Codes

Sheets(T1).Rows(z1).Copy                     ' Kopiere Zeile aus Tabelle1
If m = 1 Then                                ' Zeile auch ohne Code einfügen (Hesi)
Rows(z2).Select: ActiveSheet.Paste           ' Zeile auch ohne Code einfügen (Hesi)
z2 = z2 + 1                                  ' nächste Zeile in Tabelle2 (Hesi)
End If

For s = 1 To n                               ' LOOP3: Einfügen von n Zeilen in Tabelle2
Rows(z2).Select: ActiveSheet.Paste              ' ganze Zeile einfügen
Cells(z2, 3) = C2(s)                            ' extrahierter Code in Zelle in Spalte 3
z2 = z2 + 1                                     ' nächste Zeile in Tabelle2
Next                                         ' LOOP3: Ende

z1 = z1 + 1                                  ' nächste Zeile in Tabelle1
Loop                                      ' LOOP1: über alle Zeilen der Tabelle1

End Sub


     Code eingefügt mit Syntaxhighlighter 2.1


The winner is: Syntaxhighlighter 2.1

mfg hesi

Anzeige
Re: Zeilen duplizieren - es läuft!
27.05.2003 10:57:00
PeterG
Hallo Hermann,

freut mich, daß was bei rausgekommen ist. Deine mails habe ich bekommen.
Gruß
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige