10/19/2019

Excel。INDIRECT関数でシート名を見出しにした別シートの表に集計。だけど、日付だとエラーになるのでどうしたらいいの?【Aggregate】

Excel。INDIRECT関数でシート名を見出しにした別シートの表に集計。だけど、日付だとエラーになるのでどうしたらいいの?

<SUM+INDIRECT関数&TEXT関数>

各月ごとに店舗集計されたシートがあります。

それぞれ、シート名は、1月・2月・3月としてあります。

そして、集計するシートが、売上集計シートです。

この売上集計シートのB2には、1月の合算値を算出して表示したいわけです。

シートごとに合計値を算出して、セル参照でもいいのですが、どのみちセル参照の作業が必要ならば、セル参照も合計値を求めることも、まとめて出来れば作業効率がいいわけですね。
しかも、その式をオートフィルでコピーできれば、さらに便利ですね。

通常ならば、売上集計のB2の数式は次のように作るはずです。

=SUM('1月'!B2:B6)

シート名の「1月」が入っているのはいいのですが、この数式をオートフィルを使って数式をコピーしても、シート名は勝手に、2月・3月と変わりませんから、当然おかしな数値が計上されてしまいます。

このぐらいのデータなら、根性をいれればどうにかできないこともありませんが、たいへんです。

そこで、オートフィルを使って数式をコピーするには、どうしたらいいのか、考えると、自動的に、引数内の1月が2月と変わってくれればいいわけですね。

そこで、登場するのが、「INDIRECT関数」です。

この関数は、文字を直接使用することができるという、知っていると、とても便利な関数です。

準備としては、A2:A4にシート名と同じ文字を入力しておきます。

では、INDIRECT関数を使った数式を作って確認してみましょう。

B2の数式は、
=SUM(INDIRECT(A2&"!b2:b6"))

合計値を算出したいので、SUM関数を使います。
引数内のINDIRECT(A2&"!b2:b6")は、A2は1月という文字だとイメージします。

「1月」という文字に「!b2:b6」を結合しますので、「&」を使って結合させます。

あとは、オートフィルを使って数式をコピーすれば、完成です。

このINDIRECT関数は便利なのですが、シート名が次のようになると、工夫が必要になります。
シート名の「1月」を「2020年1月」と変更します。

A2も「2020年1月」と変更してみると、「#REF!」というエラーになります。

シート名もセルも2020年1月なのに、エラーになってしまったのでしょうか?
その原因は、INDIRECT関数は『文字』を参照します。シート名は2020年1月という文字なのですが、A2は、2020/1/1と日付でExcelは認識しています。

つまり、A2は文字ではなくて日付になってしまったので、エラーになったわけです。

【TEXT関数を使って日付を文字に】

日付を文字列に変更するといいわけですね。このような場合に登場する関数が「TEXT関数」です。
TEXT関数は、表示形式を設定できる関数です。

では、数式を次のように修正することで算出することができます。

=SUM(INDIRECT(TEXT(A2,"yyyy年m月")&"!b2:b6"))
このように数式を修正することで、シート名が日付でも対応することができます。

INDIRECT関数は便利なのですが、ちょっと注意が必要なケースもあります。