
はじめまして
複数範囲のCOUNTIFがしたくて、過去ログ、WEBなどで試しましたが、書かれている内容が難しいです。なら自分で作ってしまおうと思い作ってわからないことは質問などして勉強しようと思いましたが、動いてしまって、知識のない私では、これで正しい書き方なのか、たまたま動いてるのかがわからないです・・・・
有識者の意見をお聞かせください。
下記がPGです。
よろしくお願いします。
Function CountIf改(xRange, ParamArray xArgumentAry() As Variant) As Integer
Dim strA As Variant
Dim intCount As Integer
For Each strA In xArgumentAry
intCount = intCount + Application.WorksheetFunction.CountIf(xRange, strA)
Next
CountIf改 = intCount
End Function
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#3です。
引数を配列にしてやってみました。標準モジュールに
Function mcountX(ParamArray args()) As Integer
t = 0
For i = 0 To UBound(args) - 1
t = t + WorksheetFunction.CountIf(Range(args(i + 1)), args(0))
Next i
mcountX = t
Exit Function
End Function
シートのセルに
=mcountX("a","A1:A5","D1:D6","B11:C12")
のように入れる。COUNTIF関数と違い、COUNTIF関数の第2引数を最初に持ってきて、必須項目の位置が浮動するを防いだ(FIND関数などは探す文字数字を、第1引数・最初に持ってくる例あり)
#3と似た例でテスト
A1:A5
a
s
d
3
a
D1:D6
ー(空白)
ー
ー
3
a
s
B11:C12
2a
wa
結果
5
回答ありがとうございます。
貴重な意見ありがとうございます。
まだ、コードを見ても理解できないので、デバッグで追いながら勉強します。
No.3
- 回答日時:
EXCEL関数のセル範囲を指定する引数に飛び離れた複数範囲を指定することは、ほとんどカバーされてないのです。
やっとCOUNTIFSが増えて条件の数に目が向いたぐらいで、複数と言う県で積極的ではないようだ。
ーーーー
VBAで作ってしまおうと言う気持ちもわからなくは無い。
ーー
まず考え付くのが範囲名の応用が出来ないかだ。
飛び離れた複数範囲に1つのセル範囲の名前を定義は出来る。
しかし =COUNTIF(範囲1,"a") は#VALUEエラーになる。
ーー
Sub test01()
Dim rg As Range
For Each rg In Range("範囲1")
MsgBox rg
Next
End Sub
で指定した範囲のセルは捕まえられるのは良く知られている。
これを単位範囲(重複の無い矩形のセル範囲)づつを捉えられないかやってみた。
Sub test02()
t = 0
Dim rg As Range
For Each rg In Range("範囲1").Areas
MsgBox rg.Address
t = t + WorksheetFunction.CountIf(rg, "a")
Next
MsgBox t
End Sub
A1:A5
a
s
d
3
a
D3:D6に
3
a
s
B11:C12に
2a
w3
を入れて範囲1という名前をつけてテストした。
結果
4と表示された。
本番ではMSGBOXは省き、
これ全体をユーザー関数化すれば良いと思う。
ーー
COUNIFの引数では無く、ユーザー関数の引数で、A1:A5,B3:c5・・など表現できないか考えて見ますがとりあえず。
回答ありがとうございます。
まず、最初に謝らなくてはなりません。
言葉足らずで、imogasi様の時間を無駄にして申し訳ありません。
言葉足らずとは、「複数選択」ではなく、「複数条件」でした。
申し訳ありませんでした。
以後気をつけます。
貴重な意見を頂きありがとうございます。
コードを見ても、理解できないので後日デバッグで追いながら勉強します。
複数範囲、複数条件で、できないものかと考えましたが、無理でしたので最初に複数条件ができないものかと作成しました。
私のない頭で考えたのが、複数範囲は、提示していただいた方法でできそうな気がします。(コードが理解できないですが・・・)
複数条件は、設定シートを作成して、条件リストを作成し、その条件を読み込んで処理する。とできるかなと考えました。
まずは、VBAの基礎の勉強です。
No.2
- 回答日時:
どういう関数を作りたいのか分からないのですが、示された関数は、個々の条件を満たす個数を単純合計しているだけです。
=CountIf改(A1:A5, "=10", "=20")
のような使いかたは問題ありませんが、
=CountIf改(A1:A5, ">=10", "<=20")
の場合は、思い通りの結果を返していますか?
たとえば、
5
8
12
15
24
という数値がセルにあった場合、上記の計算式は10以上の個数と20以下の個数の合計=7 を返します。
=CountIf(A1:A5, ">10")+CountIf(A1:A5, "<20")
と同じです。
回答ありがとうございます。
まず、最初に謝らなくてはなりません。
言葉足らずで、nag0720様の時間を無駄にして申し訳ありません。
言葉足らずとは、「複数選択」ではなく、「複数条件」でした。
申し訳ありませんでした。
以後気をつけます。
貴重な意見を頂きありがとうございます。
引用-----
どういう関数を作りたいのか分からないのですが、示された関数は、個々の条件を満たす個数を単純合計しているだけです。
引用-----
まさにその通りです。
>=CountIf(A1:A5, ">10")+CountIf(A1:A5, "<20")
の結果を返したかったのです。条件はもうちょっと多いですが。
>=CountIf改(A1:A5, ">=10", "<=20")
検証してみます。
No.1
- 回答日時:
ん? これでほんとに動いていますか?
エラーが返されると思うのですが。。。。
>Application.WorksheetFunction.CountIf(xRange, strA)
CountIFの引数は、(範囲、検索条件)の順序ですから
この、xRangeとstrAが逆では?
Application.WorksheetFunction.CountIf(strA, xRange)
●変数名●をちょと工夫する必要がありそうです。
また、
>Function CountIf改(xRange, ParamArray xArgumentAry() As Variant) As▲Integer▲
これだと関数の戻り値が整数になってますので
整数の範囲(32767)を超えるようなことがありそうなら、
(2,147,483,647)まで計算できる長整数型(Long)にしておきましょう。
その場合は言わずもがなのことですが、intCountもLongに。
ま、最初から、Longにしておけばいいことですが。
上記以外はOKだと思います。
以上、ここまで。
回答ありがとうございます。
まず、最初に謝らなくてはなりません。
言葉足らずで、myRange様の時間を無駄にして申し訳ありません。
言葉足らずとは、「複数選択」ではなく、「複数条件」でした。
申し訳ありませんでした。
貴重な意見を頂きありがとうございます。
引用-----
これだと関数の戻り値が整数になってますので
整数の範囲(32767)を超えるようなことがありそうなら、
(2,147,483,647)まで計算できる長整数型(Long)にしておきましょう。
その場合は言わずもがなのことですが、intCountもLongに。
ま、最初から、Longにしておけばいいことですが
引用-----
気づきませんでした。
以後気をつけます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBA 税率を判定表する方法を教えて下さい。 10 2022/03/28 11:21
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) エクセルVBAで以下のようなコードを書いたらエラーになりました。何処が間違っているの教えて? 1 2023/02/10 18:30
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
特定の色のついたセルを削除
-
Excel UserForm の表示位置
-
DataGridViewでグリッド内に線...
-
【ExcelVBA】値を変更しながら...
-
エクセルVBA 配列からセルに「...
-
複数指定セルの可視セルのみを...
-
EXCEL VBA 文中の書式ごと複写...
-
DataGridViewのフォーカス遷移...
-
Excel 範囲指定スクショについ...
-
C# DataGridViewで複数選択した...
-
Excelで空白セル直前のセルデー...
-
【VBA】【ユーザーフォーム_Lis...
-
データグリッドビューの結合セ...
-
【Excel VBA】マクロで書き込ん...
-
Excel VBAで特定の範囲の空白セ...
-
下記のマクロの説明(意味)を...
-
Excel VBA IF文がうまく動作し...
-
VBAを用いた散布図グラフの線種...
-
マクロ初心者です。 マクロで範...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excel UserForm の表示位置
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
複数指定セルの可視セルのみを...
-
C# DataGridViewで複数選択した...
-
【Excel VBA】マクロで書き込ん...
-
データグリッドビューの結合セ...
-
DataGridViewのフォーカス遷移...
-
Excel 範囲指定スクショについ...
-
【Excel VBA】一番右端セルまで...
-
EXCEL VBA 文中の書式ごと複写...
-
【VBA】写真の貼り付けコードが...
-
QRコード作成マクロについて
-
入力規則のリスト選択
-
CellEnterイベント仕様について
-
エクセル、マクロで番号を読込...
おすすめ情報