• 締切済み

TextToColumns

VBAで以下の文字列を各セルに分解したのですがTextToColumnsでは”2つ以上の空白”だけで分解できません。なにか方法はありませんか?よろしくお願いいたします [変換前] 2222 My name is Tokyo Male XXX@XXX [変換後]注意:”|”はセルの区切りとします。 2222|My name is Tokyo|Male|XXX@XXX

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

#1 です。 > スペースは2つ以上であって、いつも2つではないのです。 Split + Trim の応用でできると思いますよ^^ ' // 注)投稿上の都合で□は 半角SP n個(2つ以上)に置き換える Sub Sample2()   Dim s   As String   Dim vTmp  As Variant   Dim vRet() As Variant   Dim v   As Variant   Dim i   As Long      ' // テストデータ   s = "2222□□□My name is Tokyo□□□□□□□Male□□□□XXX@XXX"      ' // 必要なら全角SPを半角SPに置換して統一する   ' s = Replace$(s, " ", " ")   ' // 半角SP2つ区切りで配列化   vTmp = Split(s, Space$(2))   ' // 配列をループで回し、空の要素を取り除く   i = 0   For Each v In vTmp     v = Trim$(v)     If Len(v) Then       ReDim Preserve vRet(i)       vRet(i) = v       i = i + 1     End If   Next   ' // 結果   If i > 0 Then     Range("A1").Resize(, i).Value = vRet   End If End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>[変換前] 2222 My name is Tokyo Male XXX@XXX の辺の例示が良くわからない。 文章ではっきり書くこと。 私はこう解釈した。 2222の後に半角2スペース、Maleの後にも半角2スペース、その他の区切りは1スペースだと。 2スペースの後だけで分けたい。 ーー それなら、 一旦2スペースを¥(何でもよいが、残りの文字列で起こりそうにない文字。見つけにくければ組み合わせ文字列でも可?)に置換し、その¥で区切り位置の操作をした。 マクロの記録をとれば、記録できた。下記 Sub Macro1() Cells.Replace What:=" ", Replacement:="\", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _ :="\", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True End Sub ヒントになるでしょう。冗長なコードは省いてください。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 一般機能でも VBA でも   1. "2つ以上の空白" だけを何らかの文字に置換(例)$   2. 1. で設定した文字を区切り文字にする とすれば、できるんじゃないかな? VBA に限定すれば、Split 関数を使って配列にばらす方法もありますね。 ' // 注)投稿上の都合で□は半角SP2つに置き換える Sub Sample()   Dim s As String   Dim v As Variant   s = "2222□My name is Tokyo□Male□XXX@XXX"   v = Split(s, Space$(2))   Range("A1").Resize(, UBound(v) + 1).Value = v End Sub

kawasaks
質問者

補足

KenKen_SPさん、早急のお返事ありがとうございます。 スペースは2つ以上であって、いつも2つではないのです。 ために5つ、3つ、あるいは15つの時もあります。

関連するQ&A