2017-07-27 9 views
-4

Ich habe folgende Art von Daten in Excel:Excel mehr Spalt entsprechen

Col 1  Col 2  Col 3 
a   Apple  x & y & z 
a   Ant   x & y & z 
a   Aeroplane x & y & z 
b   Ball  m & n 
b   Bat   m & n 
c   Cat   k & l 
c   Carrom  k & l 
c   Can   k & l 

I/split Werte in column3 von & Charakter brechen will und dann für jeden Wert zusätzliche Zeile erstellen. so etwas wie unten sollte Ergebnis sein:

Col 1  Col 2  Col 3 
a   Apple  x 
a   Apple  y 
a   Apple  z 
a   Ant   x 
a   Ant   y 
a   Ant   z 
a   Aeroplane x 
a   Aeroplane y 
a   Aeroplane z 
b   Ball  m 
b   Ball  n 

Werte I verwendet werden, sind nur Proben tatsächliche Datenwörter von & in Spalte 3

adding image since formating getting messed up for table

+1

Willkommen bei Stack Overflow! Ihre Frage enthält nur Anforderungen - es zeigt keinerlei Bemühungen von Ihnen, dieses Problem selbst zu lösen. Bitte fügen Sie Ihre Versuche zu diesen Fragen hinzu - da diese Seite nicht kostenlos ist, machen wir Ihre (Heim-) Arbeit. Darüber hinaus wenden Sie sich bitte an die [Hilfe], um zu erfahren, wie/was Sie hier fragen können. Vielen Dank! – GhostCat

+0

Entschuldigung haben keine Anstrengungen unternommen. Alles, was ich versuchte, war verschiedene Excel-Formeln wie den Wert zu brechen, aber keine funktionierte. neu zu vba, also hier posten. –

+0

Entschuldigung, aber das ist kein "Wir machen Ihre Arbeit" -Service. Wenn Sie mit Ihren VBA-Aktivitäten echte Ergebnisse erzielen wollen - es gibt keine Umwege. Du nimmst besser ein gutes Buch/Tutorial und beginnst zu lernen. Oder Sie beschließen, jemanden einzustellen und für die Arbeit zu bezahlen. Die Chancen sind gering, dass irgendjemand es kostenlos tun wird. – GhostCat

Antwort

0

Dieser Code wird tun, was Sie mit den gegebenen Informationen beabsichtigen. Ich ermutige Sie, die verwendeten Methoden nachzuschlagen, da sie ziemlich grundlegend und Anfänger in Schwierigkeiten sind. Ich habe Kommentare geschrieben, die erklären, was jede Sektion macht. GL

Sub test() 
Dim filter, C1, C2 As String 
Dim counter As Integer 
Dim letters() As String 
Dim i, x As Integer 
Dim char As String 

Cells(1, 3).Select 
x = 1 

'Checks to see if the third column is blank, if not it will continue 
While Cells(x, 3).Value <> "" 

'Re instantiates an array of size 3 to store the letters (technically 4 since 0 is also a position) Also erases past stored data 
ReDim letters(3) As String 
i = 0 
'Filter stores the whole string 
filter = ActiveCell.Value 

'Stores the column A and B values of that row in C1 and C2 
C1 = ActiveCell.Offset(, -2).Value 
C2 = ActiveCell.Offset(, -1).Value 

'This for loop goes through each character of filter string 
For counter = 1 To Len(filter) 
'char stores the character 
char = Mid(filter, counter, 1) 
    If char = " " Or char = "&" Then 
    Else: 
    'stores any character not blank and "&" in an array 
    letters(i) = char 
    i = i + 1 
    End If 
Next 

'If statement to skip rows that only have 1 letter 
If letters(1) <> Empty Then 

'For loop that will create a new line and print out array letters in each new row 
For i = 0 To 1 
ActiveCell.Value = letters(i) 
    ActiveCell.Offset(1).EntireRow.Insert 
    ActiveCell.Offset(1).Select 
    ActiveCell.Offset(, -2).Value = C1 
    ActiveCell.Offset(, -1) = C2 
    ActiveCell.Value = letters(i + 1) 
Next i 
End If 
x = x + 1 
ActiveCell.Offset(1).Select 

Wend 
End Sub 
+0

Danke TJYen. Dies funktioniert für Briefe, die ich für mich ändern werde, die auch Wörter in der letzten Spalte haben können. –

+0

für Zeichen können Sie eine Schleife verwenden, um die Anzahl der Zeichen bis zum nächsten Leerzeichen zu zählen. Dann benutze das im 'char = Mid (filter, counter,' Anzahl der Zeichen '), um das Wort zu erfassen – TJYen

0

Wie es ist ein 'one-off' getrennt enthält ich tun würde, eine manuelle Korrektur

Legen Sie alle Zeilen mit nur einem Element in Spalte 3 in ein neues Blatt. Legen Sie diese mit zwei Elementen in ein anderes Blatt Und so weiter Dann entfernen Sie den ersten Artikel auf dem zwei Artikelblatt und kopieren Sie dieses in das erste Blatt Dann entfernen Sie den zweiten Artikel auf dem zwei Artikelblatt und kopieren Sie diese in die erstes Blatt. Machen Sie weiter und schließlich haben Sie die Daten, wie Sie es wollen.

Obwohl dies eine lange Zeit dauert, ist es wahrscheinlich schneller als das Lernen von VBA und das Schreiben einer Routine, um es zu tun.

+0

die Daten sind sehr groß, um dies zu tun. Danke für den Vorschlag. –