Google Spreadsheetでは、特定の領域の値を持つ行を数える方法はありますか。私がこれまでに見つけたこのことに関するすべてのヒントは、空ではないコンテンツ(数式を含む)を持つ行を数えますが、
=IF(1=2;"";"") // Shows an empty cell
同様にカウントされます。
この単純な作業に対する解決策は何ですか?
私はちょうど=COUNTIF(Range, "<>")
を使いました、そしてそれは私のために空でないセルを数えました。
=counta(range)
counta
: "データセット内の値の数を返します
注:CountA
は、""
を値と見なします。空白のセル(空白にするにはセル内でDeleteキーを押す)だけがカウントされません。
Googleサポート: https://support.google.com/docs/answer/3093991
countblank
: "特定の範囲内の空のセルの数を返します"
注:CountBlank
は、空白セル(セルを空白にするにはDeleteキーを押す)と""
を返す式を持つセルの両方を空のセルと見なします。
Googleサポート: https://support.google.com/docs/answer/30934
""
という結果になる式を含む範囲がある場合は、次の式から式を変更できます。
=counta(range)
に:
=Counta(range) - Countblank(range)
編集:関数はcountblank
で、countblanks
ではなく、後者はエラーになります。
=CountIf(ArrayFormula(range<>""),TRUE)
=A1<>""
は直感的に空白セル、つまり未使用の空白または作成された空白のどちらを考えるかに基づいて正しい真偽値に到達するように思われるため、 eniacAvengerによる回答 はEdgeのケースを気にせずに正しい解決策をもたらします。
そのため、このデータがあり、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列Cを当てにした場合、Bの値の数は次のようになります。
=COUNTIF(C2:C6,True)
FormulaArray
を使用して追加の列を動的に作成するしかし、 ConsideRatio's comment は有効なものです - 追加の列が必要な場合は、シートスペースを占有することなくメモリ内に列を作成できる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)
このスレッドの他の解決策は、過度に複雑であるか、またはこのテストシートで列挙した特定のEdgeのケースでは失敗します。
なぜCountA
がうまく動かないのか、 私の答えはこちら を見てください。
私にとっては、バージンセルと数式に基づいて空のセルの両方を含む範囲(例:=IF(1=2;"";"")
)に対しては、どの答えもうまくいきませんでした。
私にとってそれを解決したのはこれです:
=COUNTA(FILTER(range, range <> ""))
私は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列に配置すると、このようになります。
私のために働くより簡単な解決策:
=COUNTIFS(A:A;"<>"&"")
空ではない数、文字列、日付などを数えます。
A:A
の範囲を考えると、Idは次のことを提案しています。
=COUNTA(A:A)-(COUNTIF(A:A,"*")-COUNTIF(A:A,"?*"))
問題はCOUNTAが長さゼロの文字列""
を持つセルの数だけオーバーカウントしていることです。
解決策は、正確にこれらの細胞の数を見つけることです。これは、すべてのテキストセルを検索し、少なくとも1文字のテキストセルすべてを減算することによって見つけることができます
""
を含むが真に空のセルを除く、値を持つセル""
を含み、真に空白のセルを除く、テキストとして認識されるセルつまり、値COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")
は、テキストセルの数から1文字以上のテキストセルの数を引いた値、つまり正確に""
を含むセルの数になります。
私が見ることができる限り、ここでの解決策のほとんどは空でないセルの数を数え、中に空でないセルを持つ行の数は数えません。
範囲B3:E29
のための1つの可能な解決策は例えばです
=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
(else)の列を返します。
もう1つは consideRatioの答え にあります。
それは私のために働いています:
=SUMPRODUCT(NOT(ISBLANK(F2:F)))
F2から列の終わりまでのすべての空でないセルの数
そのようなことをするための非常に柔軟な方法はARRAYFORMULAを使うことです。
例として、空でない文字列(テキストフィールド)を数えたいとします。このコードを使うことができます。
=ARRAYFORMULA(SUM(IF(Len(B3:B14)>0, 1, 0)))
ここで何が起こるかというと、 "ArrayFormula"によって一連の値を操作できます。 SUM関数を使用して、セットの任意の値を合計するために "ArrayFormula"を指定します。 "If"節は "empty"または "not empty"をチェックするためだけに使用され、1は空でないことを意味し、それ以外は0です。 "Len"はさまざまなテキストフィールドの長さを返します。確認したいセット(範囲)を定義する場所があります。最後に "ArrayFormula"は "len"が0以上を返す集合(範囲)内の各フィールドに対して1を合計します。
他の条件をチェックしたい場合は、IF句の最初の引数を変更するだけです。
例えばnumNonEmptyRows
と呼ばれるApps Script(Tools> Script editor)を使用してカスタム関数を定義できます。
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
の範囲の空でない行の数を数えます。
Googleスプレッドシートで、2次元の範囲内に空でないセルを少なくとも1つ含む行数を数えるには、次のようにします。
=ARRAYFORMULA(
SUM(
N(
MMULT(
N(A1:C5<>""),
TRANSPOSE(COLUMN(A1:C5)^0)
)
>0
)
)
)
A1:C5が空でない行をチェックしている範囲です。
式はEXCELXORから来て、次の記事で説明されています - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met /