2017-08-07 9 views
0

エクセルVBAでの番号とテキスト:スプリットは、私は次の形式で私のExcelの列に持って

Column A 
100 Test A 
200 Test B 
300 Test C 

私はExcelを開きたい、そのように2列に分けて数値やテキストを分割:

Column A Column B 
100   Test A 
200   Test B 
300   Test C 

誰でもこのことを教えてください。

+0

(例えば) 'スプリット(cellValue、 ""、1)'あなたは何を試してみましたか? –

+0

@TimWilliamsは2016関数に分割されていますか? –

+1

いいえ、それはVBAにあります.Office 2000では(QはVBAでタグ付けされています) –

答えて

3

は、私はあなたが物事をovercomplicate思う:あなたが使用することができます

Option Explicit 
Sub SplitCells() 
Dim totRange As Range 
Dim r As Range 
Dim splitted() As String 

Set totRange = Range("A1:A3") 
For Each r In totRange 
    splitted = Split(r.Value, " ") 
    r.Value = splitted(0) 
    r.Offset(0, 1).Value = splitted(1) & " " & splitted(2) 
Next r 
End Sub 
+0

はい、これは私に同じ解決策を提供し、プロセスも簡単にしました。ありがとう:) –

0

ティム・ウィリアムズ(Tim Williams)が提案したように、スプリット機能がおそらく最高です。 VBAを使用したくない場合は、組み込み関数Text to Columnsを試すことができます。 デリミタ等に応じて、この3列生成する: enter image description here

enter image description here

+0

良いオプションですが、文字と組み合わせテストを戻す必要があります。あなたは、すべての数字が同じ長さであれば、いつも非区切りの方法で行くことができます。 –

2

非VBAオプション

カラムBについて

=--left(A1,find(" ",A1)-1) 

及びカラムC

=right(A1,len(A1)-find(" ",A1)) 
ために

必要に応じてそれらをコピーします。なんらかの理由で、数値をテキストとして保持し、数値に変換しない場合は、最初の式から - を削除します。方程式の終わりにあなたの数字をテキストとして数値に変換する他の方法は+0または* 1です。基本的に数値をテキストとして数値演算に入力し、それを数値に変換します。

1

ありがとうございました。私はほぼ正常に動作するソリューションを持っています。

Private Sub SplitData() 
    Dim sourceSheetName As String 
    Dim sourceSheet As Worksheet 
    Dim lastRow As Long 
    Dim uboundMax As Integer 
    Dim result 

    On Error GoTo SplitterErr 
    sourceSheetName = "TestSheet" 
    If sourceSheetName = "" Then _ 
     Exit Sub 

    Set sourceSheet = Worksheets(sourceSheetName) 

    With sourceSheet 
     lastRow = .Range(sourceColumnName & .Rows.Count).End(xlUp).Row 
     result = SplittedValues(data:=.Range(.Cells(1, sourceColumnName), _ 
              .Cells(lastRow, sourceColumnName)), _ 
           partsMaxLenght:=uboundMax) 

     If Not IsEmpty(result) Then 
      .Range(.Cells(1, sourceColumnName), _ 
        .Cells(lastRow, uboundMax)).value = result 
     End If 
    End With 

SplitterErr: 
    If Err.Number <> 0 Then _ 
     MsgBox Err.Description, vbCritical 
End Sub 

Private Function SplittedValues(_ 
    data As Range, _ 
    ByRef partsMaxLenght As Integer) As Variant 

    Dim r As Integer 
    Dim parts As Variant 
    Dim values As Variant 
    Dim value As Variant 
    Dim splitted As Variant 

    If Not IsArray(data) Then 
     ' data consists of one cell only 
     ReDim values(1 To 1, 1 To 1) 
     values(1, 1) = data.value 
    Else 
     values = data.value 
    End If 

    ReDim splitted(LBound(values) To UBound(values)) 

    For r = LBound(values) To UBound(values) 

     value = values(r, 1) 
     If IsEmpty(value) Then 
      GoTo continue 
     End If 

     ' Split always returns zero based array so parts is zero based array 
     parts = VBA.Split(value, delimiter) 
     splitted(r) = parts 

     If UBound(parts) + 1 > partsMaxLenght Then 
      partsMaxLenght = UBound(parts) + 1 
     End If 

continue: 
    Next r 

    If partsMaxLenght = 0 Then 
     Exit Function 
    End If 

    Dim matrix As Variant 
    Dim c As Integer 
    ReDim matrix(LBound(splitted) To UBound(splitted), _ 
       LBound(splitted) To partsMaxLenght) 

    For r = LBound(splitted) To UBound(splitted) 
     parts = splitted(r) 
     For c = 0 To UBound(parts) 
      matrix(r, c + 1) = parts(c) 
     Next c 
    Next r 

    SplittedValues = matrix 


End Function 

しかし、次のようにコードのこの作品の出力は次のとおりです。

Column A Column B Column C 
100   Test  A 
200   Test  B 
300   Test  C 

だから、まだこれに取り組んでいます。何かがうまくいくかどうか教えてください。おかげ

関連する問題