• ベストアンサー

エクセル セル内改行を別セル抽出

画像のように、セル内で改行された文字を別のセルに分割して抽出したいのですが、どうしたらいいものでしょう。 一気には無理でも、できるだけ簡単に、早く、という感じで。 複数行、複数列が対象です。 区切り位置とかで試してみたのですが、一列一列しか処理できないことや、違う列に上書きされたりして、結構時間がかかるもので。 すいません、何卒よろしくお願いいたします!

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

添付図のように、Sheet1のA1からのデータをSheet2のA1から書き出します。改行は1セルに1回としています。 変換の手順は、  (1)区切りコード(CHAR(10))で前後に分ける。  (2)横に展開する。  (3)Sheet2では、2列右に進むごとにSheet1への参照を1列増やす 座標変換になります。 算式はセルA1とセルB1の2つがセットです。(aokiiさんの式を使わせてもらいました) セルA1:=IFERROR(LEFT(OFFSET(Sheet1!$A1,0,(COLUMN()-1)/2),FIND(CHAR(10),OFFSET(Sheet1!$A1,0,(COLUMN()-1)/2))),"") セルB1:=IFERROR(MID(OFFSET(Sheet1!$A1,0,INT((COLUMN()-1)/2)),FIND(CHAR(10),OFFSET(Sheet1!$A1,0,INT((COLUMN()-1)/2))),1000),"") 長い算式になってしまいました。ご辛抱を。回答をコピーしてください。2つのセル単位で右方向に必要分コピーし、行方向に必要分増やしてください。未入力対応しています。

toshuak
質問者

お礼

ありがとうございます!正直VBA自体もよく理解していなかったのですが、ちょっと数値を変えてみたらできました!すごいですね、助かりました。

その他の回答 (3)

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

#2です。 VBAでやってみた。 質問者の場合に合わせて、下記コードを部分修正できるようならやってみたら。 Split関数利用が目新しいだけで、あとはVBA的には初等的平凡。 例データ Sheet1 A1:B3 各セルには、どのセルも、2回のセル内改行とした (見た目3行です)。 "11 aa xxx" "22 bb yyy" "33 cc zzz" "44 dd uuu" "55 ee vvv" "66 ff www " 標準モジュールに Sub test01() ' 留意事項 'Sheet1の行数 任意 'Sheet1の列数 任意 ただし各行で同列数とする。 'Sheet1のセルの改行数 一定であること Dim s As Variant Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet3") lr = sh1.Range("A100000").End(xlUp).Row cr = Cells(2, 1000).End(xlToLeft).Column 'MsgBox lr & " " & cr '----- jj = 1 'Sheet3のA列へ For i = 1 To lr For J = 1 To cr s = Split(sh1.Cells(i, J), Chr(10)) 'MsgBox i & "行" & J & "列 " & "改行後行数" & UBound(s) + 1 For u = 0 To UBound(s) '0から始まる 'MsgBox i & "行" & jj & " 列 " & s(u) sh2.Cells(i, jj) = s(u) jj = jj + 1 'Sheet2で次列へ Next u Next J jj = 1 'Sheet3のA列へ Next i End Sub 実行結果 Sheet3 11 aa xxx 22 bb yyy 33 cc zzz 44 dd uuu 55 ee vvv 66 ff www 「Sheet1の各セルの改行数は一定であること」を、「バラバラもあり得る」、とすると、結果を(列的に)シートにどう出してよいか迷う。

toshuak
質問者

お礼

ありがとうございます!対応いただき助かりました。非常に参考になりました。次からVBAをもっと学習したいと思います!

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

質問者のれべるでは、エクセル関数でということだろうか。 基データがセル内改行が2行なら下記で出来そうだが、それを超えると、式が複雑になりすぎて、やる気が出ない。 VBAでやるなら、コード行数は増えるにしても可能だろうと思う。 Sheet1のA,B列の例 2列3行分の例示  シートセル範囲をコピーして貼り付けると、変な様子になるが、状態は判りますね。質問の通りで、1せる行分増やしただけ。 "11 <--個の箇所でセル内改行あり。以下同様。 aa" "22 bb" "33 cc" "44 dd" "55 ee" "66 ff" ーーー Sheet2に行って A1セル =MID(Sheet1!A1,1,FIND(CHAR(10),Sheet1!A1)-1) B1セル =MID(Sheet1!A1,FIND(CHAR(10),Sheet1!A1)+1,LEN(Sheet1!A1)-FIND(CHAR(10),Sheet1!B1)) C1セル =MID(Sheet1!B1,1,FIND(CHAR(10),Sheet1!B1)-1) D1セル =MID(Sheet1!B1,FIND(CHAR(10),Sheet1!B1)+1,LEN(Sheet1!B1)-FIND(CHAR(10),Sheet1!B1)) 基データの行セル数だけ式複写。 結果 Sheet2のA1:D3 11 aa 22 bb 33 cc 44 dd 55 ee 66 ff

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

Sheet1のA1セルを分割する場合は以下の式をSheet1のC1セルとD1セルに、それぞれ、入れてみて下さい。 Sheet1のC1セルに入れる式 =LEFT(A1,FIND(CHAR(10),A1)) Sheet1のD1セルに入れる式 =MID(A1,FIND(CHAR(10),A1),1000)

toshuak
質問者

お礼

ありがとうございます。私のレベルでも理解できました。次回作るときに参考にしたいと思います!