★VBA★CountIFsで手こずった話 のバックアップ(No.1)


やりたいこと

・表1

    A B  

1a
2a
3a
4a×
5b
 
 

・表2

    K   L

1a
2b×
3a
4b×
 

上のような二つの表があったとします。表の左の番号は行番号、上のA,B,K,Lは列番号です。

aと〇両方記入されている行数を数え、別の表にその結果を入力したいです、VBAを使って。

 

表1のみで条件にあてはまる行数を数える

まず、複数条件に当てはまる数を数えたい場合、関数ならCountifsを使うと思います。

じゃあそれをそのままVBAに使えないの?と思いました。

 
 
 

使えませんでした。

 

しかし、ある文字を付け加えることで使えるようになるそうです。

それが

 

WorksheetFunction.

 

です。

 

※使ってるバージョンによっては使えないらしいです。私は2013です。

 
 

結果の入力先をP5として作成するとこんな感じでできました。

Cells(5, 16).Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",Range("b1:b5"), "〇")''

 

左辺は結果の入力先です。

ここを最初、「p5.Value」にしていました。しかし

 

「424 オブジェクトが必要です」

とのエラーがでてしまいました。なにが悪いのかわからん。と憤慨しつつ、とりあえずここをCells(,)にしました。

 

なにが悪かったのかは後で調べるとして...

 
 

表1の結果と表2の結果を足す

 

表1の数は入力できたので次は表2の数と足します。

Cells(5, 16).Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",Range("b1:b5"), "〇")  +  WorksheetFunction.CountIfs(Range(k1":k4"), "a",Range("L1:L4"), "〇")

 

単純に式を+しただけです。

 

この式に行きつくまでのことをだいぶ端折ってしまいましたが、実際は以下のエラーに手こずっていました。