2016-07-14 7 views
0

下の行に入れて「:」下記のように:VBA - スプリットセルの値と、私は後の最後の行のセルを分割するコードを探しています

enter image description here

前に

enter image description here

後これまでの分割データは、次のようになります - しかし、それは最初のセルだけのために働く:

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 

は、私は同様の問題を発見した(解答付き)hereが、

任意の提案が高く評価最後の行にのみ、それを適用するために管理することはできません!私は各文のでRangeメソッドを使用して好む

答えて

0

を一部の人々は@Ondrejとの議論に対する答えに興味がある場合は、ここでは2つのコードがあり、最初は静的であり、第二は、動的である:

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

は、次のように:

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

おかげで、それlooke私のデータのサンプルで良いですが、それは反転されているようです:前半はセルに残り、後半は下のセルに入るべきです。どのようにそれを調整するつもりですか? – pdx

+0

ありがとう!なぜ私はそれを実行しようとすると、私は時々 '範囲外の添え字'を取得するように任意のアイデア? – pdx

+1

セルの値に区切り文字(この場合は ":")が含まれているかどうかを確認する必要があります。 InStrでチェックし、戻り値が-1より大きいかどうかをチェックします。 – holmicz

関連する問題