Excelで各行の数値の合計が0より大きい場合にのみ、配列の行数をカウントするにはどうすればよいですか?


3

Excelに乱数(A2からET361など)を含む150列x 360行の配列があります。

各列(つまり、セルB1からET1まで)の前にある列でゼロより大きい行数を計算するにはどうすればよいですか?

基準:

B1は、0より大きいセル数(A2からA361)を計算する必要があります。
C1は、各行の合計が> 0である行数(A2:B2、A3:B3、...、A361:B361)を計算する必要があります。
D1は、各行の合計が0より大きい行数(A2:C3、...、A361:C361)を計算する必要があります。

COUNTIF数式を使用してみましたが、行数ではなくセル数のみを返します。
ネストされたROWS()およびIF()式が必要だと思いますか?また、Excelファイルのスペースを節約したいので、この問題に対処するために別の150 x 360マトリックスを作成したくありません。

また、スプレッドシートが複雑になるため、マクロとVBAを使用したくありません。


方程式全体に複雑さを追加したため、小計機能が機能しません。

マトリックス内の各セルについて、各行の列の合計がゼロより大きい、その上の行の数を計算する必要があります。「小計」式は「小計」式を持つセルでは機能しないため、この例ではバリーによるソリューションは機能しません(私はそれをテストしました)。

他の選択肢はありますか?


わかりやすくするために、質問を編集しました。間違った場合は修正してください。
スコット

回答:


2

単一の数式ソリューションを考え出すことはできませんでしたが(誰か他の人がそうするかもしれません!)、スプレッドシートの占有面積が他の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 AnalysisData 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関数を使用して、元のデータの最初の行にカウントを転送しました。

最終結果

すべての計算を含むワークシートの例は、ここから入手できます


2

OFFSET関数を使用すると、範囲内の個々の行を分離することができます...そして、各行を合計SUBTOTALしてSUMPRODUCT、> 0で行をカウントすることができますので、B1のこの式はヘルパーセルなしでジョブを実行する必要があります

=SUMPRODUCT((SUBTOTAL(9,OFFSET($A2:A2,ROW(A2:A361)-ROW(A2),0))>0)+0)

ここで説明したものと同様の手法を使用します [ ここにはフィルタリングはありませんが、OFFSETによって生成された各範囲を合計するためにSUBTOTALを使用する必要があります]

チャフのソリューションと同じ結果が得られます


1

あなたが何を求めているかを正しく理解している場合、一番上の行に、各列の前にあるすべての列の値が0より大きい個々のセルの総数を表示する必要があります。右?

その場合、これは参照をロックするCountIfために$記号を使用および使用する非常に簡単です。

セルB1に入力し=CountIf($A2:A361,">0")ます。クリックして右にドラッグします。$記号はロックしA、それが常に列Aと現在の列の間のすべてを数えていますように。数式は、ドラッグすると次のようになります。

  • C1 =Countif($A2:B361,">0")
  • D1: =Countif($A2:C361,">0")
  • E1: =Countif($A2:D361,">0")
  • 等...

CountIf範囲全体を数えることができるので、一度に1つのセルまたは数式を選択する必要はありません。したがって、この方法で使用すると、現在の列の左側にあるすべてのセルを簡単にカウントできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.