(VBA) 複数スペースで文字列を分割する

このQ&Aのポイント
  • VBAを使用して、文字列中の複数のスペースで文字列を分割する方法について教えてください。
  • 複数の半角スペースで文字列を分割するVBAのコードを教えてください。
  • 文字列中の複数のスペースで文字列を分割するExcel VBAの方法を教えてください。
回答を見る
  • ベストアンサー

(VBA) 複数スペースで文字列を分割する

文字列中の文字を 複数の半角スペースで分割するコードを教えて下さい。   (半角スペースの数は、2個以上一定ではありません。) 但し、文字列中には複数スペース群が複数回ある場合がありますが  分割は、最初の複数スペース群とします。 例えば、 「SetOne_Vol xn xo サンプル」 の場合は、 「SetOne_Vol」と「xn xo サンプル」に分割 (分割した最初のスペース群の次にあるスペース群は何も変更なく   同数のスペースを書き出します。) 但しセミコロン「;」やコロン「:」で始まる 文字列は対象外でそのまま分割せずに書き出します。 添付画像を参照ください。   A: 元の文字列 B: 分割文字列(左側) C: 分割文字列(右側) ---------------------------------- Office_2019 / Windows10

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1614/2453)
回答No.4

> エクセルの行に何も文字列が無い改行だけのセルが複数存在しています 以下で試してみて下ささい。 Sub Test() Dim i As Long Dim Temp As Variant Dim mStr As String For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row mStr = WorksheetFunction.Trim(Replace(Cells(i, "A").Value, vbLf, "")) Select Case Left(mStr, 1) Case ";", ":", "" Cells(i, "B").Value = Cells(i, "A").Value Case Else Temp = Split(mStr, " ") Cells(i, "B").Value = Temp(0) If LBound(Temp) <> UBound(Temp) Then Cells(i, "C").Value = Mid(Cells(i, "A").Value, InStr(Cells(i, "A").Value, Temp(1))) End If End Select Next End Sub

NuboChan
質問者

お礼

No.4のコードで改行だけのセルも上手く処理できました。 少し、本物のDATAで試用運転してみます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率65% (1614/2453)
回答No.3

Case ";", ":" の後の Cells(i, "B").Value = Cells(i, "A").Value が抜けてました。

NuboChan
質問者

補足

NO2,No3を受けてコードを修正しましたが、 同じエラーが以下のコードで出ます。 Cells(i, "B").Value = Temp(0) ’以下修正済みコード--------------------- Option Explicit Sub Test() Dim i As Long Dim Temp As Variant For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row Select Case Left(Cells(i, "A").Value, 1) Case ";", ":" Cells(i, "B").Value = Cells(i, "A").Value Case Else Temp = Split(WorksheetFunction.Trim(Cells(i, "A").Value), " ") Cells(i, "B").Value = Temp(0) Cells(i, "C").Value = Mid(Cells(i, "A").Value, InStr(Cells(i, "A").Value, Temp(1))) End Select Next End Sub

  • kkkkkm
  • ベストアンサー率65% (1614/2453)
回答No.2

失礼No1は間違えましたm(__)m Sub Test() Dim i As Long Dim Temp As Variant For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row Select Case Left(Cells(i, "A").Value, 1) Case ";", ":" Case Else Temp = Split(WorksheetFunction.Trim(Cells(i, "A").Value), " ") Cells(i, "B").Value = Temp(0) Cells(i, "C").Value = Mid(Cells(i, "A").Value, InStr(Cells(i, "A").Value, Temp(1))) End Select Next End Sub

  • kkkkkm
  • ベストアンサー率65% (1614/2453)
回答No.1

以下で試してみてください。 Sub Test() Dim i As Long Dim Temp As Variant For i = 2 To Cells(Rows.Count, "A").Row Select Case Left(Cells(i, "A").Value, 1) Case ";", ":" Exit For End Select Temp = Split(WorksheetFunction.Trim(Cells(i, "A").Value), " ") Cells(i, "B").Value = Temp(0) Cells(i, "C").Value = Mid(Cells(i, "A").Value, InStr(Cells(i, "A").Value, Temp(1))) Next End Sub

NuboChan
質問者

お礼

kkkkkmさん、今回も回答感謝します。 以下の行で「インデックスが有効範囲にありません」(実行時エラー 9)がでました。 Cells(i, "C").Value = Mid(Cells(i, "A").Value, InStr(Cells(i, "A").Value, Temp(1))) 多分、私の質問文で記載不足がある為と思われます。 (エクセルの行に何も文字列が無い改行だけのセルが複数存在しています。) なので以下のように改行だけにセルを判別しようとしましたが 今度は、以下で同じく改行だけのセルで同じエラーが出ます。 Cells(i, "B").Value = Temp(0) Sub Test() Dim i As Long Dim Temp As Variant Dim sCR As String Dim sLF As String Dim sCRLF As String sCR = vbCr sLF = vbLf sCRLF = vbCrLf For i = 2 To Cells(Rows.Count, "A").Row Select Case Left(Cells(i, "A").Value, 1) Case ";", ":", sCR, sLF, sCRLF Exit For End Select Temp = Split(WorksheetFunction.Trim(Cells(i, "A").Value), " ") Cells(i, "B").Value = Temp(0) Cells(i, "C").Value = Mid(Cells(i, "A").Value, InStr(Cells(i, "A").Value, Temp(1))) Next End Sub

関連するQ&A

  • (VBA)文字列の最後のスペース及びーを削除

    (VBA)文字列の最後のスペース及びーを削除 2021/09/01 11:35 offie_2019,windows10 ちょっと紛らわしい質問なのですが 例えば、E列に文字列が数十行あって  それぞれの文字列の最後が下記のよう場合  不必要なスペースと-を削除したいのですが何か方法がありますか ? (視認性を良くするために   半角又は全角のスペースを□で表します。) -は、半角若しくは全角 それぞれ削除した文字列をE列の横のF列に書き出す形式を考えています。 takano□- takano- takano□- takano□-□ takano. takano.□ takano□(vol.2)□- 不必要削除後は、 takano takano takano takano takano. takano. takano takano□(vol.2) 一例の参考画像を下記に添付しました

  • 文字列の分割

    PHP4で作成しています。 DBはMySQLです。 DBに名前が 山田(半角スペース×2)花子 すなわち 山田  花子 とある文字列を取り出して 山田と花子に分割したいのですが出来るでしょうか? 教えてください。 お願い致します。

    • ベストアンサー
    • PHP
  • Excelで任意の文字列を半角スペースで分割

    一つのセルに複数の内容が半角スペースで区切られて記載されているデータがあります。 これを半角スペースで分割することは可能でしょうか? 例:A列に 01 22 3 444 5555 6 77 888 999 111 222 333 11111 2 33 44 5555 これをB~J列に B C D E F G H I J 01 22 3 444 5555 6 77 888 999 111 222 333 11111 2 33 44 5555 という様に自動的に分割・入力させたいのですが可能でしょうか? ※添付イメージを参照ください。 A列の様な形式のデータを日常的に分割する必要があり、現在は[データ>区切り位置]で手動入力を行っているのですが手間がかかる上ミスをしてしまうこともありなんとか自動化したいのです。 項目数・文字数ともデータによりバラバラなため、単にfind関数やmid関数などを使っても上手く行かず、 アイデアをいただけますと助かります。何卒よろしくお願い致します。 ※実際の環境では「BS列に記載の内容をBT列以下に入力」「データの内容は【aaa.jpg bb_1.gif …】の様な画像ファイル名」となりますが質問ではシンプルにさせていただきました。

  • 【VBA】 文字列の中から指定の文字列を取り出す

    VBAで文字列から指定の文字のn番目からn+1番目までの文字列を取り出すことは可能でしょうか? A1セルに下記の文字列があった場合、「1番目の半角スペースから2番目の半角スペースまでの文字列」を取り出したいのです。 5 53 00 8R この場合、53を取り出したいというわけです。 また、可能でしたら「最後の半角スペースから文字列の最後まで」を取り出す方法も教えていただけるとありがたいです。 この場合は8Rとなります。 InStr関数を使えばできるかもと思ったのですが、できそうなものが思い浮かびません。 どなたか教えていただけませんでしょうか。 よろしくお願いいたしますm(_ _)m

  • splitを使ってスペース位置で文字列を区切りたい

    splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • セル内の文字をスペースによって分割するには?

    教えてください。 a1 に DX-09 1 SD-4 2 HPE-25 3 と、全角半角入り混じってスペースで区切られた文字が入っています。 これを、B1,C1,D1,E1,F1,G1にそれぞれDX-09,1,SD-4,2,HPE-25,3 と分割させたいです。 必ず半角スペースで区切られていますが、それぞれの文字の長さはマチマチです。 また、全角数字のも文字の長さは不定形です。 excel2010を使用しています。 お知恵を貸してください。

  • 文字列を分割したい。

    (A1)のセルにある文字列は、数個の文字列をスペース(半角)を開けて配置しています。 (2行目以下も同様の多種の文字列があります。) サンプル 「学校 東京 神奈川県横浜市 ABC アメリカ」 これを、 1行目のセルに関数を用いて、 (B1)に「学校」 (C1)に「東京」 (D1)に「神奈川県横浜市」 (E1)に「ABC」 (F1)に「アメリカ」 と表示したいのです。 関数で処理できましたら、その関数式を教えてください。 関数で処理できない場合は、マクロを教えていただければありがたいです。 よろしくお願いします。 ※エクセルの「区切り位置]機能を試しましたが、うまくいかないようです。

  • 文字列のスペースを抜く方法

    エクセルで文字列の間にスペースが入っている文字列のスペースの抜き方を教えてください。 神奈川県 横浜市 TEL ××× 山田 太郎←この文字列のスペースを抜きたいんです。 こんな感じで、複数行に渡ったデータなので区切ることが出来ませんでした。 よろしくお願いします。

  • 全角半角考慮した文字列分割

    A列           B列         C列 あいうえおかきくけこ  あいうえ      おかきくけこ アイウエオカキクケコ   アイウエオカキクケ  コ あいうえオかきくけこ   あいうえオ    かきくけこ A列に全角半角混在のテキスト項目があります。 B列、C列に以下のルールで分割したいのですが、Excel関数で 実現可能でしょうか?可能な場合は式をご教授して 頂けますでしょうか。宜しくお願い致します。 ※全角をバイト数指定で分割して文字化けしないように 全角半角を考慮して分割したいと考えております。 B列  A列9桁目が半角の場合は半角9文字 A列9桁目全角の場合は半角8文字(全角4文字)をB列へ C列  A列10桁目が半角の場合は、左端10桁目~半角9文字 A列10桁目が全角の場合は、左端9桁目~半角9文字

  • Excelの長い文字列をスペースで区切ってセルに?

    長い文字列が、スペースで区切られています。 このスペースを区切りにしてセルに分割する方法を教えてください。

専門家に質問してみよう