• ベストアンサー

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

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

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

  • ベストアンサー
  • 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/17068)
回答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/17068)
回答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
質問者

お礼

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

関連するQ&A

  • Excel 2016 で一つのセル内で改行したい

    Excel で一つのセル内で改行する方法をお願いいたします 列と行を広くして一つのセル内に複数行記入したいのです 書式設定では 折り返して全体を表示する         縮小して全体を表示する        セルを結合するが有りますが        セル内での改行が有りません 前の文字をスペースで送ると改行らしき事は出来るのですが文字の並びがズレて来るのでよろしくお願いいたします

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

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

  • EXCELのセル内改行について

    よくある質問としてExcelの見た目と印刷が違うというものがありますが、それを回避するために、セル内の強制改行を使うと思います。 内部統制のRCMで使っている表なのですが、縦書きの列のセルがあります。同じ行にある横書きのセルの内容が少ないため、セル幅を自動調整しようとすると、行の高さが異常に高くなってしまいます。 縦書きのセルはレイアウト上2行(列)に収める必要があるので、縦書きのセルで強制改行すると、思うように治まるのですが、行のセル幅を自動調整すると、勝手に3行(列)になってしまい、印刷できなくなってしまいます。 どの位置で改行してみても、勝手に1文字分が余分な1行(列)になってしまい、マクロで自動調整をした後に印刷をかけようとしているので、見ばえの悪い表になってしまいます。 (うまく表現できていないようでしたらお許し下さい) 縦書きのセルの自動調整をうまく行う方法は無いでしょうか?

  • エクセルの文字列の抽出方法について

    ★★エクセルの文字列の抽出方法について★★ 下記の「対象セルの内容」のような感じで1つのセルの中に複数行の文字列が入っているのですが、 下から3行とか4行とかを指定して文字列を抽出したいと考えています。 ■対象セルの内容 [改行] [改行] [改行] a/b/r1.php[改行] a/b/r2.php[改行] a/b/r3.php[改行] a/b/r4.php ■抽出したい値 a/b/r2.php[改行] a/b/r3.php[改行] a/b/r4.php 何かしらうまい方法はないでしょうか。 ご教授なにとぞよろしくお願いいたします。

  • Excelセル内の改行を含む文字列の1行目抽出

    Excelセル内の改行を含む文字列があり、関数を使って、その1行目だけ抽出したい。 たとえば、下記のような式を書きました。「改行コード」おかしみたいで動作しません。 Left("A1", Find(vbCrLf, "A1")) (改行コードをさがして、そこまでの文字列を切り取る) これをVBAで書く方法があれば、コードを教えてください!

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

    エクセル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 としたいとき、何か良い方法はありますでしょうか? よろしくお願いいたします。

  • Excel 特定のセルだけEnterでセル内改行

    タイトル通りのことなのですが、VBA等を駆使してできないか悩んでいます Excelのセル内改行は通常Alt+Enterなのですが、 使っているシートの一つのセルだけ複数行入れるような大きな所があります。 他のセルでは問題ないのですがここの入力時では、 いつもAltを押しながらでないと改行できない煩わしさが募りまして、 「このセル内に限り」Enterキーだけで改行できるようにしたいのです。 条件としてはあくまでこのセルのみで、形を崩さずにできることが望ましいです。 この入力セルは他シートから参照されているため 複数行のセルに分割したり、テキストボックスに置き換えることは難しいです 色々探した挙句、Application.MoveAfterReturn など VBAを駆使して考えてみたのですが 手詰まりになってしまいました。 何かできる方法はありますでしょうか?

  • エクセルで複数行のセルからフィルタ抽出する方法

    エクセルで複数行のセルからフィルタ抽出する方法 エクセルで、何日に誰が日直、当直に入ったかをまとめている表があります。平日は当直4人.土日は日直と当直が各4人ずつです。 aさん 1| 2|8|15|31 bさん1|5|9|14 cさん1|6|24|30 dさん2|1|4 . . . 縦棒はセルの区切りです。(数字ごとに1つずつのセルに入力しています。) 日直日誌(紙媒体)から手入力をしているので、最後に2人で読み合わせをしています。複数の列をまとめてフィルタ掛けして、例えば1日(1と入力している)で絞ると、aさんbさんcさんしか出てきません(一番左の列からしか引っ張れず、dさんが引っ張られない) どの行、どの列のセルの数字も対象にして、フィルタがけして引っ張る方法はありませんでしょうか?

  • Excelでセル内改行

    お世話になります。 早速ですがExcelで複数のセルに文字列が入力されている時、それらの文字を結合する場合はCONCATENATE関数を使いますよね? で、この応用(なのか判りませんが)で例えばセルA1に"改"の文字が、セルB1には"行"の文字が入っているとき、セルC1に 改 行 と改行させて2行で表示したいのですが、セルC1に"=CONCATENATE(A1,CHAR(13),B1)"とやってもうまくいきませんでした。 Alt+Enterで手入力する以外に関数、マクロ等で何かいい方法がありますか? よろしくお願いします。

  • 複数シートの色付きセルがある行を別シートに抽出

    複数シートの各E列に色付きセルがある行のみ、1つの別シートに 抽出したいと考えています。 セルの色は条件付書式で付けています。 なお、複数シートの項目はすべて同一で、1行目は項目名が入っています。 特に複数シートが対象になっているために過去ログから中々近いものが見当たりません。 どなたかヒントだけでも頂ければ幸いです。

専門家に質問してみよう