いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)一番下にある値を取得する

 Googleスプレッドシートで、ある列のうち最も下に記録されている値を取得する方法についてです。
 途中に空白セルがあっても取得できます。また、文字列と数値のいずれも取得できます。

  • FILTER関数とCOUNTIFS関数を組み合わせて最も下にある値を取得することができます。
  • VLOOKUP関数とSORT関数を組み合わせる方法もあります。

手順

FILTER関数等を使う使う方法

f:id:accs2014:20201122173548p:plain:right:w500

 データはB列に記録されています(正確にはB3セル以降つまり「B3:B」)。値の重複や空白セル(値のないセル)が存在しています。
 そこでE3セルに次のような式を入力し、最も下方に入力されている値を取得しています。

 E3セル

=FILTER(B3:B,COUNTIFS(B3:B,"<>'",ROW(B3:B),">"&ROW(B3:B))=0)

 FILTER関数を使い、B3:Bの範囲のうち「『値が存在し、かつ、より行番号が大きい行』が存在しない行の値」を取得しています。結果的に「値が存在する、最も行番号が大きい行の値」つまり一番下に存在する値が取得できます。
 なお、空文字列(「=""」など)を取得することはできません。これはあえてCOUNTIFS関数を第2引数(条件1)を「"<>'"」としている(「'」を含んでいる)ためで、空文字列を取得するようにするためにはこの第2引数を「"<>"」とすればOKです。

VLOOKUP関数等を使う方法

f:id:accs2014:20201122173553p:plain:right:w500

 データは上記の例と全く同じで、「B3:B」の範囲に記録されています。
 ここではE3セルに次のような式を入力して最も下にある値を取得しています。

 E3セル

=VLOOKUP("?*",SORT(B3:B&"",ROW(B3:B),FALSE),1,FALSE)

 SORT関数を使ってB3:Bの範囲にあるデータを上下逆に入れ替え、VLOOKUP関数を使って最初の(1文字以上の)値を取得しています。
 ワイルドカードが「"?*"」となっているのは空白セルを取得しないようにするためで、SORT関数の第1引数が「B3:B&""」となっているのは数値を取得できるようにするためです。
 こちらの式でも空文字列(「=""」など)を取得することはできません。取得するようにするのも厄介なので、必要な場合は上記のFILTER関数を使う方法(ただしCOUNTIFS関数の第2引数を「"<>"」にする)に頼った方がよさそうです。