列の最後の(最大ではない)値を返す方法があるかどうか疑問に思うかもしれません。たとえば、A1からA5に値がある場合、A5の値を返すことができます。後で、A6からA8に値が追加された場合は、A8の値が返されます。

解決策に取り組むには、いくつかの方法があります。 1つ目は、次のような式を使用することです。

=INDEX(A:A,COUNT(A:A))

この数式は、値が(この場合)A1で始まる場合、列の最後の数値を返します。このアプローチは、列のすべての値が数値である場合にのみ機能します。値が数値でない場合、または値と混合された空白セルがある場合は、別のアプローチが必要です。 1つの方法は、値を含む可能性のあるセルのすぐ右側の列Bに次の数式をコピーすることです。

=IF(ISNUMBER(A2),IF(A2<>0,ROW(A2),""),"")

この場合、数式は、ゼロより大きい数値を含むAのセルの行番号を返します。次に、次の式を使用して、列Aの最後の値を取得できます。

=INDEX(A:A,MAX(B:B))

この数式は、列Bから最大の行番号を返し、それをインデックスとして使用して列Aから対応する値を返すために機能します。

ヘルパー列を使用したくない場合(ここで列Bで行われているように)、列Aに数値と非数値が混在している場合は、次の数式を使用できます。

=LOOKUP(2,1/(1-ISBLANK(A:A)),A:A)

この式は少し説明が必要かもしれません。 ISBLANK(A:A)部分は、値を含む列Aのセルに対応する各スポットのFALSE値と、空白の列Aのセルに対応する各スポットのTRUE値をリストする配列を返します。次に、これらのTRUE / FALSE値が1から減算され、TRUE / FALSE値ではなく0/1値に変更されます。

次に、この配列は1を0/1の値で除算することによって「反転」され、列Aの値と#DIV / 0がある場合は常に1を含む配列になります。列Aに空白のセルがある場合は常にエラー。最後に、LOOKUP関数は配列内の値2を探します。それは見つかりません(配列には1とエラーしかない)ので、リストの最後の「1」を返し、それによって列から最後の非空白値をフェッチします。

お分かりのように、列の最後の値を返すと、少し注意が必要になる場合があります。クリーンなアプローチは、目的の値を返す独自のVBA関数を開発することです。この場合、数値だけでなく任意の値を返すように関数をプログラムできます。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(9008)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。