空行で無い最終のリストデータを取得


リストから最終位置データ位置を取得したい場合があります。

たとえば、データを入力規則のリストとして利用する場合、
リストの末尾に空白行があると、リストが無駄に長くなり、
データが少ないと空白行が目立つことになります。
 

かといって、手動で最少範囲を指定すると、追加や削除時のメンテナンスが大変です。

リストデータが上に詰まっている場合、これは処理が簡単。
COUNTA関数でデータの数を調べ、OFFSET関数で最少の行(データ個数)を指定するだけで済みます。
 


  サンプル:数式による名前の動的定義

ところが、データリストに空白行がある場合は少々面倒。
VBAを使ってプログラムを作成する場合は、リストの末尾から空白で無い行を検索していく方法で簡単に求められますが、 数式だけで実現しようとすると、工夫が要ります。

ここでは、下図のように、空白で無い最終データの位置に合わせたリストを作成します。
 

メニュー
空白で無い最終データの位置
配列数式で設定
入力規則のリスト作成
入力規則での配列数式について
サンプルファイルのダウンロード

空白で無い最終データの位置



まず、作業表を用いて順番に計算してみます。
データの位置は、行番号を利用できるので、その行番号の最大値求めるデータの位置となることを利用します。

リストの範囲には“LIST”という名前を付けて、この名前を利用して数式を設定。
手順
@データの相対位置を調査
 ただし、空白行の行番号は0
 相対位置はリストの先頭行を1として始める(1を足している)
 (のちに使用するINDEX関数の仕様のため−INDEX関数は1番目から始まるため)
 リストの先頭行番号は、CELL関数で求めることが可

A生成した行リストの中の最大値を求める
B最終データを取出し。


配列数式で設定



前項で作成した数式を配列数式で作成。
少々長い式ですが、1行に収まりました。


入力規則のリスト作成



最終位置がわかれば、それが必要なリストの最少行数となるので、OFFSET関数に組み込んで入力規則を作成します。

@前項で作成した配列数式

A入力規則に組み込み

B全て入力規則に組み込み


入力規則での配列数式について



入力規則では配列数式は使用できないと思っていたら、すんなり使用できました。
しかも、CTRL+SHIFT+ENTER押さなくでも自動で認識するようです。
(前後の { } は表示されない。)

セル上で
 
=MAX(IF(LIST="",0,ROW(LIST)-CELL("row",LIST)+1))
を単純に計算すると、1が返る(配列数式では11)ので、
たしかに、入力規則の中では配列数式として認識されているようです。

どのようにして認識するのか不明ですが・・

×
PageTop