はじめまして
複数範囲の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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
Excel UserForm の表示位置
-
Excel 範囲指定スクショについ...
-
VBAについて
-
Excel VBAでCheckboxの名前を変...
-
Excelで空白セル直前のセルデー...
-
【VBA】写真の貼り付けコードが...
-
エクセルのカーソルを非表示に...
-
【Excel VBA】一番右端セルまで...
-
【ExcelVBA】値を変更しながら...
-
特定の色のついたセルを削除
-
Excel VBA IF文がうまく動作し...
-
マクロ初心者です。 マクロで範...
-
【VBA】【ユーザーフォーム_Lis...
-
HTMLのテーブルのセルの値をPHP...
-
DataGridViewでグリッド内に線...
-
VB.netでのExcelデータの読み込み
-
excelで結合セルの場合にエラー...
-
エクセルの値を範囲指定で取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
特定の色のついたセルを削除
-
Excel UserForm の表示位置
-
Excelで空白セル直前のセルデー...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
【Excel VBA】一番右端セルまで...
-
Excel VBAでCheckboxの名前を変...
-
EXCEL VBA 文中の書式ごと複写...
-
入力規則のリスト選択
-
DataGridViewのフォーカス遷移...
-
【VBA】写真の貼り付けコードが...
-
CellEnterイベント仕様について
-
下記のマクロの説明(意味)を...
-
飛び地セルの空白判定
-
Excel 範囲指定スクショについ...
-
C# DataGridViewで複数選択した...
-
Excel VBA IF文がうまく動作し...
-
エクセルのカーソルを非表示に...
おすすめ情報