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

Zeile kopieren wenn zelle

Zeile kopieren wenn zelle
Michael
Hallo Miteienander & Sepp (Josef Ehrensberger),
der damliger Beitrag ist schon geschlossen. War ein paar Tage krank und konnte nicht antworten.
Bitte nochmal um Hilfe.
Die Tabelle besteht aus den Spalten A bis AB. In der Spalte G steht entweder ein Name oder mit ; und Leerzeichen getrennt mehrere Namen nach dem Muster Familienname Leerzeichen Vorname.
Nun sollen alle Zeilen mit mehreren Namen in Spalte G sooft untereinamder kopiert werden als Namen in Spalte G stehen. Dabei sollen dann in den Zellen G nur mehr die einzelnen Namen stehen.
Nun müsste ich von der Duplizierung allerdings ein paar Zellen ausnehmen da es sonst bei Zeiten und Preisen zu Fehlberechnungen kommt. Die Zellen sind z.B. E, J, K usw.
Bin zwar kein VBA Star kann aber durchaus Anpassungen und Erwiterungen vornehmen wenn ich den Code verstanden habe ;-)
Hier das Macro von Sepp, das mit trim super funktioniert.
-------------------------------------
Sub splitNames()
Dim vntValues As Variant, vntTmp As Variant, vntNew() As Variant
Dim lngIndex As Long, lngN As Long, lngC As Long, lngM As Long
With ActiveSheet
vntValues = .Range("A2:AB" & .Cells(.Rows.Count, 1).End(xlUp).Row)
For lngIndex = 1 To UBound(vntValues, 1)
If InStr(1, vntValues(lngIndex, 9), "; ") = 0 Then
lngN = lngN + 1
Redim Preserve vntNew(1 To UBound(vntValues, 2), 1 To lngN)
For lngC = 1 To UBound(vntValues, 2)
vntNew(lngC, lngN) = vntValues(lngIndex, lngC)
Next
Else
vntTmp = Split(vntValues(lngIndex, 9), ";")
For lngM = 0 To UBound(vntTmp)
lngN = lngN + 1
Redim Preserve vntNew(1 To UBound(vntValues, 2), 1 To lngN)
For lngC = 1 To UBound(vntValues, 2)
vntNew(lngC, lngN) = IIf(lngC = 9, Trim$(vntTmp(lngM)), vntValues(lngIndex, lngC))
Next
Next
End If
Next
vntNew = Application.Transpose(vntNew)
.Range("A2").Resize(UBound(vntNew, 1), UBound(vntNew, 2)) = vntNew
End With
End Sub

-------------------------------------
Danke Euch für die Hilfe
Grüsse aus dem verschneiten Wien
Michael

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

Betreff
Benutzer
Anzeige
AW: Zeile kopieren wenn zelle
06.12.2010 13:57:15
Christian
Hallo Michael,
so z.B:
Option Explicit
Sub splitNames()
Dim vntValues As Variant, vntTmp As Variant, vntNew() As Variant
Dim lngIndex As Long, lngN As Long, lngC As Long, lngM As Long
With ActiveSheet
vntValues = .Range("A2:AB" & .Cells(.Rows.Count, 1).End(xlUp).Row)
For lngIndex = 1 To UBound(vntValues, 1)
If InStr(1, vntValues(lngIndex, 9), "; ") = 0 Then
lngN = lngN + 1
ReDim Preserve vntNew(1 To UBound(vntValues, 2), 1 To lngN)
For lngC = 1 To UBound(vntValues, 2)
vntNew(lngC, lngN) = vntValues(lngIndex, lngC)
Next
Else
vntTmp = Split(vntValues(lngIndex, 9), ";")
For lngM = 0 To UBound(vntTmp)
lngN = lngN + 1
ReDim Preserve vntNew(1 To UBound(vntValues, 2), 1 To lngN)
For lngC = 1 To UBound(vntValues, 2)
Select Case lngC
Case 5, 10, 11
If lngM = 0 Then
If lngC = 9 Then
vntNew(lngC, lngN) = Trim$(vntTmp(lngM))
Else
vntNew(lngC, lngN) = vntValues(lngIndex, lngC)
End If
End If
Case Else
If lngC = 9 Then
vntNew(lngC, lngN) = Trim$(vntTmp(lngM))
Else
vntNew(lngC, lngN) = vntValues(lngIndex, lngC)
End If
End Select
Next
Next
End If
Next
vntNew = Application.Transpose(vntNew)
.Range("A2").Resize(UBound(vntNew, 1), UBound(vntNew, 2)) = vntNew
End With
End Sub

Gruß
Christian
Anzeige
AW: Zeile kopieren wenn zelle
06.12.2010 14:40:06
Michael
Hallo Christian,
danke, habs getestet, aber es kommt die Fehlermeldung "Laufzeitfehler '13': Typen unverträglich" und beim Debuggen wird die Zeile 42 vntNew = Application.Transpose(vntNew) markiert.
Da steh ich noch voll an, denn ich habe vorerst bloss verstanden dass in der Case Anweisung die betroffenen Zellen drinstehen müssen. Ich muss mir erst in Kommentare reinschreiben was das Makro wo macht.
LG
Michael
AW: Zeile kopieren wenn zelle
06.12.2010 15:08:14
Michael
Hallo Christian,
hab grad was Wichtiges entdeckt das bei der Fehlermeldung mitspielen lönnte. Die Zellen der beteiligten Spalten können auch leer sein.
LG
Michael
Anzeige
AW: Zeile kopieren wenn zelle
06.12.2010 16:29:16
Christian
Hallo,
lade doch mal eine Beispiel-Datei hoch, dann kann man das testen und muss es nicht nachbauen.
Gruß
Christian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige