プロが教える店舗&オフィスのセキュリティ対策術

countif関数で離れた場所を検索範囲にしたいのですが、いい方法がありますか?

普通に範囲指定するとA1:F6のようにはできますよね。
2列おきに範囲指定するよい方法はないかと思っています。どなたか教えていただけませんか?


 A B C D E F





A 回答 (2件)

CountIf関数は範囲を1つしか指定できないようですが


2つ以上の範囲指定をできるようにして見ました(ユーザー関数を作りました。)
ツール-マクロ-VBE(ここでVBE画面に変る)-挿入-標準モジュール-(ここで出ている画面に)下記のコードをコピペする。
Function countx(a As String, b As String)
d = Split(a, ",")
c = 0
For i = 0 To UBound(d)
c = c + Application.WorksheetFunction.CountIf(Range(d(i)), b)
Next i
countx = c
End Function
そしてワークシートに戻り、答えを入れたいセルに
=countx("A2:A9,C2:C9,D2:D9",">20")のようにいれて
下さい。
A2:A9,C2:C9,D2:D9の部分は(A)(前後)両端を””(半角)で括ること(CountIf関数と違う点)(B)範囲を並べるとき、区切りを半角カンマ(,)で区切ること
(C)カンマで区切って入れる数は10や20までなら制限なしと思う、でお願いします。範囲は列に拘ることなく、規則性なく、指定しても良い。
例 "A2:A3,C2:C9,E2:E9,D5:D5"など。
    • good
    • 1

いくつか考えてみました。


 (COUNTIF1つで出来る方法は見つかりませんでした。)
気に入る方法があればいいですけど。

1.範囲毎に分ける
=COUNTIF(A1:A6,">5")+COUNTIF(D1:D6,">5")
又は
=SUMPRODUCT((A1:A6>5)+(D1:D6>5))

2.Mod関数とColumn関数を利用する。
  列番号を3で割った時の余りが1で、値が5より大きいセルの個数
=SUMPRODUCT((MOD(COLUMN(A1:F6),3)=1)*(A1:F6>5))
  (こちらは普通の関数。入力後、[Enter]で確定)
又は
=SUM((MOD(COLUMN(A1:F6),3)=1)*(A1:F6>5))
  (こちらは配列数式。入力後、[Enter]の代わりに[Ctrl]+[Shift]+[Enter])

3.VBAでユーザー関数を作成
=Countif2(">5",A1:A6,D1:D6)
(Countif2(条件,セル範囲1,セル範囲2,・・・・)

標準モジュール
Function COUNTIF2(条件, ParamArray セル()) As Long
  Dim i As Long
  For i = 0 To UBound(セル)
    COUNTIF2 = COUNTIF2 + Application.WorksheetFunction.CountIf(セル(i), 条件)
  Next i
End Function

すべて同じ結果になります。
・SUMPRODUCTと配列数式は列全体の指定は出来ません。A:F等
・2列分位なら範囲毎に指定してもいいと思います。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!