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


  • 追加された行はこの色です。
  • 削除された行はこの色です。
**やりたいこと [#r92708e1]

・表1

    A B  
&size(16){___A B  };
|1|a|〇|
|2|a|〇|
|3|a|〇|
|4|a|×|
|5|b|〇|
#br
#br
・表2

    K   L

___K   L
|1|a|〇|
|2|b|×|
|3|a|〇|
|4|b|×|
#br
&size(16){上のような二つの表があったとします。表の左の番号は行番号};&size(16){、上のA,B,K,Lは列番号です。};

&size(16){aと〇両方記入されている行数を数え、別の表にその結果を入力したいです、};&size(16){VBAを使って。};
#br
#br
#br
#br
#br
#br
#br
それと私はかなりの初心者なので以下の方法は参考程度に、もしかしたらもっと簡単で処理の軽い方法があるかもしれないので...
#br
**&size(16){表1のみで条件にあてはまる行数を数える}; [#q402d12c]

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

じゃあそれをそのままVBAに使えないの?と思いました。
#br
#br
#br
#br
#br
#br
#br
#br
''使えませんでした。''
#br
しかし、ある文字を付け加えることで使えるようになるそうです。
しかし調べたところ、ある文字を付け加えることで使えるようになるそうです。

それが
#br
&size(18){''WorksheetFunction.''};
#br
&size(16){です。};
#br
&size(16){※使ってるバージョンによっては使えないらしいです。私は2013です。};
#br
#br
&size(16){結果の入力先をP5として作成するとこんな感じでできました。};

''Cells(5, 16).Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",Range("b1:b5"), "〇"'')''
''Cells(5, 16).Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",Range("b1:b5"), "〇")''
#br
左辺は結果の入力先です。
#br
#br
#br
左辺を最初「P5.value」としていたのですが、エラーになってしまいました。

ここを最初、「p5.Value」にしていました。しかし
なぜなんでしょうか…
#br
''「424 オブジェクトが必要です」''
調べてもよく理解できず...

とのエラーがでてしまいました。なにが悪いのかわからん。と憤慨しつつ、とりあえずここをCells(,)にしました。
悲しくなってきたのでCells(,)を入れて解決してしまいましたがなぜなんでしょうか
#br
なにが悪かったのかは後で調べるとして...
#br
#br
**表1の結果と表2の結果を足す [#v555ab10]
#br
表1の数は入力できたので次は表2の数と足します。

''&size(16){Cells(5, 16).Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",};Range("b1:b5"), "〇"&size(16){)  +  };&size(16){WorksheetFunction.CountIfs(Range(k1":k4"), "a",};Range("L1:L4"), "〇"&size(16){)};''
Cells(5, 16)''''&size(16){.Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",};Range("b1:b5"), "〇"&size(16){)  +  };&size(16){WorksheetFunction.CountIfs(Range(k1":k4"), "a",};Range("L1:L4"), "〇"&size(16){)};''
#br
&size(16){単純に式を+しただけです。};
#br
&size(16){この式に行きつくまでのことをだいぶ端折ってしまいましたが、実際は以下のエラーに手こずっていました。};
&size(16){しかし、この式に行きつくまで以下のエラーに手こずっていました。};

**&br;1004 &size(16){WorksheetFunctionクラスのCountIfsプロパティが取得できません。}; [#b2dea21c]

&size(16){このエラー、調べても解決方法があまり載っていないんですよね。};

&size(16){なので相当悩みました。かなり悩み、式を分離させたりセル番地を変数にしたり。};

&size(16){その結果あることに気づきました。};
#br
#br
#br
#br
#br
#br
#br
#br
''&size(16){&size(18){範囲違う!!!!};};''
#br
セル番号を普通にミスって書いてました...

こんな感じです。
#br
&size(16){Cells(5, 16).Value = WorksheetFunction.CountIfs(Range(a1":a5"), "a",};Range("b1:b5"), "〇"&size(16){)  +  };&size(16){WorksheetFunction.CountIfs(Range(k1":k''14''"), "a",};Range("L1:L4"), "〇"&size(16){)};
#br
あんなに悩んでたのにただのタイプミスとは...