エクセル関数で2列の情報を1列に順番に並べる方法

このQ&Aのポイント
  • エクセル関数を使用して、2列の情報を1列に順番に並べる方法を教えてください。
  • COUNTIFやVLOOKUP関数を試してみましたが、うまく順番に並べることができませんでした。
  • マクロではなく関数での解決方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

エクセル関数で、2列の情報を1列に順番に並べたい

以下の元データのようにA~D列にある情報を、 下方のE列、F列にあるように情報を合わせて表示したい場合、 E列、F列にはどのような関数を入れたらよいでしょうか。 COUNTIFやVLOOKUP関数を試してみましたが、 うまく順番に並べることができず途方に暮れています。。。 どなたかお知恵がある方、マクロではなく関数で 教えていただけたらありがたいです。 ※A列はB列の情報番号、C列はD列の情報番号です。 ↓元データ↓ A  B    C   D 1 みかん  1 あ 1 みかん  2 い 1 みかん  3 う 2 りんご   4 え 2 りんご   5 お 3 すいか  6 か 3 すいか  7 き 3 すいか  8 く 3 すいか  9 け ↓このようにしたいです。↓ A  B    C  D   E  F 1 みかん  1  あ    1  みかん 1 みかん  2  い    1  あ 1 みかん  3  う    2  い 2 りんご   4  え    3  う 2 りんご   5  お    2  りんご 3 すいか  6  か    4  え 3 すいか  7  き    5  お 3 すいか  8  く     3  すいか 3 すいか  9  け    6  か                 7  き                 8  く                  9  け 何とぞよろしくお願いします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 まず、処理を簡単にするために、1行目は項目名等を入力するために使用し、実際のデータは2行目(或いは更に下の行)から入力する様にして下さい。  その上で、E2セルには次の関数を入力して下さい。 =IF(ISNUMBER($E1),IF(COUNTIF($E$1:$E1,$E1)=COUNTIF($A:$A,$E1)+1,IF(COUNTIF($A:$A,">"&$E1),SMALL($A:$A,COUNTIF($A:$A,"<="&$E1)+1),""),$E1),IF(ROWS($2:2)=1,IF(COUNT($A:$A),MIN($A:$A),""),""))  次に、F2セルに次の関数を入力して下さい。 =IF($E2="","",IF(COUNTIF($E$1:$E1,$E2),INDEX($D:$D,MATCH($E2,$A:$A,0)+COUNTIF($E$1:$E1,$E2)-1),VLOOKUP($E2,$A:$B,2,FALSE)))  次に、E2~F2の範囲をコピーして、同じ列範囲の3行目以下に貼り付けて下さい。  これで、御希望の様に並べ替えられたデータがE列~F列に表示されます。

mmj8c6umd
質問者

お礼

シンプルでわかりやすい回答をありがとうございました。 みなさまへ>> 面倒な質問にもかかわらず、丁寧にわかりやすく 教えてくださって心から感謝しています。 全てのやり方をやってみたうえで、最低な方法を みつけることができ、おかげさまで、 何とか完成させることができました。 いろいろな発想があることがわかり、 視野が広がりました。楽しいですね。 今後は目的に応じて、教えていただいた さまざまなやり方を使い分けて活用していきたいです。 今回は手数が少ない方法に感じたので、 ベストアンサーをNO.4にさせていただきました。 自分でゼロから組もうとすると複雑かもしれませんが、 引き続き勉強していきたいと思います。 本当に助かりました。ありがとうございました。

その他の回答 (6)

回答No.7

No.3 です。補足します。 実際には、私がご質問の処理を行うとしたら、No.6 さんのような感じの方法で行うと思います。つまり、お勧めです。 その方法をかいつまんで言えば、易しい数式、空白行の挿入・削除、ジャンプの機能を、併用するということです。全体の作業の時間としては、データ量が大量だったとしても、数分間で終わると思います。 質問文は数式による表示についてのお尋ねでしたし、正直、上の操作は説明の量が多くて大変なので、つい手抜いてしまいましたが…。すみません。 ということで No.3 は、自分で回答しておいてナンですが、こちらの勝手な判断ではベストアンサーと考えていません。なぜならマクロのコードを書くのにも、ちょっとは時間がかかりますから。難解な数式をセルに記入・構築して一発で表示させようとするよりは、まだマシですが。そういう方法もある、くらいに受け止めていただければと思います。 第 1(数式)、第 2(マクロ)、第 3(ジャンプほかの機能の併用)の方法が出ましたが、第 4 の方法としては、次のような、ピボットテーブルと VLOOKUP、OFFSET 関数の併用があると思います。これも No.6 さんの方法ほどには簡単ではありませんが、ご参考に。 (1)元データの 1 行目に項目名(番号1、果物、番号2、平仮名)の行を設置する。 (2)数式を使うなどして、元データの A 列の各値を 10^4 倍しておく。 (3)元データにピボットテーブルを適用し、別シートに表示。 (4)行ラベルのボックス内に「番号1」と「番号2」のフィールドをドラッグ。   ピボットテーブルレポートの表内に表示されている数値のセルを右クリック。   「フィールドの設定 > レイアウトと印刷タブ」にて「アウトライン形式」と「表形式」を選択できますが、「アウトライン形式」のまま、変更しない。   すると、ピボットテーブルレポートの表は既に、ご希望の配置になっています。   その表をコピーして、さらに別シートの A1 セルに貼り付け。 (5)元データのシート名が「Sheet1」であれば、3 枚目のシートに次式を記入。 3 枚目のシート B2 =vlookup(a2,offset(sheet1!a:b,0,2*(a2<10^4)),2,) C2 =a2/(1+9999*(a2>=10^4))

mmj8c6umd
質問者

お礼

何度もご丁寧にありがとうございました。 図表の例示も番号を付けてくださり、 目で追いながら確認がしやすかったです。 見る側へのご配慮に感謝しています。 みなさまへ>> 面倒な質問にもかかわらず、丁寧にわかりやすく 教えてくださって心から感謝しています。 全てのやり方をやってみたうえで、最低な方法を みつけることができ、おかげさまで、 何とか完成させることができました。 いろいろな発想があることがわかり、 視野が広がりました。楽しいですね。 今後は目的に応じて、教えていただいた さまざまなやり方を使い分けて活用していきたいです。 今回は手数が少ない方法に感じたので、 ベストアンサーをNO.4にさせていただきました。 自分でゼロから組もうとすると複雑かもしれませんが、 引き続き勉強していきたいと思います。 本当に助かりました。ありがとうございました。

noname#204879
noname#204879
回答No.6

面倒を厭わなければ、以下のような方法もあります。 1.セル E1 に次式を入力して、此れを下方へズズーッと   ドラッグ&ペースト    =IF(COUNTIF(A$1:A1,A1)=1,0,"A") 2.列Eを選択 (⇒ Fig-1) 3.[編集]⇒[ジャンプ]⇒[セル選択]を実行 4.“数式”に目玉を入れて、“数値”以外のチェックを   外して[OK]をクリック (⇒ Fig-2) 5.[挿入]→[行]を実行 (⇒ Fig-3) 6.セル E1 に式 =IF($C1="",A2,C1) を入力して、此れを   右隣へドラッグ&ペースト 7.範囲 E1:F1 を下方へズズーッとドラッグ&ペーストし   た直後に(Fig-4 の状態で)[コピー]→[値の貼り付け]を実行 8.列A~Dを選択 9.ステップ3を実行 10.“空白セル”のみに目玉を入れて、[OK]をクリック 11.[編集]→[削除]から“上方向にシフト”目玉を入れて、   [OK]をクリック

mmj8c6umd
質問者

お礼

ユニークなアイデアをいただきありがとうございました。 作表のみの場合などで活用できそうです。 みなさまへ>> 面倒な質問にもかかわらず、丁寧にわかりやすく 教えてくださって心から感謝しています。 全てのやり方をやってみたうえで、最低な方法を みつけることができ、おかげさまで、 何とか完成させることができました。 いろいろな発想があることがわかり、 視野が広がりました。楽しいですね。 今後は目的に応じて、教えていただいた さまざまなやり方を使い分けて活用していきたいです。 今回は手数が少ない方法に感じたので、 ベストアンサーをNO.4にさせていただきました。 自分でゼロから組もうとすると複雑かもしれませんが、 引き続き勉強していきたいと思います。 本当に助かりました。ありがとうございました。

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

追記です。 その後A列で並べ替えして、EF列にコピーしてください。

mmj8c6umd
質問者

お礼

追記の書き込みありがとうございました。 みなさまへ>> 面倒な質問にもかかわらず、丁寧にわかりやすく 教えてくださって心から感謝しています。 全てのやり方をやってみたうえで、最低な方法を みつけることができ、おかげさまで、 何とか完成させることができました。 いろいろな発想があることがわかり、 視野が広がりました。楽しいですね。 今後は目的に応じて、教えていただいた さまざまなやり方を使い分けて活用していきたいです。 今回は手数が少ない方法に感じたので、 ベストアンサーをNO.4にさせていただきました。 自分でゼロから組もうとすると複雑かもしれませんが、 引き続き勉強していきたいと思います。 本当に助かりました。ありがとうございました。

回答No.3

数式をセルに記入することで達成したいとのご希望ですが、こういった複雑な並べ替えをしようとすると難解な数式となるので、実用性が低く、全くお勧めではない方法です。 一応、次式により、できないことはありません。 E1 =a1 E2 =index($A:$D,$G2+($G1=$G2),columns($E2:e2)+2*(1-($G1=$G2))) G1 =max(index((row(G$1:g1)+A$1:a1+(A$1:a1=0)*max(a:a)<=row(g1))*row(G$1:g1),)) ※ E2 セルをコピーして E2:E12 のセル範囲に貼り付け。次いで、E1:E12 をコピーして F1:F12 に貼り付け。 マクロを使えば、苦しんで数式を編み出さなくても、遥かに簡単にできます。次のコードを標準モジュールに貼って実行してください。 Sub ArrangeWithSubtitles()   Dim i As Long   Range("a1:b1").Copy Destination:=Range("e1")   Range("c1:d1").Copy Destination:=Range("e2")   For i = 2 To Cells(Rows.Count, "a").End(xlUp).Row     If Cells(i - 1, "a").Value <> Cells(i, "a").Value Then       With Cells(Rows.Count, "e").End(xlUp)         .Offset(1, 0).Value = Cells(i, "a").Value         .Offset(1, 1).Value = Cells(i, "b").Value       End With     End If     With Cells(Rows.Count, "e").End(xlUp)       .Offset(1, 0).Value = Cells(i, "c").Value       .Offset(1, 1).Value = Cells(i, "d").Value     End With   Next i End Sub

mmj8c6umd
質問者

お礼

ご提案ありがとうございます。 マクロは現在勉強中ですが、なかなか理解が追い付いていません。 ご教示いただいたコードも今度練習でやってみたいと思います。

noname#204879
noname#204879
回答No.2

》 2列の情報を1列に順番に並べたい とのことだけど、 「2列」とは、「元データ」の何処と何処の列を指しているの? 「1列」とは、「このようにしたい」表の何処の列のこと?

mmj8c6umd
質問者

お礼

補足にこたえていただきありがとうございました。 心から感謝いたします。

mmj8c6umd
質問者

補足

早速のご回答ありがとうございます。 説明不足ですみませんでした。以下のように考えて書いていました。 >「2列」とは、「元データ」の何処と何処の列を指しているの? ⇒たとえば、A列とB列を▲、C列とD列を■のかたまりとしたとき、  ▲と■のことを指して「2列」と表現してしまいました。  “2列”を“2情報”と書くべきでした。 >「1列」とは、「このようにしたい」表の何処の列のこと? ⇒同様の考え方で、たとえば、E列とF列を●としたとき、  ●を指して「1列」と書いてしまいました。 つまり、 A列+C列 →E列 B列+D列 →F列 ということが言いたかったのです。 貴重なお時間のお手を煩わせてしまい、申し訳ありませんでした。 引き続きご回答いただけるようでしたら是非お待ちしたいと思います。 なにとぞよろしくお願いいたします。

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

AB列のデータの重複行を削除し、以下のように、A列を10倍、C列を10倍+1、のようにしてから、CD列のデータをAB列の下に入れ、A列優先でABデータを並べ替えてはいかがでしょう。 A  B    C   D 10 みかん 11 あ 20 りんご 21 い 30 すいか 31 う         41 え         51 お         61 か         71 き         81 く         91 け 重複行の削除は、 [データ] メニューの [フィルタ] の[フィルタ の詳細設定] で、[重複するレコードは無視する] のチェック ボックスをオンにし、[OK] をクリックします。 フィルタ後のリストが表示され、重複する行が非表示になります。 このデータをコピーして貼り付けます。

mmj8c6umd
質問者

お礼

補足にこたえていただきありがとうございました。 心から感謝いたします。

mmj8c6umd
質問者

補足

早速ご回答いただきありがとうございました。 教えていただいた通りにやってみましたところ、 以下のようになってしまいました。 何かやり方が違っているのでしょうか・・・。 10 みかん 11 あ 20 りんご 21 い 30 すいか 31 う 41 え 51 お 61 か 71 き 81 く 91 け ↓こんなふうにしたいのです。。。↓ 10 みかん 11 あ 12 い 13 う 20 りんご 24 え 25 お 30 すいか 36 か 37 き 38 く 39 け 説明がうまくできず、わかりづらくてすみません。 何度もすみませんが、引き続きご回答いただけると嬉しいです。 よろしくお願いいたします。

関連するQ&A

  • Excelでの文字列とりだしについて

    Excel(version2013)について質問です。 ある文字列を検索範囲内で検索し、みつかった場合、 その文字列を返すようにしたいです、どのような関数を使えば宜しいでしょうか。 例えば下記A列に検索したいリスト(りんご、ばなな、ぶどう)があり、 検索したい範囲がD1~E5とします。 その場合、B列に関数を使った式を入れ、 りんご、ばなな、空文字、りんご、ぶどうと並ぶようにしたいです。 どのような関数を使えば宜しいでしょうか。       A         B      C      D        E 1  りんご   (式)        りんご  みかん 2  ばなな  (式)        ばなな すいか 3  ぶどう   (式)        すいか みかん 4              (式)        りんご  すいか      5              (式)        ぶどう  みかん                                      

  • エクセル 複数の条件での比較 一致 。困ってます。

    こんにちは。 エクセルでデータの比較、照合の方法で困っています。 A~Cのデータにあわせて  D~Fのデータを照合したいのですが A列の番号とD列の番号が順不同になっており上手く照合ができません。 下記のようなデータが100件以上ありA,B,Cの三つの条件が全て一致するD,E,FのデータにあればOK,ひとつでも違っていればNGと表記させたいのですが、なかなかいい関数が思いつきません。 出来ればVBAではなく関数で表記をさせたいのですが、宜しくお願いいたします。 A  B     C       D E     F 1 りんご  青森 1 りんご  長野 3 みかん 和歌山    2   スイカ  千葉

  • どの関数を使えばいいかわかりません。

    漠然としたタイトルですみません。 たとえば・・・      A     B    C     D       1班    2班   3班   4班    オレンジ  キウイ  チェリー さつまいも    にんじん  りんご  みかん  いちご    もも    なし   すいか  メロン とあった場合、もし、例えば『りんご』をF列に入れ、この表から探し、その列の列タイトルを隣のF列に表示したい。    ↓     E   F    りんご  2班    すいか  3班           これはどのような関数を使えばよろしいでしょうか? よろしくお願いします。

  • Excelについて

    Excelに下記のようなデータが入っているのですが A列   |   B列 りんご |     2 みかん | 3 ばなな | 1 りんご | 6 すいか | 7 かき | 3 みかん | 4 すいか | 8 りんご | 1 *(実際には100件ぐらいのデータが入っています。) A列で同じ「りんご」があれば、同じ行にあるB列の値を合計したいのでがどうすればよいですか? また「りんご」だけでなく他にもあればその値を合計して出したいのですが。 例えば、今回の例では「りんご」が三箇所あるので「2+6+1]で9と表示したいのですが。 イメージとしては、 A列  |   B列 |   C列   |  D列 りんご |    2  |    りんご |  9 みかん |    3  |    みかん | 7 ばなな | 1  |    ばなな | 1 りんご | 6  |    すいか | 15 すいか | 7  |    かき | 3 かき | 3 | みかん | 4 | すいか | 8 | りんご | 1 | というようにしたいです。どなたか教えてください。

  • Excelでどのような関数を使えばいいでしょうか。

    関数について教えて下さい。 Excelで、同じBook内に以下のような2シートがあるときに、 (Sheet1)    A   B    C   D     1  1  あい   12  りんご 2     うえ   34  みかん   3     おか   56  イチゴ 4  1  おか   78  イチゴ (Sheet2)    A   B    C    D     1     あい   11   りんご 2     うえ   34   みかん   3     おか   78   イチゴ 4     うえ   34   みかん  Sheet2のA列にSheet1にあるデータを入れたいのです。 まず、列B,C,Dのそれぞれのデータが横に3つ一致するものを探して 横3つのデータが同じなら、Sheet2のA列に、 Sheet1のA列にあるデータをシートBにも持ってくる、 というようなイメージです。 (Sheet2)    A   B    C    D     1     あい   11   りんご 2     うえ   34   みかん   3  1  おか   78   イチゴ 4     うえ   34   みかん      ↑このようにしたいのです。 A列にどのような関数を入れればいいのでしょう。 (A列にあるのは1か空欄かのどちらかです。 同じ3つの組み合わせで、1の場合と空欄の場合両方があることはありません。) また、Sheet2には、A列に1とついた行に色を付けたいのです。 例えば、上記の例ですと Sheet2のB3:D3のセルに色をつけたいのです。 関数や条件付書式などで、できますでしょうか。

  • 一番初めに文字列が入っている列の文字列を知りたい

    次の条件で、よりA列に近い文字列を引っ張り出すにはどのような関数を使えば良いのでしょうか? 1)行の中にそれぞれ"文字列"が入っている 2)文字列が入っているセル数は行によって異なる   【A】 【B】 【C】 【D】 【E】 【1】りんご 【2】   ばなな 【3】   みかん りんご 【4】ばなな           みかん この回答を【F】列に示す場合、 【F1】はりんご、【F2】はばな、【F3】はみかん、【F4】はばなな、になって欲しいのです。 上手く質問できないのですが、とても困っています。宜しくお願いします。

  • エクセル関数

    エクセル関数について下記のような表があります。 A   B    C    D    E F     12/1  りんご  9.5kg 12月度 りんご 48.0kg 12/1  みかん  5.0kg 12月度 みかん 25.0kg 12/1  ばなな 5.0kg 12月度 ばなな 25.0kg 12/2  りんご 9.5kg 12/2  みかん 5.0kg 12/2  ばなな 5.0kg 12/3  りんご 9.5kg 12/3  みかん 5.0kg 12/3  ばなな 5.0kg 12/4  りんご 9.5kg 12/4  みかん 5.0kg 12/4  ばなな 5.0kg 12/5  りんご 9.5kg 12/5  みかん 5.0kg 12/5  ばなな 5.0kg F2列の式は、SUMIF($B:$B,E2,$C:$C)で、F3,F4はF2の式を下フィルしています。質問内容はF2の小計が本来47.5kgとなるべきはずが、48kgとなってしまうのは何故かということです。ご教示の程 よろしくお願いします。

  • 4列にわたって2つの条件の関数

    下記のような4列の表で、"りんご"と"みかん"の2つを合わせた 合計を出したいのです。SUMIF関数とかでトライしたのですが、 上手くいきませんでした。     A     B     C      D 1  りんご   100    みかん  300 2  ばなな   150    りんご   50 3  みかん   200    ばなな  400 教えて戴ければ、本当に助かります。 よろしくお願い致します。

  • エクセルの関数で

    お世話になります       a       b       c 1    123-3322    りんご     東京 2    342-5534    みかん     静岡 3    439-6754    かき      山口 4    123-3322    なし      広島 5    123-3322    くり      沖縄       a       b       c 1    123-3322    りんご     東京 2    123-3322    なし      広島 3    123-3322    くり      沖縄 のようにd1にa列の検索したい番号を入力して e1にりんごf1に東京というように2.3.4行と 全て摘出したいのです よろしくお願いいたします

  • エクセルで一番右端の数字の日付を入れたい

    エクセル初心者です ____A______B_____C____D____E____F 1_______購入日__8/1__8/2__8/3__8/4・・・ 2りんご_???___3____5____3____0 3すいか_???___2____0____3____2 4みかん_???___5____0____0____0 5ぶどう_???___0____0____3____3 このような表を作ったのですが、???の部分に最後に購入した 日付(リンゴなら8/3、バナナなら8/4、みかんなら8/1のように)を関数を使って入力したいのですが、どういう関数をどのように使えばできますでしょうか? お願いします

専門家に質問してみよう