9/12/2022

Excel。複数シートの同じ位置にある値を、別のシートに簡単にまとめて表示したい【Display together】

Excel。複数シートの同じ位置にある値を、別のシートに簡単にまとめて表示したい

<INDIRECT関数>

集計シートなど、シートごとの値をまとめるシートを作るときに、シート名を含めたセル参照は簡単ですが、面倒な作業といえます。


例えば、次のようなファイルをつかって説明していきます。


集計シートは、日々の売上高のデータをまとめたものです。


B2には、11月1日のシートの値をセル参照させています。


11月1日のシートは、次のようになっています。


11月2日以降の各シートも同じレイアウトをしています。


つまり、各シートのB4に売上高の合計値があるというわけです。


これを集計シートにまとめた、一覧表を作成したいのが目的です。


では、B2に数式を作って、オートフィルで数式をコピーしてみます。


B2の数式は

='11月1日'!B4

として問題は無いのですが、これをオートフィルで数式をコピーしたら、「0(ゼロ)」と算出されてしまいました。


原因は、

B3をクリックすればすぐにわかります。


数式が、

='11月1日'!B5

となっています。


当然ですが、オートフィルで数式をコピーしても、シート名が連動して変わってくれることはありません。


セル番地のB4がB5になっただけです。


これでは、オートフィルで数式をコピーことはできないので、1シートずつ、セル参照で数式を作らないといけないわけで、3日程度ならば、パワープレイでも、いいかもしれませんが、30日分となれば、30回同じ作業を繰り返すのは、面倒でしかありません。


シート名を修正するとしても、シート数が増えれば、これまた面倒な作業でしかありません。


かといって、Excel VBAでつくるとしても、シート間を操作しなければならず、プログラム文が多くなりそうです。


そこで、「INDIRECT関数」をつかった数式をつくることで、オートフィルで数式をコピーすることができます。


そこで、INDIRECT関数をつかった数式に変更していきます。


B2には、

=INDIRECT(TEXT(A2,"m月d日")&"!b4")

という数式を設定しました。


オートフィルで数式をコピーすると、今度は、希望通りの値を表示することができました。


数式自体も、長くないこともあり、手早く、簡単に処理することができます。


使用しているINDIRECT関数は、文字列をそのまま数式などで使うことができる関数です。


INDIRECT関数の引数にTEXT関数をネストしています。


このTEXT関数をつかっている理由は、シート名が日付だからです。


INDIRECT関数で日付を参照させると、シリアル値になってしまうので、「11月1日」という文字で使用することができません。


そこで、TEXT関数で表示形式を「月日」に変更することで「11月1日」という文字としてつかえるようになります。


数式にシート名が含まれると、修正などの作業も面倒になることがありますので、アイディアが必要になることがあります。