列の最後の(最大ではない)値を返す方法があるかどうか疑問に思うかもしれません。たとえば、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から対応する値を返すために機能します。

データの範囲に数値と非数値が混在している場合(および、場合によっては、範囲内にいくつかの空白セルが混在している場合でも)、次の数式を検討できます。

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

この式がどのように機能するかは、最初は明らかではないかもしれません。 ISBLANK部分は、セルが空白であるかどうかに応じて、列Aの各セルのTrueまたはFalse値を含む配列を返します。そのTrueまたはFalse値(実際には1または0)が1から減算されるため、True値は0になり、False値は1になります。

次のステップは、1または0の値を1 / xの被除数として使用することです。これにより、値が効果的に「反転」され、最終的に1(1/1)または#DIV / 0になります。エラー(1/0)。これは、LOOKUP関数のパラメーターとして使用される配列であることに注意してください。配列で検索されているのは値2であり、そこには存在しません。 (配列には値1またはエラー値のみが含まれることに注意してください。)LOOKUP関数は実際には配列内のすべてのエラー値を無視するため、次を含む最後の配列要素の範囲A:A内のオフセットを返します。 1の値。これは、空白ではない範囲の最後のセルに対応します。

お分かりのように、列の最後の値を返すと、少し注意が必要になる場合があります。クリーンなアプローチは、目的の値を返す独自のVBA関数を開発することです。この場合、数値だけでなく任意の値を返すように関数をプログラムできます。このような関数の良い例は、JohnWalkenbachのWebサイトにあります。以下をチェックしてください:

http://spreadsheetpage.com/index.php/tip/determining_the_last_non_empty_cell_in_a_column_or_row/

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

このヒント(2512)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。