いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)行の中で最も右にある値を取得する

 Googleスプレッドシートで、各行に入力されている値のうち最も右にあるものを取得する方法についてです。

  • FILTER関数を用いて、行のうち最も右にある値を取得できます。
  • REGEXEXTRACT関数を用いる方法もありますが、数値も文字列として取得されます。

手順

FILTER関数を用いる方法

f:id:accs2014:20200207060953p:plain:right:w650

 画像ではC3:H7の範囲で各行に入力されている値のうち最も右にあるものを取得しています(I行)。
 I3セルには次のように入力し、下方の行にはフィルコピーしています。

=INDEX(FILTER(C3:H3,C3:H3<>""),COUNTIF(C3:H3,"<>'"))

 FILTER関数で列を抽出できることを利用し、C列からH列のうち空白でないものを抽出します。あとは最も右のものをどう取得するかですが、COUNTIF関数で値の数を数えられますのでこれとINDEX関数とを組み合わせて解決しています。なお、空文字列(="")は取得しません(以下の例にも共通)。
 後半はCOUNTAでもよさそうですが空文字列を数えてしまうため、これがあるときにうまくいきません。
 また、値が全くないと#N/Aになりますので気になる場合はIFNA関数でカバーする必要があります(以下の例にも共通)。

FILTER関数を用いる方法(数値のうち最も右のものを取得)

 I3セルに次のように入力し、下方の行にはフィルコピーしています。

f:id:accs2014:20200208180102p:plain:right:w650

=INDEX(FILTER(C3:H3,ISNUMBER(C3:H3)),COUNT(C3:H3))

 上記の例との違いはFILTER関数の第2引数(条件)が変わっていることとCOUNTIF関数がCOUNT関数に変わっていることです。これにより数値だけを抽出し、そのうち最も右のものを取得することができます。


REGEXEXTRACT関数を用いる方法

f:id:accs2014:20200206013121p:plain:right:w650

 I3セルに次のように入力し、下方の行にはフィルコピーしています。

=REGEXEXTRACT(JOIN(",",C3:H3),"([^,]+),*$")

 一旦すべての列を区切り文字(ここではカンマ)付きの文字列として結合し、区切られた最後の文字列を抽出するというアプローチです。
 参照が1箇所で済むのがメリットですが、数値も文字列として抽出されるため元どおりにしようとすると長くなることと、区切り文字の選択に注意する必要があるのがデメリットです。
 あと、結合後の文字列が数万字に達するとエラーになりますが列方向の結合ですのでその心配は少ないかと思います。