
一つのセルに複数の内容が半角スペースで区切られて記載されているデータがあります。
これを半角スペースで分割することは可能でしょうか?
例: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 …】の様な画像ファイル名」となりますが質問ではシンプルにさせていただきました。

No.4ベストアンサー
- 回答日時:
A列のセルをB列以降にスペースを区切り位置として分割したいなら、区切り位置の機能でウィザードの最後で表示先のセルをたとえばB1セルのようにB列のセルを指定すれば簡便に分割処理することができます(繰り返し行う操作なら、この操作をマクロに記録すればボタンをクリックするだけで処理可能です)
どうしても関数で実行したいなら、以下のような関数をB1セルに入力して右方向及び下方向にオートフィルコピーすることになります。
=TRIM(MID(SUBSTITUTE($A1," ",REPT(" ",500)),500*COLUMN(A:A)-499,500))
回答頂きました関数を用いましたところ希望通りの結果になりました。ありがとうございます!REPT関数を始めとした諸関数を組み合わせてこの様な処理も行えるのか、と目からウロコです。
No.7
- 回答日時:
次のURLと殆ど同じと考えられます。
http://oshiete.goo.ne.jp/qa/8653686.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以降のバージョンが対象です。
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
回答・細かなご説明有り難うございます。参考になりました。いただいたマクロが実際にはどういった動作をしているのか、一つ一つマスターし自分の知識にさせていただきたく思います。
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
細かなコード・カスタマイズまでを考慮いただいたご説明ありがとうございます。非常に参考となりました。また、自分自身の知識として非常にためになりました。
No.2
- 回答日時:
分割だけであればNo1の方のようにエクセルの「データ→区切り位置」から「スペース」で分割できます。
「元のデータを残したまま」スペースで分割したいということであればVBAで処理してください。
■コードの登録
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
『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
No.1
- 回答日時:
データ→区切り位置で一度にできそうですが、どういった点がうまくいかないのですか?
むしろ、失敗の余地がなさそうなんですが。
この回答への補足
言葉が足らず失礼いたしました。
「データ>区切り位置」という手作業を行わず、関数等を用いてA列に入力することで自動的に区切られ表示されるようにしたいのです。
実際にはExcelで作成されているシステムの一部分についての質問となり、他にも処理しなければいけない部分があるため、少しでも手作業の手間を省きたいというのが主目的となります。
(質問末尾「BS列で記載の内容~」というのは実際にはBR列以前にも様々なデータが入力されてあり、それの結果がBS列以降(今回質問の部分)につながるからです。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) 名前と日付が一致する箇所にフラグを立てる関数が知りたいです 4 2022/08/11 02:24
- Visual Basic(VBA) 特定の文字を条件に指定範囲のデータを貼り付けるVBA 3 2023/01/15 06:14
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) Power Query でのデータの一括修正について 2 2022/05/10 02:00
- Visual Basic(VBA) 指定した文字から指定した文字のスペースまでを削除するVBAの構文について 6 2022/07/24 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】並び替えの範囲が、...
-
Excel2017 フィルタ昇順並びがA...
-
Excelで並び替え後にア行...
-
文字列を比較し、相違するフォ...
-
エクセルで行の高さ及び列幅の...
-
【Excel】数式の参照範囲を可変...
-
【Excel VBA】指定した行の最大...
-
EXCELで日付を比べ3か月以内の...
-
基準日以前のデータを範囲を指...
-
エクセル関数について
-
オートフィルタ後のデータから...
-
エクセル VBA 行間隔を飛ばした...
-
Excelで複数列のデータを1列に...
-
エクセル関数のSUMPRODUCTにつ...
-
データの整理(VBA)
-
EXCELの関数で大なり記号を複数...
-
excel / ピポッド 日数を出したい
-
VBA 配列で型がエラーになります。
-
時間の重複チェック
-
プルダウンに【なし、平均、デ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel2017 フィルタ昇順並びがA...
-
エクセルで行の高さ及び列幅の...
-
Excelで並び替え後にア行...
-
【Excel VBA】指定した行の最大...
-
エクセルの時刻のカウントが出...
-
オートフィルタ後のデータから...
-
急ぎ!色のついたセルを非表示...
-
EXCELで日付を比べ3か月以内の...
-
基準日以前のデータを範囲を指...
-
エクセル VBA 行間隔を飛ばした...
-
excel / ピポッド 日数を出したい
-
プルダウンに【なし、平均、デ...
-
マクロで行の高さを設定したい
-
エクセル関数について
-
文字列を比較し、相違するフォ...
-
EXCEL 最終行のデータを他のセ...
-
VBA 複数行の検索及び抽出
-
検索条件に合うセルの個数を数...
-
VBA 配列で型がエラーになります。
-
行の一番右のデータセルと同じ...
おすすめ情報