M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

入力規則のリストとして参照範囲を動的指定する

当初の意図としては、こちらのページなどで紹介されていたOFFSET関数を用いた解法について、「これってExcelバージョンによっては、基準セル範囲指定やCOUNTA関数のカウント範囲指定にINDIRECT使わないと別シートのセル範囲は指定できないよなー、ていうかそもそもこのロジックってOFFSETなんて使わなくても実装できるんじゃ・・・」というものだった。

実際に式をつくるに当たっていろいろ残念な間違いをしていたけど、結論としては、次の条件のもとであれば =INDIRECT("Sheet2!$A$2:$A"&(COUNTA(INDIRECT("Sheet2!$A:$A")))) となる。

  • リストの元になるセル範囲はSheet2に存在する。
  • セル範囲の上端はA2である。
  • セル範囲に列挙された値と値の間に空白セルはないものとする。(もちろん値の一覧の下端よりも下側のセルには空白セルたちが並ぶ。)

f:id:m12i:20130303103519p:plain

OFFSET関数使用バージョンとOFFSET関数不使用バージョン二つの式を並べると・・・

=OFFSET(INDIRECT("Sheet2!$A$2"),0,0,COUNTA(INDIRECT("Sheet2!$A:$A"))-1,1)
=INDIRECT("Sheet2!$A$2:$A"&(COUNTA(INDIRECT("Sheet2!$A:$A"))))

後者の方が使用関数が少なくマジックナンバーっぽい数値リテラルが出てこない分わかりやすい。

個人的にはINDIRECT関数のみを使う方が使用する関数数も少ないし、OFFSET関数を使うよりセル範囲の間接的指定をしているのだということが明白になるのでいいのではないかと思う、・・・のだけどまあこれは個人の好みの問題にはなる。どちらかが絶対的にシンプルでよりよい解法だというのではない。