Excel。1つのシートのデータを、各シートの同じセルに転記するには
<INDIRECT+SHEET関数>
簡単そうな処理でも繰り返して設定するのは、結構面倒なわけです。そこでExcel VBAを使ってとか考えるのですが、1つのシートにあるデータを、各シートの同じセルに転記することだったら、Excel VBAでマクロを作るよりも簡単に設定することができます。
1枚目のシート「売上目標」には次の表が用意されています。
そして、新宿から川崎までの各シートには、次のような表が用意されています。
やりたいことは、例えば、シート「売上目標」のC2にある新宿店の売上目標の数値をシート「新宿」のB2に転記したいわけです。
処理的には簡単ですが、繰り返すと面倒なパターンですね。
例えば、シート「新宿」の場合だと、B2をクリックして、
=売上目標!C2
と設定するだけの、単なる『セル参照』にすぎません。
ところが、オートフィルを使って数式をコピーできるならばいいのですが、各シートの同じセルにそれぞれの店舗の売上目標を転記したいわけです。
そこで、Excel2013から登場したSHEET関数とINDIRECT関数を使うことで簡単に転記することができます。
最初に行うのは、転記したいシートを作業グループ(選択)します。
転記したいセルをクリックします。今回はB2をクリックして、数式を設定していきます。
INDIRECT関数ダイアログボックスを表示すると手入力があるので、直接数式を設定したほうが楽だと思います。
B2の数式は、
=INDIRECT("売上目標!c"&SHEET())
それでは各シートを確認してみましょう。
たった、これだけです。
Excel VBAとかでマクロをつくらないと…なんて思いがちですが、数式で簡単に算出できる方法も知っているといいですよね。
さて、数式の説明をしておきましょう。
=INDIRECT("売上目標!c"&SHEET())
INDIRECT関数はセル参照を表す文字列を間接的に参照することができる関数です。
では間接的に参照するための引数ですが、
"売上目標!c"&SHEET()
シート「売上目標」のCまでがダブルコーテーションで囲んでいます。
そして、「&」で文字結合しているのが、SHEET()。
SHEET関数は、Excel2013で登場した新しい関数です。
このSHEET関数は、ブックの左から何枚目にあるのかがわかる関数なので、左から2枚目にある、シート「新宿」は2と算出される仕組みです。
なので、シート「新宿」の場合、
"売上目標!c"&SHEET()は、売上目標!C2
ということになり、INDIRECT関数を使うことで、
=売上目標!C2
という数式を作ることができたわけです。
なので、シートの順番が非常に重要で、新宿と渋谷のシート入れ替えてしまうと、数値も入れ替わってしまうので、注意が必要です。