Excelで任意の文字列を半角スペースで分割する方法

このQ&Aのポイント
  • Excelで半角スペースで区切られている文字列を分割する方法について解説します。
  • 手動でのデータ分割が手間だったりミスが発生する場合、Excelの関数を利用して自動化することが可能です。
  • バラバラな項目数や文字数でも、find関数やmid関数などを組み合わせることで簡単に分割することができます。
回答を見る
  • ベストアンサー

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 …】の様な画像ファイル名」となりますが質問ではシンプルにさせていただきました。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

A列のセルをB列以降にスペースを区切り位置として分割したいなら、区切り位置の機能でウィザードの最後で表示先のセルをたとえばB1セルのようにB列のセルを指定すれば簡便に分割処理することができます(繰り返し行う操作なら、この操作をマクロに記録すればボタンをクリックするだけで処理可能です) どうしても関数で実行したいなら、以下のような関数をB1セルに入力して右方向及び下方向にオートフィルコピーすることになります。 =TRIM(MID(SUBSTITUTE($A1," ",REPT(" ",500)),500*COLUMN(A:A)-499,500))

marumitorimi
質問者

お礼

回答頂きました関数を用いましたところ希望通りの結果になりました。ありがとうございます!REPT関数を始めとした諸関数を組み合わせてこの様な処理も行えるのか、と目からウロコです。

その他の回答 (6)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.7

次のURLと殆ど同じと考えられます。 http://okwave.jp/qa/q8653686.html 数字の区切りが"AA"か" "の違いであり読み換えれば応用可能です。 違いは先頭に"AA"の代わりの" "が無いので先頭のみ別処理すれば良いでしょう。 B1=IF(A1="","",LEFT(A1,FIND(" ",A1)-1)) C1=IFERROR(MID($A1,FIND("/",SUBSTITUTE($A1," ","/",COLUMN(A1)))+1,IFERROR(FIND("/",SUBSTITUTE($A1," ","/",COLUMN(B1)))-FIND("/",SUBSTITUTE($A1," ","/",COLUMN(A1)))-1,LEN($A1))),"") C1セルをC列から右に必要数コピーします。 更にB1から右側の必要列まで選択して下へ必要数コピーすれば完了です。 但し、Excel 2007以降のバージョンが対象です。

marumitorimi
質問者

お礼

参考ページの紹介に加え今回の質問に沿った形での回答までいただき誠にありがとうございます。参考になりました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

こんばんは! すでに色々回答は出ていますが、一番簡単な方法はデータの「区切り位置」だと思いますが 他の方法をご希望だというコトですので、VBAでやってみました。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, lastCol As Long, myArry For i = 2 To Cells(Rows.Count, "BS").End(xlUp).Row lastCol = Cells(i, Columns.Count).End(xlToLeft).Column If lastCol > 71 Then Range(Cells(i, "BT"), Cells(i, lastCol)).ClearContents End If If InStr(Cells(i, "BS"), " ") Then myArry = Split(Cells(i, "BS"), " ") For k = 0 To UBound(myArry) Cells(i, k + 72) = myArry(k) Next k End If Next i End Sub 'この行まで ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。m(_ _)m

marumitorimi
質問者

お礼

回答・細かなご説明有り難うございます。参考になりました。いただいたマクロが実際にはどういった動作をしているのか、一つ一つマスターし自分の知識にさせていただきたく思います。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.5

(1)対象のシートを右クリック→コードの表示 (2)以下のVBAコードを記述 (3)A列に文字を入力・変更 以降(3)を行うたびにオフセットした列以降に分割した文字が入力されます。 ■注意 新規で入力した場合は良いのですが、変更した場合 特に分割後の項目数が減る場合、単純に区切った文字を入力すると以前入力されていた項目が残ります。 出力する前にオフセットした列から列の最大列までの値を削除する処理を加えております。 不要であればコード内の「flag = 1」を「flag = 0」としてください。 データが入っている列の列記号にあわせて「tar_col = "A"」を変更してください。 画像ではA列にデータが入っているため現在は「A」を対象にしています。 ■VBAコード Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long Dim j As Integer Dim col_ost As Integer Dim tar_col As String Dim word On Error GoTo era: 'データ列の列記号 tar_col = "A" '列のオフセット距離 col_ost = 1 'セルの内容を毎回削除する場合は1、残す場合は0 flag = 1 If Target(1).Column <> Range(tar_col & "1").Column Then Exit Sub Application.EnableEvents = False For i = 1 To Target.Count word = Split(Target(i), " ") If flag = 1 Then Range(Target(i).Offset(0, j + col_ost), Cells(Target(i).Row, Columns.Count)).ClearContents For j = 0 To UBound(word) With Target(i).Offset(0, j + col_ost) .Value = word(j) If .Text <> word(j) Then .NumberFormatLocal = "@" .FormulaR1C1 = word(j) End If End With Next j Next i era: Application.EnableEvents = True End Sub

marumitorimi
質問者

お礼

細かなコード・カスタマイズまでを考慮いただいたご説明ありがとうございます。非常に参考となりました。また、自分自身の知識として非常にためになりました。

  • chonami
  • ベストアンサー率43% (448/1036)
回答No.3

いや、元のデータを残したいなら区切り位置の3番目のダイアログで表示先に別のセルを指定すれば元のデータは残ったまま区切ったデータが表示されますよ。

marumitorimi
質問者

補足

言葉足らずで申し訳ございません。補足ありがとうございます。今回は「自動的に分割できないか」の部分をメインとして質問させて頂いておりました。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

分割だけであればNo1の方のようにエクセルの「データ→区切り位置」から「スペース」で分割できます。 「元のデータを残したまま」スペースで分割したいということであればVBAで処理してください。 ■コードの登録 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_tejyun.html 『VBAコード(プログラム)の登録』 の手順で以下のVBAコードを登録してください。 ■使用方法 「対象とするセル範囲を選択した状態」で表示→マクロから「選択範囲を空白で分割」を選び実行してください。 ■処理内容について 現在は画像のように隣の列を開始列として分解した文字を出力しています。 また必要な時に、処理の中で「01」が「1」とならないようにセルの書式を文字列へ変更する処理が含まれています。 出力先は同じ行のオフセット列へ分割出力します。 VBAコード内の「col_ost = 1」において「1」を変更することで出力先のオフセット量を変更することが出来ます。 A2~A4セルが選択されている場合、列のオフセット距離が「1」である場合、 B2~B4を開始列として右側へ分割した数だけ出力されます。 B列を飛ばしてC列から右へ出力する場合は「col_ost = 2」としてください。 ■VBAコード Option Explicit Sub 選択範囲を空白で分割() Dim i As Long Dim j As Integer Dim col_ost As Integer Dim word '列のオフセット距離を入力 col_ost = 1 For i = 1 To Selection.Count word = Split(Selection(i), " ") For j = 0 To UBound(word) With Selection(i) .Offset(0, j + col_ost).Value = word(j) If .Offset(0, j + col_ost).Text <> word(j) Then .Offset(0, j + col_ost).NumberFormatLocal = "@" .Offset(0, j + col_ost).FormulaR1C1 = word(j) End If End With Next j Next i End Sub

marumitorimi
質問者

お礼

ありがとうございます。VBAの参考サイト・細かなご説明をいただき大変参考となりました。また、今後の知識としてためになりました。

  • chonami
  • ベストアンサー率43% (448/1036)
回答No.1

データ→区切り位置で一度にできそうですが、どういった点がうまくいかないのですか? むしろ、失敗の余地がなさそうなんですが。

marumitorimi
質問者

補足

言葉が足らず失礼いたしました。 「データ>区切り位置」という手作業を行わず、関数等を用いてA列に入力することで自動的に区切られ表示されるようにしたいのです。 実際にはExcelで作成されているシステムの一部分についての質問となり、他にも処理しなければいけない部分があるため、少しでも手作業の手間を省きたいというのが主目的となります。 (質問末尾「BS列で記載の内容~」というのは実際にはBR列以前にも様々なデータが入力されてあり、それの結果がBS列以降(今回質問の部分)につながるからです。)

関連するQ&A

  • EXCELで、文字列を任意の文字数毎に分割するには

    ≪やりたい内容と条件≫ ◆EXCELで、文字列を任意の文字数毎に分割したいです。 ◆文字列は、全角・半角・記号を含みます。 ◆1つのセルが半角80桁という制限があり、その上限を超えると、右の次のセルに流し込まれるようにしたいです。(A1は元の文字列1500桁くらい、以降B1,C1,D1,E1・・・という具合に流し込み) ≪試した内容≫ MIDB関数を見つけ挑戦しましたが、1つ目のセルはうまくいきますが、その後が出来ません。例えば、文字列が「・・・・・・abcあいうえお」となっていた場合、B1は「・・・・・・abcあいう」、C1は「 お」(「お」の前は、半角スペース)となります。 何かよい方法はないでしょうか。 一度に出来ないようであれば、A1-B1で残りの文字列が表示できれば、それ以降はまた関数を入れて一つ一つやっていきたいと思っています。 よろしくお願いいたします。

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

    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文字

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

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

  • EXCEL 文字列分割について

    EXCEL2003を使用しています。 1つのセルに文字列が入力されており、 それを決まったバイト数ずつ別のセルに分割したいと考えています。 例)A1の文字列を6バイトずつ分割したい A1:東京都文京区 ↓ B1:東京都 C1:文京区 これを実現する為に B1に「=LEFTB(A1,6)」 C1に「=MIDB(A1,7,6)」という数式を入力しました。 A1の文字列が全角のみ(または半角のみ)なら 上記の数式で問題ないと思うのですが、 分割対象の文字列は全角と半角が混ざっており、 例えばA1の値が 「a東京都文京区」 というようなものだった場合、 B1:a東京 C1:文京 となり、元の文字列にある「都」の文字が消えてしまいます。 元の文字列が上記の様な場合には B1:a東京 C1:都文京 というように値が返されるようにしたいのですが、 どのように実現したらよいでしょうか?

  • EXCELで文字列内のスペースの抽出

    EXCEL2000を使用しています。 A列に文字列が300行ほど入力されています。 ある条件で、各文字列の先頭にスペース(空白)が0個~3個ついています。 いま、文字列の先頭にあるスペースの数をB列に表示させたいのですが、 どのような関数を使えば良いでしょうか。 ご存じの方、ご教授下さい。

  • エクセルで、半角文字列を抽出するには

    使用機種はXPでEXCEL2003です。 住所のデータ整理をしています。 地名の後の番地のみ半角数字(ハイフンも半角)で入力されており、その部分だけを別の列に移動させる作業です。 関数で、半角文字列だけを抽出することはできますか? left関数を使おうとも思いましたが、文字数がバラバラなので、難しいと思いました。 私は、一つひとつコピー→ペーストをするしか思いつかないほどの初心者です。 どうぞよろしくお願いいたします。

  • 画像のようなエクセルのA~D列に任意文字列が入っています。

    画像のようなエクセルのA~D列に任意文字列が入っています。 E1に 「A1(半角スペース)+B1~D1のいずれかのうちの1つ」 を出力させたいのですが、ブランクの欄もあるので =IF(C2="",B2,C2) など入力してみたのですが、うまくいきません。 最終的に 「A1(半角スペース)+B1~D1のいずれかのうちの1つ」 を表示させることはできないでしょうか? 詳しい方、アドバイスお願いいたします。

  • EXCEL 文字列間にスペース

    ひとつのセルにある文字列を入力すると自動的にその文字列の間にスペースが入る(たとえば『山田太郎』→『山田 太郎』)といったような関数か表示形式がありましたらおしえていただけないでしょうか。

  • EXCEL 文字列間にスペース

    ひとつのセルにある文字列を入力すると自動的に字間にスペースが入る(たとえば『小山田』→『小 山 田』)といったような関数か表示形式がありましたらおしえていただけないでしょうか。

  • Excelで半角スペースで区切られた文字を抽出

    ○○■△△△△△△△△△■×××■☆☆☆☆ 上記のような文字列がA1にある場合、△の部分だけをB1に取り出したい場合はどうすれば良いのでしょうか。できればVBAよりは関数だったほうが助かります。無理なVBAでも構いません。どうかよろしくお願いします。m(_ _ )m ■=半角スペース ○は1~2文字 △は10文字以内 ×は2~3文字 ☆は3~4文字

専門家に質問してみよう