条件に一致する最終行の値を関数で抽出する数式の説明1

本記事はアフィリエイト広告を含みます

このページは「条件が合うもののうち最終行の値を抽出する方法」を解説している3ページ目です。

 

ここでは数式の意味を説明します。

 

まず始めに、計算式のおさらいです。

条件に一致する最終行の値をエクセル関数で抽出

 ちょっと見づらいですが、セルB16には次のような計算式が入っています。

 

{=INDEX($A$3:$E$12,MATCH(LARGE(($D$3:$D$12="A")*1/ROW(B3:B12),COUNTIF($D$3:$D$12,"A")),1/ROW(B3:B12),0),COLUMN(B1))}

 

この計算式から、条件に合った最終行の「セルB11の値」が取り出せるまでの計算の流れを見てみましょう。

1.配列数式とは何かを理解する

 まず大前提としてこの計算式は「配列数式」になっており、「配列数式」とは、「同じ計算を複数セル(配列)に対して行えるもの」です。

 

言葉で説明すると分かりずらいので、例でみてみましょう。

条件に一致する最終行の値をエクセル関数で抽出

 上の表では、3品目の仕入金額の合計を求めています。

 

この時、D列で「仕入単価」×「入り数」の値を出し、それを合計(SUM関数)するやり方が一般的ですが、これだとD列を計算用セルとして使わなければならなくなります。

 

これに対して配列数式は、計算用のセルが必要ありません。

 

{=SUM((B2:B4)*(C2*C4))}

と計算式を入れることで、答えが求められるのです。

 

イメージとしては「配列に計算途中の値(ここでは品目ごとの「仕入単価」×「入り数」の結果)を格納する」で、配列は何かとなるとまた複雑になるので、ここでは語りません。

 

まとめると、『計算用のセルを使わなくても答えが出せる』。

 

それが配列数式なのです。

 

これを今回「MATCH(LARGE(($D$3:$D$12="A")*1/ROW(B3:B12),COUNTIF($D$3:$D$12,"A")),1/ROW(B3:B12),0)」の所で使っていますが、詳しくは後で説明します。

2.「($D$3:$D$12="A")*1」の部分

  ではいよいよ計算式の説明ですが、計算は内側から行われていきますので、ここでも最も内側の部分である「($D$3:$D$12="A")*1」の所から説明していきます。

条件に一致する最終行の値をエクセル関数で抽出

 

「($D$3:$D$12="A")」の計算結果は、以下の表のF列の通りです。

 

条件に一致する最終行の値をエクセル関数で抽出

まず、配列数式なので、D3からD12までそれぞれ条件に対して真か偽かを判定されます。

 

具体的には、「=A」であれば真となり数値の「1」が、「<>総務部」であれば偽であり数値の「0」が立つのです(原則として真は「1」、偽は「0」と判定される)。

 

そして後半の「*1」は、条件が一つの時に必ず付けるものです。

 

なお、複数条件の時には「*1」は必要なく、

「($C$3:$C$12="青森県")*($D$3:$D$12="A")」

のような、「( )*( )」の形になります(何個条件を付けてもOK)。

3.「/ROW(B3:B12)」の部分

 そして次は「/ROW(B3:B12)」の部分です。

条件に一致する最終行の値をエクセル関数で抽出

 

ROWは、「セルの行番号を返す」関数です(ROW関数の基本を知りたい方はコチラ)。

 

ここも配列数式なので、「ROW(B3:B12)」において例えば行番号3「〇〇研修」のセルでは「3」が返ります。

 

つまり、下の表のG列のようになるのです。

 

条件に一致する最終行の値をエクセル関数で抽出

 

 

これらの結果、「($D$3:$D$12="A")*1/ROW(B3:B12)」はそれぞれ「F列÷G列」の値となり、下の表のH列のようになります。

 

条件に一致する最終行の値をエクセル関数で抽出

つまり、

 ① 条件に合わない行の値は0

 ② 条件に合う行の値は下に行くほど小さくなり、ダブりはない

 

という状態になります。

 

またまだ計算式は続きますが、長くなるのでこの後は次のページで説明します。

→ 次のページをご覧になる場合はコチラ

 

  • 条件に合う最終行抽出 各ページへのリンクはこちら
Top