2016-07-14 9 views
0

ich für einen Code suchen, die die Zellen der letzten Zeile geteilt würden nach „:“ wie unten dargestellt:VBA - Zellenwert Split und legt sie in die Zeile unter

Vor

enter image description here

nach

enter image description here

Bisher Splitting Daten wie folgt aussehen - aber es funktioniert nur für die erste Zelle:

Sub test() 
Dim ws As Worksheet 
Set ws = Sheets("Sheet3") 
Dim fullstring As String, colonposition As Integer, j As Integer, LastRow As Long, FirstRow As Long 
Dim lRow As Long, lCol As Long 
lRow = Cells(Rows.Count, 1).End(xlUp).Row 
lCol = Cells(1, Columns.Count).End(xlToLeft).Column 
    For j = 1 To 3 
    fullstring = Cells(lRow, lCol).Value 
    colonposition = InStr(fullstring, ":") 
    Cells(lRow, j).Value = Left(fullstring, colonposition - 1) 
    lRow = lRow + 1 
    Cells(lRow, j).Value = Mid(fullstring, colonposition + 1) 
    Next 

End Sub 

Ich habe eine ähnliche Problematik (mit Antwort) here gefunden, aber verwalten kann es nicht nur auf die letzte Zeile

Irgendwelche Vorschläge geschätzt bewerben!

Antwort

0

Falls einige Leute in den Antworten auf die Diskussion mit @Ondrej interessiert sind, hier sind zwei Codes, die erste ist statisch und die zweite ist dynamisch:

Sub test() 
Dim ws As Worksheet 
Set ws = Sheets("Sheet1") 
Dim actualRange As Range 
For Each actualRange In ws.Range(ws.Cells(ws.Rows.Count, 1).End(xlUp), ws.Cells(ws.Rows.Count, 1).End(xlUp).End(xlToRight)) 
If InStr(Trim(actualRange), ":") > 0 Then 
actualRange.Offset(1, 0).Value = Split(actualRange.Value, ":")(1) 
actualRange.Offset(0, 0).Value = Split(actualRange.Value, ":")(0) 

End If 
Next 
End Sub 

&

Sub test() 
Dim ws As Worksheet 
Set ws = Sheets("Sheet1") 
Dim actualRange As Range 
Dim tmpString As String 
For Each actualRange In ws.Range(ws.Cells(ws.Rows.Count, 1).End(xlUp), ws.Cells(ws.Rows.Count, 1).End(xlUp).End(xlToRight)) 
tmpString = actualRange.Value 
If InStr(Trim(tmpString), ":") > 0 Then 
actualRange.Offset(0, 0).Value = Split(tmpString, ":")(0) 

actualRange.Offset(1, 0).Value = Split(tmpString, ":")(1) 

End If 
Next 
End Sub 
1

ich lieber mit Range-Methode mit für jede Anweisung, wie folgt vor:

Sub test() 
    Dim ws As Worksheet 
    Set ws = Sheets("Sheet3") 
    Dim actualRange As Range 
    For Each actualRange In ws.Range(ws.Cells(ws.Rows.Count, 1).End(xlUp), ws.Cells(ws.Rows.Count, 1).End(xlUp).End(xlToRight)) 
     actualRange.Offset(-1, 0).Value = Split(actualRange.Value, ":")(0) 
     actualRange.Offset(0, 0).Value = Split(actualRange.Value, ":")(1) 
    Next 
End Sub 
+0

Danke, es looke d gut auf eine Probe meiner Daten, jedoch scheint es umgekehrt zu sein: die erste Hälfte sollte in der Zelle bleiben und die zweite Hälfte sollte in die Zelle darunter gehen. Wie würdest du es ändern? – pdx

+0

Danke! Irgendeine Idee warum, wenn ich versuche, es auszuführen, bekomme ich manchmal "Index außerhalb der Reichweite"? – pdx

+1

Sie müssen überprüfen, ob der Zellenwert ein Trennzeichen enthält, in diesem Fall ":". Überprüfen Sie es einfach mit InStr und wenn der Rückgabewert größer als -1 ist. – holmicz

Verwandte Themen