ブライアンには、240個のセルを持つ数字の行があります。この行では、数値は着実に減少しており、最終的には、これらの240セルのある時点で0になります。ゼロは、行の残りのセルを埋め続けます。ブライアンは、行の最後のゼロ以外の値を返す方程式を書く必要があります。

目的の値を返すには、さまざまな方法があります。

(Excelの場合は常にそうであるとは限りませんか?結果を得る方法はたくさんあります。)一般に、通常の数式または配列数式を使用できます。

通常の数式を使用する場合は、次の数式を試すことができます:

=OFFSET(A6,0,(COUNT(A6:IF6)-COUNTIF(A6:IF6,0))-1)

COUNTIF関数はゼロ値の数をカウントし、COUNT関数は範囲内のセルの数を決定します。一方を他方から減算し、1で調整すると、最後のゼロ以外の値が存在するセルの「配列」にOFFSET値が与えられます。この式は、値が列Aで始まることを前提としています。それらが別の列で始まる場合は、最初の列からのオフセットを表すために、数式のCOUNT / COUNTIF部分によって提供される値を調整する必要があります。

範囲の左側ではなく右側からオフセットを行うことに基づいた、数式の短いバリエーションを次に示します。

=OFFSET(IF6,0,-COUNTIF(A6:IF6,0))

この場合、IF6が範囲の実際の右端であることが重要です。この数式は、範囲内のゼロ値の数(すべて範囲の右側)をカウントし、最後のセル(IF6)のセルアドレスからゼロの数を引いたものを計算することで機能します。

代わりに、INDEX関数を使用するバージョンを次に示します。

=INDEX(A6:IF6,,MATCH(0,A6:IF6,0)-1)

このバージョンは、LOOKUP関数を使用してさらに短くなっています:

=LOOKUP(1,1/(6:6>0),6:6)

配列数式も使用できます。 (配列数式はCtrl + Shift + Enterを押して入力します。)これはINDIRECT関数を使用します:

=INDIRECT("R6C" & MAX((A6:IF6>0)*COLUMN(A6:IF6)),FALSE)

この配列数式は、LOOKUP関数の興味深い実装を使用して、正しい結果を見つけます。

=LOOKUP(9.99999999999999E+307,IF(A6:IF6<>0,A6:IF6))

使用できる別の配列数式を次に示します。今回は、OFFSET関数を使用して、行6の最後のゼロ以外の値を検索します。

=OFFSET(A6,0,MIN(IF(6:6=0,COLUMN(6:6),300))-2)

さらに短いバリエーションがあります:

=MIN(IF(A6:IF6>0,A6:IF6))

これまでに提示されたこれらの数式はすべて、行の数値が実際に減少するという事実に依存しています。つまり、最初の数値が何であれ、着実にゼロに向かっていきます。数値が減少しない場合は、別のタイプの配列数式を使用して、行の最後のゼロ以外の値を決定できます。

=INDEX(6:6,MAX(IF(A6:IF6<>0,COLUMN(A6:IF6))))

数式は、最初にゼロに等しくない値を持つ行(この場合は行6)の最大列を決定し、次にINDEX関数を使用してその行のその列から値を取得します。

お分かりのように、行の最後のゼロ以外の値を見つける方法はたくさんあります。あなたの空想を打つものを選んでください。この場合、正しいことも悪いこともありません。

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

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