- ベストアンサー
Excelで複数行ある同一項目内容を一列に並べたい方法
- Excelで複数行ある同一項目内容を一列に並べる方法について教えてください。
- A表とB表があり、A表のデータを参照してB表を完成させたいです。
- 数式やExcelマクロ、またはAccessを使用して実現することができますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Excel2002(OfficeXP)以降を使っているなら「数式の検証」という便利な機能がついていますが,Excel2000を使っているなら次のようにして勉強してください。 準備: B3の式を暫定的に =SUMPRODUCT((Sheet1!$A$1:$A$6=$A3)*(Sheet1!$B$1:$B$6=B$1)*(Sheet1!$C$1:$D$1=Sheet2!B$2), Sheet1!$C$1:$D$6) に変更する 手順1: 数式バーの中で数式中の (Sheet1!$A$1:$A$6=$A3) の範囲を選択し,F9キーを押す →その部分が計算されて計算結果に置き換わる 手順2: 数式バーの中で数式中の (Sheet1!$B$1:$B$6=B$1) の範囲を選択し,F9キーを押す 手順3: 数式バーの中で数式中の {FALSE;TRUE;TRUE;FALSE;FALSE;FALSE}*{FALSE;TRUE;FALSE;TRUE;FALSE;FALSE} の範囲を選択し,F9キーを押す →{6行×1列の配列}×{6行×1列の配列}のかけ算から{6行×1列の配列}が得られる事を確認する 手順4: (Sheet1!$C$1:$D$1=Sheet2!B$2) をF9し,更にかけ算の前段と共にF9する →{6行×1列の配列}×{1行×2列の配列}のかけ算から{6行×2列の配列}が得られることを理解する 最後にSUMPRODUCT({6行×2列の配列}, Sheet1!$C$1:$D$6) で,該当するセルの数値が同士がかけ算され合算される流れを理解する。 オマケ: 回答した数式を =SUMPRODUCT((Sheet1!$A$1:$A$6=$A3)*(Sheet1!$B$1:$B$6=B$1)*(Sheet1!$C$1:$D$1=Sheet2!B$2)*Sheet1!$C$1:$D$6) としてしまうと,エラーで計算できない理由を同様の手法で計算のステップを確認しながら理解しておいてください。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
>以下、50行くらい続く と言った程度のデータ量なら,次のようでイイです。 #ただし 項目aを参照する必要はない kitaが2度も出てくる必要は無い 簡単のため,添付図のように作成します B3: =SUMPRODUCT((Sheet1!$A$1:$A$100=$A3)*(Sheet1!$B$1:$B$100=B$1)*(Sheet1!$C$1:$D$1=Sheet2!B$2), Sheet1!$C$1:$D$100) 右に下にコピー J3: =VLOOKUP(A3,Sheet1!A:E,5,FALSE) #S03やS04はそもそも元のリストに存在しないことを示すために敢えてエラー表示を残していますが,そういうのはユルセナイときは,必要に応じて関数を追加したり条件付き書式などを利用してエラー表示を消してください。
お礼
早々の回答有難う御座います。 教えていただいたのをそのまま実行し、出来たのをみて驚いたのですが、昨日一日、なんでこうなるのかを考えていて分からずじまいで御礼が遅れてしまいました。 VLOOKUPは分かります。SUMPRODUCT使用数式についてが分かりません。 SUMPRODUCTの(Sheet1!$A$1:$A$100=$A3)でLotを位置を探し、(Sheet1!$B$1:$B$100=B$1)で項目aの位置を探し(Sheet1!$C$1:$D$1=Sheet2!B$2)で項目b or cの位置をさがして配列を作って, (Sheet1!$C$1:$D$100)の配列と掛け算、足し算すると数値なのはひとつ(他が文字列)なのでその数値が入るという理解なのですが、(Sheet1!$A$1:$A$100=$A3)*(Sheet1!$B$1:$B$100=B$1)*(Sheet1!$C$1:$D$1=Sheet2!B$2)と Sheet1!$C$1:$D$100)が同じ行数と列数になる理由が分かりません。もう少し教えていただけないでしょうか。 実際に使用する表は項目がもっとあるので、しくみも理解したいのです。 お手数ですが、よろしくお願い致します。
お礼
ご指導ありがとうございます。まだ、理解できていませんが時間が長くなりそうなのでわからないことが分かったときは別枠で質問させていただきます。ありがとうございました。