Googleスプレッドシート:値を持つ特定の領域の行を数えるにはどうすればよいですか?これまでに私が見つけたすべてのヒントは、空のコンテンツ(式を含む)を含む行をカウントする式につながりますが、
=IF(1=2;"";"") // Shows an empty cell
もカウントされます。
この単純なタスクの解決策は何ですか?
Googleスプレッドシート:値を持つ特定の領域の行を数えるにはどうすればよいですか?これまでに私が見つけたすべてのヒントは、空のコンテンツ(式を含む)を含む行をカウントする式につながりますが、
=IF(1=2;"";"") // Shows an empty cell
もカウントされます。
この単純なタスクの解決策は何ですか?
回答:
関数「CountBlank」を使用して、参照されるセルが空白かどうかを判断する別の列を作成します。次に、新しい「CountBlank」列に作成された値のカウントを使用します。
私はちょうど使用し=COUNTIF(Range, "<>")
、それは私のために空でない細胞を数えました。
=COUNTIF(Range,"?*")
=counta(range)
counta
:「データセット内の値の数のカウントを返します」
注:は値CountA
と見なさ""
れます。空白のセルのみを削除します(セルを削除するには、セルを押して削除します)。
Googleサポート:https : //support.google.com/docs/answer/3093991
countblank
:「指定された範囲内の空のセルの数を返します」
注:CountBlank
両方の空白のセルは、リターンがその式を有する細胞(プレスが空白セルに削除)を考慮""
すべき空のセル。
Googleサポート:https : //support.google.com/docs/answer/3093403
結果がである数式を含む範囲がある場合、数式を""
次のように変更できます
=counta(range)
に:
=Counta(range) - Countblank(range)
編集:関数はcountblank
、ではなくcountblanks
、後者はエラーになります。
=CountIf(ArrayFormula(range<>""),TRUE)
eniacAvengerによって答えは、エッジの例を気にすることなく、正しい解が得られます=A1<>""
、我々は直感的に空白のセルをどのように考えるかに基づいて、正しいtruthy / falsy値に到達すると思われる、処女空白または作成された空白のいずれかを。
したがって、このデータがあり、次の空白以外のカウントが必要だとしB2:B6
ます。
| | A | B | C |
|---|-------------|-------|---------|
| 1 | Description | Value | B1<>"" |
| 2 | Text | H | TRUE |
| 3 | Number | 1 | TRUE |
| 4 | IF -> "" | | FALSE |
| 5 | IF -> Text | h | TRUE |
| 6 | Blank | | FALSE |
列Cに依存している場合、次のようにBの値の数を取得できます。
=COUNTIF(C2:C6,True)
FormulaArray
して動的に追加の列を作成するただし、consideRatioのコメントは有効です。追加の列が必要な場合は、ArrayFormula
シートスペースを消費することなくメモリ内に列を作成できるで同じ目的を達成できることがよくあります。
したがって、Cを動的に作成する場合は、次のような配列数式を使用できます。
=ArrayFormula(B2:B6<>"")
単純にC2に配置すると、ペンの1回のストロークで垂直配列が作成されます。
| | A | B | C |
|---|-------------|-------|--------------------------|
| 1 | Description | Value | =ArrayFormula(B2:B6<>"") |
| 2 | Text | H | TRUE |
| 3 | Number | 1 | TRUE |
| 4 | IF -> "" | | FALSE |
| 5 | IF -> Text | h | TRUE |
| 6 | Blank | | FALSE |
しかし、それが解決されたので、値を表示するだけの列は必要なくなりました。
ArrayFormula
次の範囲に解決されます:{True,True,False,True,False}
。
CountIf
任意の範囲を取るだけで、この場合はTrue値の数をカウントできます。
したがってCountIf
、次のArrayFormula
ようにして生成された値をラップできます。
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
このスレッドの他のソリューションは、非常に複雑であるか、このテストシートで列挙した特定のエッジケースで失敗します。
なぜCountA
動作がおかしいのかについては、ここで私の答えを参照
ArrayFormula(...)
を変更して、CountIf
提案したとおりに内部の値の配列を返す方が簡単だと考えています。回答とスプレッドシートのデモを更新しました。どちらも同じことをしますが、清潔さは次善点です。
私にとって、式に基づいて未使用のセルと空のセルの両方を含む範囲に対しては、どの回答も機能しませんでした(例=IF(1=2;"";"")
)
私にとってそれを解決したのはこれです:
=COUNTA(FILTER(range, range <> ""))
Filter()
すべての要素を見つけることができません、それが返され#N/A
たCOUNTA()
要素として扱いをし、カウントがゼロでなければならない場合でもそう常に、1を返します。Googleスプレッドシートの例
=COUNTA(filter({1;range},{1;range}<>"")) - 1
Yogi Anandがグーグルで見つけたソリューションを使用して解決:https : //productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ
以下の例では、範囲A3:Cの空でない行の数をカウントしています。目的の範囲で数式の両方の範囲を更新することを忘れないでください。
=ArrayFormula(SUM(SIGN(MMULT(LEN(A3:C), TRANSPOSE(SIGN(COLUMN(A3:C)))))))
また、循環依存関係を回避するようにしてください。たとえば、A:Cの空でない行の数を数え、この式をAまたはC列に配置すると発生します。
範囲を指定するとA:A
、Idは以下を提案します。
=COUNTA(A:A)-(COUNTIF(A:A,"*")-COUNTIF(A:A,"?*"))
問題は、長さ0の文字列を持つセルの数だけCOUNTAが過大にカウントすること""
です。
解決策は、これらのセルの数を正確に見つけることです。これは、すべてのテキストセルを探し、少なくとも1つの文字を含むすべてのテキストセルを差し引くことで見つけることができます。
""
真に空のセルをが除外するセル""
空白のセルを含むが除外する、テキストとして認識されたセルこれは、値COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")
がテキストセルの数から少なくとも1つの文字を含むテキストセルの数を差し引いたもの、つまり正確に含まれるセルの数であることを意味します""
私の知る限り、ここでのほとんどの解決策は、空でないセルの数を数え、空でないセルが内部にある行の数は数えません。
範囲の1つの可能なソリューションB3:E29
は、たとえば
=SUM(ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1)))
ここでArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))
は0
(行が空の場合)の列を返し、1
(他)。
もう1つは、consideRatioの回答に記載されています。
たとえばnumNonEmptyRows
次のように呼び出されるApps Script([ツール]> [スクリプトエディター])を使用してカスタム関数を定義できます。
function numNonEmptyRows(range) {
Logger.log("inside");
Logger.log(range);
if (range && range.constructor === Array) {
return range.map(function(a){return a.join('')}).filter(Boolean).length
}
else {
return range ? 1 : 0;
}
}
次に、このようなセルで使用して=numNonEmptyRows(A23:C25)
、範囲内の空でない行の数をカウントしますA23:C25
。
そのようなことを行う非常に柔軟な方法は、ARRAYFORMULAを使用することです。
例として、空でない文字列(テキストフィールド)をカウントしたい場合、次のコードを使用できます。
=ARRAYFORMULA(SUM(IF(Len(B3:B14)>0, 1, 0)))
ここで発生するのは、「ArrayFormula」を使用すると、一連の値を操作できます。SUM関数を使用して、セットの任意の値を合計する「ArrayFormula」を指定します。「If」句は、「空」または「空ではない」をチェックするためにのみ使用され、1は空ではないことを、そうでない場合は0をチェックします。「Len」は、さまざまなテキストフィールドの長さを返します。確認するセット(範囲)を定義する場所があります。最後に、「ArrayFormula」は、「len」が0を超える値を返すset(range)内のフィールドごとに1を合計します。
他の条件を確認する場合は、IF句の最初の引数を変更するだけです。