- ベストアンサー
すべてのシートから抽出した結果を表示したい
シート1 A B あ 4 あ 5 い 5 シート2 A B あ 6 う 3 上のようなシート1,2があるとして、 シート3にフィル多機能なようなもので A列にあ、い、うが選択可能で、「あ」を選択すると シート3 あ 4 あ 5 あ 6 と出力されるようにしたいのですが、 マクロ等を使用しないでこのように設定することは可能でしょうか? シート1,2に「え」を追加するとシート3の選択肢にも「え」が 自動追加できるといいのですが。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こういう、式が複雑になるのが、「関数でできる」と言い得るかどうか。 自称imogasi方式の応用でやってみます。 ーーー Sheet3のA1に選択する文字列を入力する。「あ」が入力されている場合の例です。 ーーーー Sheet1 A,B、D列 A2:B2に(第1行はわざと空けておきます) あ x 1 あ y 2 い z う u あ w 3 D列はD2に =IF(A2=Sheet3!$A$1,MAX($D$1:$D1)+1,"") と入れて下方向に式を複写する。D7以下に式を複写するとエラー表示が出ますが、式が複雑になり本質がぼやけるので、防止策は省略。 結果は上記。(A列が「あ」の行に連番を振ったことになりました。) ーーー Sheet2 A2:B7に あ t 4 あ u 5 う v え k あ l 6 あ m 7 D1に=MAX(Sheet1!D2:D100)と入れます。 3となります。 D2に =IF(A2=Sheet3!$A$1,MAX($D$1:D1)+1,"") と入れて、D7まで式を複写する。 結果は上記D列の通り。 これでSheet1->Sheet2の順に、A列の「あ」に通し番号を振ったことになりました。 ーーーー Sheet3に行きます A2に =IF(ROW()-1<=MAX(Sheet1!D2:D10),INDEX(Sheet1!$A$2:$B$100,MATCH(ROW()-1,Sheet1!$D$2:$D$100,0),1),INDEX(Sheet2!$A$2:$B$100,MATCH(ROW()-1,Sheet2!$D$2:$D$100,0),1)) B2に =IF(ROW()-1<=MAX(Sheet1!$D$2:$D$100),INDEX(Sheet1!$A$2:$B$100,MATCH(ROW()-1,Sheet1!$D$2:$D$100,0),2),INDEX(Sheet2!$A$2:$B$100,MATCH(ROW()-1,Sheet2!$D$2:$D$100,0),2)) と入れて下方向に式を複写します。A列とB列の式の違いは、INDEX関数の列1と列2の引数の違いだけなので 、COLUMN()を使うとA2ー>B2に式の複写で済ませられます。 結果は上記A2:B8 あ x あ y あ w あ t あ u あ l あ m D100のように突然100が出てきますが、実際のデータの最大行を超える行数を使ってください。実際データより多くても無害です。 ROW()-1はSheet3で表示を第2行目からしているので1を引いています。 ーーー 関数関数という質問者が多いのですが、アイデアは簡単ですが、式が長くなり、好みに合わない。本音はVBAでやりたいですが。
その他の回答 (2)
- S-Fuji
- ベストアンサー率36% (592/1624)
VBAでも使わないと、その機能は実現できません。
「自動追加」できない、と思います。