単一の数式ソリューションを考え出すことはできませんでしたが(誰か他の人がそうするかもしれません!)、スプレッドシートの占有面積が他の150 x 360マトリックスよりもはるかに少ないものを思い付きました。
基本的な考え方は、データの1つの列の各行の累積合計を計算し、それをデータテーブル(「what-if分析」)で使用して、すべての列のカウントを生成することです。
開始点は、単一のデータ列の行の計算の列です。
以下のスクリーンショットに示すように、10列のデータを含むワークシートを設定します。
ヘルパー列
データの右側に、ヘルパー列Lを設定しました。
セルL1にはCOUNTIF
、その列の合計がゼロより大きい行が含まれます。
行の合計については、各行の列の単純な合計ではなく(ここでも列Aのみ)、OFFSET
関数によって返される範囲の合計を使用します。この関数の形式は
OFFSET(reference cell, number of rows to offset, number of columns to offset,
height of range to return, width of range to return)
セルL3には最初のSUM(OFFSET(...))
式があります。セルA2から0行下、右に0列の範囲の行合計を計算します。高さ1行、幅はセルL2の値に等しくなります。この場合、L2の値は1です。
この式は360行にわたってコピーされ、それぞれの場合、範囲1行の高さと、セルL2の値によって決定される幅の合計を計算します。
たとえば、L2の値が2に変更された場合、列の数式は360行ごとにA列とB列の値の行ごとの合計を計算します。また、セルL1は、A2:B361の範囲の行数を示し、合計が0を超えます。
データ表
Excelのデータテーブル機能を使用すると、計算への入力の1つ(または2つ)の値を変化させることによる計算への影響をすばやく判断できます。リボンのタブWhat-If Analysis
のData Tools
セクションにあるボタンを使用して設定しData
ます。
添付の図は、データテーブルのセットアップを示しています。
データテーブルはR1:S10の範囲で作成されます。表の一番上のセルS1は、入力が変化する結果セルです。この場合、結果セルは数式を保持します=L1
。これはCOUNTIF
、ヘルパー列Lの上部にある数式への単なる参照です。
セルR2:R10に「what-if」値を事前に入力しました。表示される値-1、2、...、9-は、OFFSETが返す範囲の幅を表します。また、「列入力セル」はcell L1
です。これは、ヘルパー列で合計される行の幅を決定するセルです。
簡単に言うと、幅1〜9(列「A」、「A:B」、「A:C」などに相当)を入力すると、データテーブルは合計が0より大きい行の数を計算しますそれらの列のスパンごとに。
最後の写真は最終結果を示しています。データテーブルは、入力データの各列の行カウント、つまり、0より大きい(前の列の)行ごとの合計のカウントを計算しました。これらのカウントは、データのセルS2:S10に返されましたテーブル。TRANSPOSE
関数を使用して、元のデータの最初の行にカウントを転送しました。
すべての計算を含むワークシートの例は、ここから入手できます。