- ベストアンサー
Excelで文字列を区切ってVBAで表示する方法についての質問
- ExcelのA列にスペース区切りのデータがありますが、それをC列とD列に分けて表示したいと思っています。しかし、A列のデータが不規則で個数もバラバラで空白も含んでいるため、うまく処理できません。C列以降は使用できる状態です。VBAのサンプルコードも提供されていますが、うまく動作しません。ExcelやVBAに詳しい方、助けてください。
- Excelでスペース区切りの文字列をC列とD列に分割して表示する方法が知りたいです。A列には不規則なデータが入っており、個数もバラバラで空白もあります。C列以降は使用可能です。VBAのサンプルコードを試したのですが上手く動作しません。ExcelやVBAに詳しい方にアドバイスをいただきたいです。
- ExcelのA列にスペース区切りのデータがあります。このデータをC列とD列に分割して表示したいと考えています。ただし、データの個数が不規則で空白も含まれるため、うまく処理できません。C列以降は使用可能です。VBAのサンプルコードも提供されていますが、動作しません。ExcelやVBAに詳しい方、助けてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Sub Sample4() Dim i As Long, tmp As Variant For i = 2 To 22 If Cells(i, "A").Value <> "" Then tmp = Split(Cells(i, "A").Value) Cells(i, "B").Resize(, UBound(tmp) + 1).Value = tmp End If Next End Sub
その他の回答 (3)
- end-u
- ベストアンサー率79% (496/625)
TextToColumnsメソッド([データ]-[区切り位置])を使うという選択肢もあります。 マクロ記録できますし、列一括処理も可能。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2012/5/9 ユーザー名 : end-u ' ' Range("A2:A22").TextToColumns Destination:=Range("C2"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=True, Other:=False End Sub
お礼
区切り位置 気がつきませんでした ありがとうございました やってみます
- nda23
- ベストアンサー率54% (777/1415)
Dim 正規表現 As Object Dim 項目集合 As Object Dim 項目個別 As Object Dim 行 As Long Dim 列 As Long '正規表現オブジェクトをインスタンス化する Set 正規表現 = CreateObject("VBScript.RegExp") '正規表現オブジェクトを設定する 正規表現.Global = True 正規表現.Pattern = "\S+" '行のループ For 行 = 2 To 22 'パターンに一致するものを収集する Set 項目集合 = 正規表現.Execute(Cells(行, 1)) '列位置を初期化する 列 = 2 '収集した要素を一つずつ処理する For Each 項目個別 In 項目集合 '列位置を更新する 列 = 列 + 1 '新しい列に項目をセットする Cells(行, 列) = 項目個別.Value Next Next 今回はSplitでもよいのですが、空白が2個以上あったり、 特殊な法則で区切る場合は使い難いため、正規表現を 使ってみました。 Globalプロパティは全ての一致する部分を処理させる ので、Trueを指定します。 Patternプロパティは「空白でない文字の連続」という 意味です。"\S"は非空白を示し、"+"は1文字以上の連続を 表します。 http://msdn.microsoft.com/ja-jp/library/cc392487.aspx 尚、Splitで作った配列を処理する時にもFor Eachは使えます。 Dim X As Variant For Each X In Temp Next
- picknic
- ベストアンサー率25% (33/132)
Dim i, j As Long Dim tmp() As String For i = 2 To 22 tmp = Split(Cells(i, 1), " ") For Each a In tmp Cells(i, j + 2) = a j = j + 1 Next Next i
お礼
上手くいきました ありがとうございました