2014年2月12日水曜日

Excelで単一行と複数行のシートをセル参照で解決する

イメージ的には以下のような感じです。


元々1行のものを、複数行の表で参照しようとした場合、
「=表!C3」 というような表現だと、単純に参照設定を作ることができません。

1行が1行として参照するのであれば、一つ参照をつくって、コピーすれば済みますが、
複数の場合、どうやっても単純コピーではいきません。



そこで、調べてみたところ、別アプローチでの解決方法がありました。

キーワード

OFFSET ・・・ 指定した参照から指定した行数、列数の範囲への参照を返します。
ROW()  ・・・   参照の行番号を返します
COLUMN() ・・・ 参照の列番号を返します。

理屈

OFFSETで、相対位置を指定する事により、任意の場所の値が取れます。
ROW()とCOLUMNを利用して、スタート位置からの相対を指定します。


実践

別シートに分かれているものとします。
2行構成のシートから、1行校正のシートを参照します。

・行Noを取得する (行Noは、A列2行目に1行目がある)
 =OFFSET(表!$A$2,((ROW())-2)/2,0)
 ※解説
  ・表A2からスタートで、相対位置(行)を計算、列はそのまま。
  ・1行目の相対位置は、$2から見るとゼロ。ROW()-2/2もゼロ。よってそのままの行
  ・2行目はとなると、ROW()が4なので、(4-2)/2 でイチ。$A$2から行がプラスイチなので、3

相対位置のスタートを絶対指定にするのがポイントです。
これで、同じ計算式を使いまわすことが可能です。

ちなみに、名称の欄には
 =OFFSET(表!$B$2,((ROW())-2)/2,0)
と指定しています。


きちんと使うなら、
=IF(OFFSET(表!$A$2,((ROW())-2)/2,0)="","",OFFSET(表!$A$2,((ROW())-2)/2,0))

とやると、きれいにいくかもしれません。

0 件のコメント: