2017-06-24 1 views
0

Wie dupliziere ich Zeilen basierend auf dem Inhalt von Spalte B. Ich hätte gerne eine separate Zeile für jede "Person" in der Zelle?Wie dupliziere ich Zeilen basierend auf dem Zellinhalt (Zelle enthält semi-separierte Daten)

Dies ist meine Ausgangstabelle (ich die Daten auf anderer Weise nicht extrahieren):

enter image description here

Das ist mein Ziel ist:

enter image description here

Vielen Dank für Ihre Hilfe !

+0

Sie dies tun können einfach mit 'Macht Query' oder'Erhalte und Transform' verfügbar seit Excel 2010. Sie verwenden das Werkzeug nur, um die Spalte Kontakt auf Semikolons aufzuteilen; dann deaktivieren Sie diese Spalten. Möglicherweise müssen Sie eine überflüssige Spalte löschen und einige umbenennen. Wenn Sie eine VBA-Lösung benötigen, zeichnen Sie einfach ein Makro auf, während Sie es tun. –

Antwort

0

Sie können eine Schleife implementieren, die durch jede der Zeilen unter der Kopfzeile verläuft. Überprüfen Sie in jeder Zeile den Inhalt in Spalte B und führen Sie die folgende Funktion aus, die den Inhalt basierend auf dem Zeichen ";" aufteilt.

Split(Cells(row,"B"),";")

Dies wird ein Array von Werten zurück. Zum Beispiel [Person A, Person B, Person C] Nun, wenn dieses Array mehr als 1 Wert hat, dann fahren Sie mit dem Einfügen einer neuen Zeile für jeden Wert im Array nach dem ersten Wert fort.

Rows(row)EntireRow.Insert

Viel Glück!

0

Sie haben keinen Code hier ist also etwas Ausgangs Konzept geliefert:

Verwenden Sie eine do until .cells(i,2).value = "" Schleife

Verwenden newArray = Split(Cells(i,2).Value, ";") ein Array mit jeder Person Namen zu erhalten darin

ein for x = lbound(newArray) to ubound(newArray) verwenden zu schneiden die erste Zeile und dann x-mal und machen Sie einen cells(i+x,2).value = newArray(x).value

schließlich vergessen Sie nicht, den ubound(newarray) Wert zuhinzuzufügenAndernfalls bleiben Sie in einer Endlosschleife stecken, in der Sie eine Person finden und eine Zeile hinzufügen.

0

Ihre Daten muss in Sheet1 und gewünschten Ausgang Unter der Annahme, in Sheet2 angezeigt werden, sollte folgender Code helfen:

Sub SplitCell() 
    Dim cArray As Variant 
    Dim cValue As String 
    Dim rowIndex As Integer, strIndex As Integer, destRow As Integer 
    Dim targetColumn As Integer 
    Dim lastRow As Long, lastCol As Long 
    Dim srcSheet As Worksheet, destSheet As Worksheet 

    targetColumn = 2 'column with semi-colon separated data 

    Set srcSheet = ThisWorkbook.Worksheets("Sheet1") 'sheet with data 
    Set destSheet = ThisWorkbook.Worksheets("Sheet2") 'sheet where result will be displayed 

    destRow = 0 
    With srcSheet 
     lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
     lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
     For rowIndex = 1 To lastRow 
      cValue = .Cells(rowIndex, targetColumn).Value 'getting the cell with semi-colon separated data 
      cArray = Split(cValue, ";") 'splitting semi-colon separated data in an array 
      For strIndex = 0 To UBound(cArray) 
       destRow = destRow + 1 
       destSheet.Cells(destRow, 1) = .Cells(rowIndex, 1) 
       destSheet.Cells(destRow, 2) = Trim(cArray(strIndex)) 
       destSheet.Cells(destRow, 3) = .Cells(rowIndex, 3) 
      Next strIndex 
     Next rowIndex 
    End With 
End Sub 
Verwandte Themen