• ベストアンサー

エクセル。複数行あるセルの分割はできますか?

こんにちは。 教えてください! たとえば、B1のセルに次のように3行でデータが入力されていたとします。 B1「日本   アメリカ   イギリス」 これをそれぞれ分割して次のようにできる関数はありますか? B1「日本」 B2「アメリカ」 B3「イギリス」 それが簡単にできると仕事がスムーズになるので助かります。 もし次のことも解決できる方法があれば教えてもらえませんか? A1「8月30日」 B1「日本、アメリカ、イギリス(3行で入ってます) C1「出発」 というようなデータがあって、B1をそれぞれの国で分割して、A1とC1のデータをアメリカが入っている行、イギリスが入っている行に自動的にコピーされる。 これは関数ではなくて、マクロになるのかな?とも思うのですが、「分割が行われた行までコピー」というやり方がさっぱりわからないでいます。(その前に分割する方法が分からないんですけど・・・) ちなみに、データがずらーっと並んでいるリストの一部にあるB1のようなデータを整理したいというのが、目的になります。 どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 よくよくテストして下さい。 Sub Sample()   Dim nLastRow As Long   Dim i    As Long   Dim j    As Long   Dim s    As String   Dim v   nLastRow = Cells(Rows.Count, "A").End(xlUp).Row      Application.ScreenUpdating = False   For i = nLastRow To 2 Step -1 ' // 2行目まで     s = Cells(i, "B").Text     If Len(s) > 0 Then       v = Split(s, vbLf)  ' // セル内改行で配列化       If UBound(v) > 0 Then         Rows(i + 1).Resize(UBound(v)).Insert         For j = 0 To UBound(v)           Cells(i + j, "A").Value = Cells(i, "A").Value           Cells(i + j, "B").Value = v(j)           Cells(i + j, "C").Value = Cells(i, "C").Value         Next       End If     End If   Next End Sub

shimashimashima
質問者

お礼

お礼が遅くなって申し訳ありませんでした。 どうもありがとうございました。

その他の回答 (7)

noname#204879
noname#204879
回答No.8

1.セル B1 を例えばセル E1 にコピー&ペースト 2.セル E1 を選択して、[データ]→[区切り位置]を実行 3.“カンマやタブなどの…に区切られたデータ”に目玉入れて[次へ]   をクリック 4.“その他”の右側のボックス内にマウスカーソルを置いて Ctrl+J   をパシーッ 5.[完了]をクリック 6.範囲 E1:G1 を選択して[コピー] 7.セル B1 を選択して、[編集]→[形式を選択して貼り付け]を実行 8.“行列を入れ替える”にチェックを入れて[OK]をクリック 9.範囲 A1:C3 を選択 10.[編集]→[ジャンプ]→[セル選択]を実行 11.“空白セル”に目玉を入れて[OK]をクリック 12.キーボードから =A1 を入力して Ctrl+Enterキーを「エイヤッ!」   と叩き付け

shimashimashima
質問者

お礼

お礼が遅くなって申し訳ありませんでした。 どうもありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.7

ANo.5です。 私も横道にそれまして申し訳ないですが。 ANo.6さん、回答ありがとうございました。

shimashimashima
質問者

お礼

お礼が遅くなって申し訳ありませんでした。 どうもありがとうございました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.6

横道に外れてすみません。 A No.5のn-junさんのご質問に対してですが、 #2→#3の間違いです。申し訳ありません。

shimashimashima
質問者

お礼

お礼が遅くなって申し訳ありませんでした。 どうもありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

ANo.2です。 直接の回答ではないですが。 ANo.4さん >#2とやっている事は同じですが、中間結果のセルの値を使用していないところが違いです。 今一つわかっていないのですが、もしかしてシート2に書き出していることでしょうか? ご指導願えれば幸いです。

shimashimashima
質問者

お礼

お礼が遅くなって申し訳ありませんでした。 どうもありがとうございました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

久しぶりに真面目に関数を考えてみました。やはり#1のVBAの方が好きですね。小難しいのはどちらも同様だと思います。 #2とやっている事は同じですが、中間結果のセルの値を使用していないところが違いです。(だから優れていると言う訳ではありませんが) =LEFT(A1,SEARCH(CHAR(10),A1)-1) =MID(A1,SEARCH(CHAR(10),A1,1)+1,SEARCH(CHAR(10),A1,SEARCH(CHAR(10),A1,1)+1)-SEARCH(CHAR(10),A1,1)-1) =MID(A1,SEARCH(CHAR(10),A1,SEARCH(CHAR(10),A1,1)+1)+1,LEN(A1)-SEARCH(CHAR(10),A1,SEARCH(CHAR(10),A1,1)))

shimashimashima
質問者

お礼

お礼が遅くなって申し訳ありませんでした。 どうもありがとうございました。

回答No.3

もとにあるB1のデータを「日本」してしまうと、他に元データを置いておかない限り分割ができないのでB2,B3,B4に分割していきます B2にはMID(B1,1,FIND(CHAR(10),B1,1)) B3にはMID(B1,FIND(CHAR(10),B1,1),FIND(CHAR(10),B1,FIND(CHAR(10),B1,1)+1)-FIND(CHAR(10),B1,1)) B4にはMID(B1,FIND(CHAR(10),B1,FIND(CHAR(10),B1,1)+1)+1,LEN(B1)) と入れてみて下さい。 2つめの質問については自動的にコピーということになるとマクロを使うことになります。

shimashimashima
質問者

お礼

お礼が遅くなって申し訳ありませんでした。 どうもありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

Sub test()  Dim i As Long, j As Integer  Dim k As Long  Dim v, w, x  With Worksheets("Sheet1") 'シート名変更要       v = Range(.[A1], .Cells(Rows.Count, 1).End(xlUp).Resize(, 3)).Value  End With  ReDim x(1 To 3, 1 To 1): k = 1  For i = 1 To UBound(v, 1)      w = Split(v(i, 2), vbLf)          For j = 0 To UBound(w)              x(1, k) = v(i, 1)              x(2, k) = w(j)              x(3, k) = v(i, 3)              k = k + 1              ReDim Preserve x(1 To 3, 1 To k)          Next  Next  With Worksheets("Sheet2") '書き出すシート       .Range("A:A").NumberFormat = "m""月""d""日"""       .Range("A1").Resize(k - 1, 3).Value = Application.Transpose(x)  End With  Erase v, w, x End Sub ご参考まで。

shimashimashima
質問者

お礼

お礼が遅くなって申し訳ありませんでした。 どうもありがとうございました。

関連するQ&A

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

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

  • エクセルで何行目に入っているか知りたい

    エクセルで所定の値が入っているセルが何行目なのかわかる方法はありますでしょうか。 A1ブランクA2○ B1×B2○ C1×C2△ となっていた場合、×は2行目、△は3行目といった内容です。 マクロでも関数でもお分かりになるかた教えてください。 よろしくお願いいたします。

  • Excelのシートにある1行のデータを複数行に分割したい

    例えば次のようなことがしたいのですが、VBA以外ではできないでしょうか? 何か方法があったら教えてください。 ・A:コード B:氏名 C:生年月日 D:住所 E:TEL というように横に並んだデータがあるとします。 ・一番上の行は標題部分になっており、次の行からデータが縦に100行分程度あります。 ・この1行分のデータを2行(すべてに標題をつけたいので実質は4行)に返還したいのです。 (1行目:標題)A:コード B:氏名 C:生年月日 (2行目) 標題に対応したデータ (3行目:標題)D:住所 E:TEL  (4行目) 標題に対応したデータ これで意味がわかるでしょうか? よろしくお願いします。

  • 同じ値のセルを持つ行を2回目以降削除したい エクセル

    たとえば以下のシートがあるとします。(スペースでセルの区切りを表現) 12 A 12345 32 B 94617 34 C 28748 43 A 45729 32 C 72021 これを,同じ値のセルを持つ行を2回目の出現以降削除したいと思います。 例:下図では,変換後,A,B,Cのある列をキーに,二度目のA,二度目のCのある行が削除されました。 12 A 12345 32 B 94617 34 C 28748 このようにするにはどんな方法がありますでしょうか。実際のデータでは行が6万行近くあり,上図でA,B,Cに該当するキーの種類も数千種あります(^^;) 私はマクロは全然分かりませんので,できれば関数などのシンプルな方法で。しかし必要であればマクロの書き方も教えてください。 あと,別回答でも結構ですが,マクロがどうしても必要な場合は,マクロの初歩を教えているお勧めページをご存知でしたら教えてください。

  • エクセルのコピー貼り付けについて

    例えばA1からA1000までに数値データがあったとします。 そのデータを利用して、A1からA10のデータをB1からB10に 次にA11からA20をC1からC10と10行づつA1からA1000までのデータを次々に貼り付けたいのですが、何かいい方法ありますか?関数とか・・・ マクロに関しては、簡単マクロ機能程度しか使えないので、関数でなんとかなるときは関数で実施したいと思っています。 ご教授お願いします。

  • Excelマクロで行を分割してコピーしたいのですが・・・

    いろいろなサイトで調べたのですが、方法が見つからずご質問させて頂きます。 Excelシートの中で値が入っている行まで順番に読み、A列のセルの値が'東京'かつB列の値が'2'以上の行があった場合に、その行をB列の値の数だけその行の下にコピーで挿入したいのですが、どのようなマクロにすれば良いかご教授頂けないでしょうか? 例) セルA1='東京' セルB1='3' の場合、 ---------------------------------- セルA1='東京' セルB1='1' セルA1='東京' セルB1='1' セルA1='東京' セルB1='1' ※セルB1を値の数だけ分割し、なおかつ値を'1'にする ※分割が終わったら、分割元の行を削除する ※その他の列の値はそのままコピーする 以上、宜しくお願い致します!

  • エクセル~空白のセルのある行を非表示に。

    エクセルで。 例えば、100行の表があって、1行目から順番にデータを入れていくんですが、 データが50行までで終わってしまった場合に、51行目からを、非表示にしたいのです。 Aドライブからのデータの読み込みは、マクロをつかっているので、できればそのあとに文章をくっつけて、1つのマクロで作業を完了したいのです。 具体的に言いますと・・・ A列には1~100までの数字が入力してあります。 B~E列には取り込んだデータ(数字)をVLOOK関数で文字に変換するようになってます。 それ以降は、固定した単位(m3)や、データの数字がそのまま入る・・・という感じです。 そして、101行目はそれぞれの列の合計を出すようにしてます。 つまり、データを読み込んだあと、例えば50行しかデータが無かったら(B50やC50などが空白だったら)、51行目から100行目までをいわゆる『表示しない』にしたいのです。 だいぶ考えましたが・・・・。 よろしくお願いします。

  • エクセル 複数行にまたがっているデーターを一つの行にまとめたい

          A列  B列   C列 1行目  佐藤 北海道 りんご 2行目  佐藤 北海道 ばなな   3行目 伊藤  東京  いちご 4行目  伊藤  東京  ばなな  上記のようなデーターがあります。これを2行目と4行目を削除し下記のようにしたいのですが       A列  B列      C列 1行目  佐藤 北海道  りんごばなな 2行目  伊藤  東京   いちごばなな A列とB列のデーターが同じでC列のデータが異なる場合、上記のように一行にまとめたいのです。関数やVBAで上記の処理を出来る方法がありますでしょうか。 

  • ExcelVBAで複数セルを別シートに貼り付けたい

    Excel VBAでデータをコピーして、別シートに貼り付けるどうしたらいいのでしょうか。 Sheet1のセルA1からA4のデータをコピーして、Sheet2のC2からc5に貼り、次はSheet1のセルB1からB4のデータをコピーしてSheet2のC7からc10に貼りを500行ほど繰り返し(コピーするデータは、4行づつ横へ移動し、貼り付けるほうは4行づつ縦へ移動します。) それが終わったら、今度はB列、c列と100列ほど同じ操作を繰り返します。 いろいろな方法を試しましたが、なかなかうまくいきません。 どなたか教えていただけませんでしょうか。よろしくお願いいたします。

  • Excelで複数条件を満たすのは何行目?

    Excel VBAにてどういう方法があるのか考えています。 A列はHかL、B列は1,2,3のようなデータにおいて  条件1:A列はH  条件2:B列が2 を満たす行は何行目かを探して、C列のその行のセルに コピーしていたデータを貼り付けたい (この場合、2つの条件で重複する行はありません) A列 B列 C列 H  1 H  2  ■←ここへ貼り付け H  3 L  1 L  2 L  3 この場合は、2行目なので、C列の2行目のセルをselectしてpasteしたいのです。 良い方法をご存じの方、よろしくお願いいたします。

専門家に質問してみよう