いきなり答える備忘録

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

(Excel)一番下にある値を取得する

 Excelで、指定した列のうち値が存在する(空白でない)最後の行の値を取得する方法についてです。
 途中に空白セルがあっても取得できますし、数値・文字列いずれも取得できます。

  • XLOOKUP関数を使って列の一番下の値を取得できます。
  • FILTER関数とINDEX関数等を使う方法もあります。

手順

XLOOKUP関数を用いる方法

f:id:accs2014:20200730230314p:plain:right:w450

 画像ではB列に動物の名前が並んでいます(ところどころ空白があることに注意してください)。
 D3セルに式を入力し、B列に並んでいる名前の中で最も下にある名前を取得しています。

 式の内容は次のとおりです。

 D3セル

=XLOOKUP("?*",B:B&"",B:B,,2,-1)

 第1引数(検索値)を「"?*"」、第4引数(比較モード)を「2」とすることで「1文字以上の文字列」を検索するワイルドカードの検索を行っています。さらに第5引数を「-1」とすることで下からの検索を行っています。これにより存在するもののうち一番下にある値が取得できるというわけです。
 第2引数(検索範囲)が「B:B&""」となっているのは数値を文字列とみなして検索するためです。ただの「B:B」だと一番下の値が数値である場合に検索に引っ掛かりません。一方、第3引数は「B:B」なので、数値は数値として取得することができます。
 なお、B列全体(B:B)を参照していますので、B3セル以降がすべて空白の場合は「動物」という文字を取得してしまいますので注意してください。
 また、この式では空文字列(「=""」など)を取得できません。必要な場合は次の方法(2番目の式)を使うことが考えられます。

FILTER関数とINDEX関数等を使う方法

f:id:accs2014:20201123105120p:plain:right:w550

 上記の例と同じく、B列に動物の名前が並んでいます。
 ここでもD3セルに式を入力し、最も下にある名前を取得しています。

 D3セル

=LET(x,FILTER(B:B,B:B<>""),INDEX(x,ROWS(x)))

 FILTER関数を使って1文字以上の文字が入力されているセルを抽出し、xという名前をつけています(LET関数の機能です)。そしてINDEX関数とROWS関数を組み合わせることによりxの中で一番下のセルの値を取得しています。
 この式でも空文字列(「=""」など)を取得することはできまんが、FILTER関数の第2引数を「ISBLANK(B:B)=FALSE」に変えれば取得することができます。つまり次のようになります。

=LET(x,FILTER(B:B,ISBLANK(B:B)=FALSE),INDEX(x,ROWS(x)))

 なお、ここでもB列全体(B:B)を参照していますので、B3セル以降がすべて空白の場合は「動物」という文字を取得してしまいますので注意してください。