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 Miteinader,
bin wieder an einem toten Punkt, kann einiges in mit Rechercheregebnissen in VBA umsetzen aber eben nicht aus dem Ärmel schütteln, bitte um Euch um Hilfe.
Die Tabelle besteht aus den Spalten A bis H. In der Spalte G steht entweder ein Name oder mit ; getrennt mehrere Namen nach dem Muster Familiennname 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.
Danke Euch füer die Hilfe
Michael

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zeile kopieren wenn zelle
22.11.2010 22:26:17
Josef

Hallo Michael,
probie mal das.

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:H" & .Cells(.Rows.Count, 1).End(xlUp).Row)
    For lngIndex = 1 To UBound(vntValues, 1)
      If InStr(1, vntValues(lngIndex, 7), ";") = 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, 7), ";")
        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 = 7, 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

Gruß Sepp

Anzeige
AW: Zeile kopieren wenn zelle
23.11.2010 12:51:13
Michael
Hallo Sepp,
danke, habs gleich ausprobiert funktioniert super. Der Zellbereich geht nun von A bis AB und die Zelle mit den Namen ist I. Dein Makro hab ich daraufhin angepasst (das kann ich ja ;-) und es funktioniert. Was ich falsch angegeben habe ist, die Namen sind durch ; und ein Leerzeichen getrennt, daher stehen in den Zellen I alle weiteren Namen mit einem führenden Leerzeichen drinnen. Kann man das gleich ins Makro einbauen damit man nicht Glätten muss?
Hier noch das von mir angepasste Makro.
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, 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

Gruß
Michael
Anzeige
AW: Zeile kopieren wenn zelle
23.11.2010 17:55:21
Josef

Hallo Michael,
da hilft "Trim()".

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

Gruß Sepp

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige