2016-12-05 14 views
0

名前と日付をまとめたファイルがあります。1つのセルのデータを複数のセルに分割する

例:私がしようとした

Jane Hoffen -----  30. october 2014 v 19:31 UTC+01   
Lenka Copper -----  30. october 2014 v 19:31 UTC+01  

代わりに三つのセル

Jane Hoffen ------  30. october 2014 -----  19:31  
Lenka Copper ------  30. october 2014 -----  19:31 

Jane Hoffen30. october 2014 v 19:31 UTC+01  
Lenka Copper30. october 2014 v 19:31 UTC+01 

私は、二つのセルにスプリット名前と日付に、このようなものが必要マクロを作成しても何も効果がありません。

+3

これまでに何を試みましたか?コードを表示すると、それが機能しなくても、達成しようとしていることを他の人がよりよく理解できるようになります。また、あなたが間違っている場所を見て、貴重なVBAのヒントを与えることもできます。 –

+0

リボンのデータタブの* text-to-columns *機能を試してください – CallumDA

答えて

0

下記のコードを試して、必要に応じて調整してください。これは列Aのすべてのセルを通過し、セルの内容に表示される最初の番号の位置を検索します。その後、位置まで左部分は、列の列Bと休息に入れているC.

Sub split() 
Dim n As Long 
Dim m As Long 
Dim EndOfNamePos As Integer 
Dim SrcText As String 
Dim TrgName As String 
Dim TrgDate As String 

    For n = 1 To ThisWorkbook.Sheets("Sheet1").Range("A:A").End(xlDown).Row 

     SrcText = ThisWorkbook.Sheets("Sheet1").Cells(n, 1).Value 

     'Find first Number in the Source Column 
     For m = 1 To Len(SrcText) 
      If IsNumeric(Mid(SrcText, m, 1)) = True Then 
       EndOfNamePos = m 
       Exit For 
      End If 

     Next m 

     TrgName = Left(SrcText, EndOfNamePos - 1) 
     TrgDate = Right(SrcText, Len(SrcText) - EndOfNamePos + 1) 

     ThisWorkbook.Sheets("Sheet1").Cells(n, 2).Value = TrgName 
     ThisWorkbook.Sheets("Sheet1").Cells(n, 3).Value = TrgDate 

     TrgName = "" 
     TrgDate = "" 
     SrcText = "" 
    Next n 

End Sub 
0

これは、あなたがRegEx(正規表現)を使用して、探しているものを行います。これは最小限のループを必要とします

Public Sub SeparateStringWithRegEx() 
    Dim rng As Range 
    Dim RegEx As Object 
    Dim Match, Matches 
    Dim c 

    Set RegEx = CreateObject("VBScript.RegExp") 

    ' Change this to your range 
    With Sheet1 
     Set rng = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 1)) 
    End With 

    With RegEx 
     .Pattern = "^\D+" 
     .IgnoreCase = True 
     .Global = True 
    End With 

    For Each c In rng 
     Set Match = RegEx.Execute(c) 
     c.Offset(0, 1) = Trim(Match(0)) 
     c.Offset(0, 2) = Trim(Replace(c, Match(0), "")) 
    Next c 
End Sub 
関連する問題