★VBA★CountIFsで手こずった話
freeze
やりたいこと
・表1
___A B
1 | a | 〇 |
2 | a | 〇 |
3 | a | 〇 |
4 | a | × |
5 | b | 〇 |
br
・表2
___K L
1 | a | 〇 |
2 | b | × |
3 | a | 〇 |
4 | b | × |
br
上のような二つの表があったとします。表の左の番号は行番号、上のA,B,K,Lは列番号です。
aと〇両方記入されている行数を数え、別の表にその結果を入力したいです、VBAを使って。
br
br
br
br
br
br
br
それと私はかなりの初心者なので以下の方法は参考程度に、もしかしたらもっと簡単で処理の軽い方法があるかもしれないので...
br
表1のみで条件にあてはまる行数を数える
まず、複数条件に当てはまる数を数えたい場合、関数ならCountifsを使うと思います。
じゃあそれをそのままVBAに使えないの?と思いました。
br
br
br
br
br
br
br
br
使えませんでした。
br
しかし調べたところ、ある文字を付け加えることで使えるようになるそうです。
それが
br
WorksheetFunction.
br
です。
br
※使ってるバージョンによっては使えないらしいです。私は2013です。
br
結果の入力先をP5として作成するとこんな感じでできました。
Cells(5, 16).Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",Range("b1:b5"), "〇")
br
br
br
br
左辺を最初「P5.value」としていたのですが、エラーになってしまいました。
なぜなんでしょうか…
br
調べてもよく理解できず...
悲しくなってきたのでCells(,)を入れて解決してしまいましたがなぜなんでしょうか
br
表1の結果と表2の結果を足す
br
表1の数は入力できたので次は表2の数と足します。
Cells(5, 16)''.Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",Range("b1:b5"), "〇") + WorksheetFunction.CountIfs(Range(k1":k4"), "a",Range("L1:L4"), "〇")
br
単純に式を+しただけです。
br
しかし、この式に行きつくまで以下のエラーに手こずっていました。
1004 WorksheetFunctionクラスのCountIfsプロパティが取得できません。
このエラー、調べても解決方法があまり載っていないんですよね。
なので相当悩みました。かなり悩み、式を分離させたりセル番地を変数にしたり。
その結果あることに気づきました。
br
br
br
br
br
br
br
br
範囲違う!!!!
br
セル番号を普通にミスって書いてました...
こんな感じです。
br
Cells(5, 16).Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",Range("b1:b5"), "〇") + WorksheetFunction.CountIfs(Range(k1":k14"), "a",Range("L1:L4"), "〇")
br
あんなに悩んでたのにただのタイプミスとは...