アプリ版:「スタンプのみでお礼する」機能のリリースについて

A列にスペース区切りのデータがあります
これをC列 D列 に分けて表示したいのですが
A列のデータが不規則(個数がバラバラ 空白もある)
と、なった場合 なかなか上手くいきません
C列以降は使用可能です(空いてます)
その道の方 お助けたください
元のVBAは

Sub Sample3()
Dim i As Long, tmp As Variant
For i = 2 To 22
tmp = Split(Cells(i, 1), " ")
Cells(i, 2) = tmp(0)
Cells(i, 3) = tmp(1)
Next i
End Sub

です
お手数ですが宜しく
お願いします

A 回答 (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
    • good
    • 0
この回答へのお礼

上手くいきました
ありがとうございました

お礼日時:2012/05/09 23:20

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
    • good
    • 0
この回答へのお礼

区切り位置 気がつきませんでした
ありがとうございました
やってみます

お礼日時:2012/05/09 23:23

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 …

尚、Splitで作った配列を処理する時にもFor Eachは使えます。
Dim X As Variant
For Each X In Temp
Next
    • good
    • 0

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
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!