一つのセルにあるデータを項目別に複数列に分割したい

このQ&Aのポイント
  • Excel 2010を使用している場合、一つのセルに複数の項目が詰まったデータを項目別に複数列に分割する方法を教えてください。
  • 必ずしも全てのデータが入っているわけではなく、欠けているデータもある場合にも対応した分割方法を知りたいです。
  • 画像付きで分割結果の例を添付しましたが、見づらいかもしれません。分割結果を出力する関数やマクロの使い方を教えていただけると助かります。
回答を見る
  • ベストアンサー

一つのセルにあるデータを項目別に複数列に分割したい

一つのセルにあるデータを項目別に複数列に分割したいです。 初歩な質問かも知れませんが教えて下さい。Excel 2010使用です。 一つのセルに「」に囲まれた項目別のデータが全て詰まっています。「」に囲まれた複数の文字列は項目名が書かれているのですが、これを分割し、列の先頭に項目名を付けて分割したいです。A2のセルから1列にデータが入っており、セル内にある項目は「郵便番号」「住所」「氏名」「電話番号」「誕生日」「血液型」。 これを分割していきたいのですが、必ずしも全てのデータが入っているわけではなく、データが欠けているものがあります。添付の2行目のような結果を出す関数やマクロなど、わかりましたらご教授いただけないでしょうか・・・。(画像が小さいため、A列とB~G列と分割しました。わかりづらくスミマセン。) たくさん調べたのですが、なかなか当てはまるものが見つからず、お力を貸してください。。

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

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

こんにちは! 画像通りB列以降の項目は「郵便番号」のように「」で囲まれているという前提です。 VBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) 尚、画像を見る限りにおいては「 の前に半角スペースがあるように見えますので、 「 の前には半角スペースがあるという前提でのコードです。 Sub Sample1() Dim i As Long, j As Long, k As Long, myArry For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row myArry = Split(Cells(i, "A"), " ") For k = 0 To UBound(myArry) For j = 2 To 7 If InStr(myArry(k), Cells(1, j)) > 0 Then Cells(i, j) = Replace(myArry(k), Cells(1, j), "") End If Next j Next k Next i ActiveSheet.Columns.AutoFit End Sub ※ もし、「 の前にはスーペースがなく、連続して文字が入力されている場合は ↓のコードでマクロを試してみてください。 Sub Sample2() '「 の前に半角スペースがない場合 Dim i As Long, j As Long, k As Long, myArry Range("A:A").Copy Range("H1") Range("H:H").Replace what:="「", replacement:=" 「", lookat:=xlPart For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row Cells(i, "H") = Trim(Cells(i, "H")) myArry = Split(Cells(i, "H"), " ") For k = 0 To UBound(myArry) For j = 2 To 7 If InStr(myArry(k), Cells(1, j)) > 0 Then Cells(i, j) = Replace(myArry(k), Cells(1, j), "") End If Next j Next k Next i Range("H:H").Clear ActiveSheet.Columns.AutoFit End Sub こんな感じではどうでしょうか?m(_ _)m

tory815
質問者

お礼

ばっちり出来ました!!感激です! VBAで色々なことが可能になるんですね・・! 助かりました!!ありがとうございます~!!

その他の回答 (1)

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

>たくさん調べたのですが、なかなか当てはまるものが見つからず、お力を貸してください。。 文字列の切り出しを行うにはMID関数が有効です。 =MID(元の文字列,開始位置,文字数) 開始位置はFIND関数で検出します。 =FIND(検索文字列,元の文字列,検索開始位置) また、検索時にエラーが発生したとき代替の値を指定するにはIFERROR関数が有効です。 =IFERROR(数式,代替値) 更に、項目名を除くにはLEN関数も必要です。 =LEN(項目名) B2=IFERROR(MID($A2,FIND(B$1,$A2)+LEN(B$1),IFERROR(FIND("「",$A2,FIND(B$1,$A2)+1)-FIND(B$1,$A2)-LEN(B$1),LEN($A2))),"") B2セルを右へG2セルまでコピーし、そのまま、下へ必要数コピーすれば良いでしょう。 貼付画像はExcel 2013で検証した結果ですが、Excel 2007以降のバージョンで同様な結果になるはずです。

tory815
質問者

お礼

関数でバッチリ出来ました~! わたしは全く応用がわからず、本当に助かりました!! ありがとうございます!

関連するQ&A

  • エクセルの1シートを項目別に別シートへ分ける方法

    エクセル2010で1シートのデータを項目別に別シートへ自動的に分割する方法で困っています。 検索するとマクロを使うと書いていますが、マクロはほとんど使ったことが無いのもあって、わかりませんでした。 シート1 A列(日付8ケタ+商品番号6ケタ) B列(売上額) 20130515000004           300 20130515000006           100 20130518000004           300 20130519000001           500 20130519000004           300 ・・・                   ・・・ をA列の日付部分上8ケタを使って日別にシートを分け、 シート名をuriage20130515(uriageと日付8ケタ)という名前にしシート名+CSV形式で保存したいです。 シート2 シート名:uriage20130515 A列         B列 20130515000004 300 20130515000006 100 シート3 シート名:uriage20130518 A列         B列 20130518000004 300 シート4 シート名:uriage20130519 A列         B列 20130519000001 500 20130519000004 300 このように自動で別シートに分割した上で、シート名CSV形式で保存まで自動でできるとありがたいです。 自動化できるならシートを分割するマクロ、シート名でCSV保存するマクロが一つのマクロになっていても、分かれていてもOKです。 このようなことはできますか? よろしくお願いします。

  • Excelで同一セル内に入力されているデータを他のセルに分割したい

    こんにちは。 宜しくお願い致します。 エクセルで同一セル内に、セル内改行で1~6列ほどのデータが入力されています。 A1セル~A100セル…という風に、縦にデータが入力されていて、それぞれのセルにセル内改行を含み、データが入力されているイメージです。 それぞれのセル内のデータを… 例えば、A1セル内に5行入力されていたら、A2セルから入力されている行数分(ここでいうと5行)挿入し、それぞれにデータを分割して入力させたいと思っています。 以下のセルも同様に、挿入→分割といった感じで全データを分割させたいのです。 OKWave内でもチェックして、 http://okwave.jp/qa1927817.html?ans_count_asc=2 や http://okwave.jp/qa4216384.html など、近いものはいくつか見つけたのですが、ピッタリのものが見つからず、マクロの編集もよくわからなかったのでこちらで質問させてもらいました。 どなたか申し訳ありませんが、教えていただけますか? 宜しくお願い致します。

  • エクセルで項目ごとに新しい別のシートにしたい

    エクセルで名簿を作成しています。 C列に生徒番号、D列に氏名、E列にクラスがAからFまでランダムに入っています。 この名簿を新しいファイルに、クラスごとに別のシートにしたいです。 できればシート名も「A」「B」となっていれば助かります。 A,B列にもデータが入っていますが、今回は生徒番号、氏名、クラスのみの ファイルにしたいです。 良い方法を教えてください。よろしくお願いします。

  • セル内の2行をそれぞれ別のセルにコピーするマクロ

    A列にデータが入力されていたとします。 そのデータのうち、複数のセルで改行されて2行になっています。 改行されているセルをサーチし、1行目をB列のセルに、2行目をC列のセルに分割してコピーしたいと思います。 この様な方法は、マクロで可能でしょうか。 適切な関数があれば、ご教授いただきたいと思います。

  • 別シートに空白セルを詰めデータを自動コピー

    excel2013で、【sheet1】の列にあ~わ行まであり、行にそれぞれ氏名を入れています。 グループ1とグループ2にページを上下に分けていて、それぞれ合計50名です。 行は各20行まで用意していますが、行によっては空白セルもあります。 この【sheet1】のデータを【sheet2】の1~100番まで番号を振った隣のB列に空白セルを詰めながら氏名データを並べたいのですが、マクロで出来るでしょうか? ちなみに空白セルを詰めるマクロは下記コードで確認しています。 Sub Macro() Selection.SpecialCells(xlCellTypeBlanks).Select Selection.Delete Shift:=xlUp End Sub シート間のデータ移動の方法も分かるのですが、2つをどう繋ぎ合わせればいいか分かりません。 簡単ですが、sheet1の参考画像も添付していますので、アドバイス宜しくお願いします。

  • 複数列のセル内改行位置でセルを分割する方法

    エクセルVBAで下記のように複数列にセル内改行があった時に 1改行を1行として分割をしたい場合、 【A列】 a1作業日(項目名) a2(改行あり) 2013/4/1 2013/4/3 a3(改行なし) 2013/4/1 a4(改行あり) 2013/4/1 2013/4/2 【B列】 b1終了日(項目名) b2(改行あり) 2013/4/2 2013/4/10 b3(改行なし) 2013/4/2 b4(改行あり) 2013/4/15 2013/4/20          ↓    A 列 B列    作業日 終了日 1行目 2013/4/1 2013/4/2 2行目 2013/4/3 2013/4/10 3行目 2013/4/1 2013/4/2 4行目 2013/4/11 2013/4/15 5行目 2013/4/16 2013/4/20 としたいとき、何か良い方法はありますでしょうか? よろしくお願いいたします。

  • マクロの記録で作成したマクロがデータが代わると誤動作する。

    マクロの記録で作成したマクロがデータが代わると誤動作する。 エクセルファイルにてA列からJ列までデータがあります。 行数は2,000行です。データは全て半角です。 A列の値が 1=入庫 2=出庫 3=戻入 と全て置換 B列の値が 1=社内品 2=社外品 3=受入 と全て置換。 でこのB列が3で受入に置換えたら その隣のA列の値を 受入に置き換えたい。 さらに A列の値が置換え後の入庫と戻入場合はその行のJ列の値を切り取り、K列に貼付をし A列の値が置換え後の出庫の場合はその行のJ列の値を切り取り、L列に貼付をしたいです。 マクロの記録で行いましたが、 いったんデータを全て消して別データを貼り付けしたらA列B列の置換えは正常ですが B列が3の場合にA列を再置換えと、J列の値を切り取り、K列、L列への貼付が 誤動作します。 (別データは雛形は同じです。入力規則も同じですがデータは変わります。  例:セルA1のデータは1、 新しいデータはセルA1は2 等) マクロの記録中では、並べ替えでソートし上記条件でセルを選択しコピペをしました。 並べ替えは2回です。 マクロ文を見ると、セル名がずらずら並んで、セル番号が指定されてます。 (マクロ記録中に選択したセル番号が全部記録されてます。) 文を見ると、上記条件で置換えやコピペでなく このセルはこう置換え、このセルはこうコピペのように読めます。 これでは、データが代わったら、別の動きになるのかな?と思いました。 こういう場合はマクロではどうやって記録すればいいでしょうか?

  • エクセルのセル内を分割できますか(><)!?

    こんにちは! タイトルの通りなのですが エクセルのセル内の数字を分割したいです。(金額とかそういうものではなく、ただの番号ですが桁数は多いものです) 分割というより、全部のセルの先頭部分の数字だけ削除できたら もっと嬉しいのですが そのようなことはできるでしょうか? 手作業をするとしたら データ数が1000以上あるので 死んでしまいそうです・・ お願いします!どなたか教えてください(><)!

  • 特定のセルの内容を別のブックに記録

    特定のセルの内容を別のブックに記録 エクセルでマクロを作っているのですが 特定のセル(通し番号の入ったセル)のデータを、別のブック(通し番号データ)に記録 常に同じブックに記録し、ブックの場所は絶対参照で指定 毎回同じセルに上書きでなく、データの入っている次のセルに書き込む 読み込む時に、最大値または降順に並べ替えた先頭に+1して値を特定のセル(通し番号の入ったセル)に書き込む マクロが作れなくて困っています どなたかマクロに詳しい方教えてください 通し番号の入ったセルは、Seet1にあり複数セル結合で1つのセルになっていて A1などと表示される場所には、「通し番号」と書いてあります 最終的に「新規作成」のコマンドボタンをエクセルシートに作って コマンドボタンに登録する予定です 現在使っているエクセルは2007ですが、最終的にはOfficeXP,2003,2007,2010で使えるようにしたいです

  • Excel データの最大値と2番目の項目名を表示させたい

    例えば、 氏名 項目1 項目2 項目3 A   150  800  200 B   200  540  620 C   190  300  860 のようなデータがありAさんの行のデータの最大値の項目名を表示させたいのです。この場合だとAさんのデータの最大値は800なので項目2、2番目は200なので項目3と個人別で他のセルに表示させたいのですが。宜しくお願いします。

専門家に質問してみよう