Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Microsoft 365)
ワークシート関数の挙動について
投稿日時: 23/01/12 07:19:47
投稿者: 颯

颯と申します。
よろしくお願いします。
 
ワークシート関数の COUNTIFS を使って、
 
・とある条件のデータの有無を確認
・条件を満たすデータがあれば処理
 
といった事を行っているのですが、条件を満たすデータがあるにもかかわらず、
処理が実行されません。コードをコピペ出来ないのですが、簡単ではありますが、
以下の様なコードです。
 


n = Application.WorksheetFunction.Countifs(sh.rangeA, textA, sh.rangeB, textB)

If n > 0 Then
    処理


 
実行すると処理が動かない(n が 0)ため、原因を調べようと当該行にブレークポイントを設け、
そこからステップ実行をかけると、なぜか n の値が 1 となり、処理が走ります。
原因がわからず困っています。
 
sh.rangeA、sh.rangeB は Range型で、textA、textB は文字列で関数に渡しています。
vba のバグなんでしょうか。
同じ様な経験をされた方、いらっしゃいますでしょうか。

回答
投稿日時: 23/01/12 09:58:24
投稿者: Suzu

引用:
sh.rangeA、sh.rangeB は Range型

 
sh.rangeA
「.」は、左側のオブジェクトの メソッド または メンバー を指定する時に使います。
 
  Dim sh As Worksheet
  Dim rangeA As Range

  Set sh = Worksheets("Sheet1")
  Set rangeA = sh.Range("A1:A10")

の様に、別々に オブジェクト変数として定義し 参照しているなら
 
sh.rangeA は メソッドまたはメンバーが見つからない とエラーになります。
 
でも、今回は実行できている様なので、sh の中に、rangeA のメンバーがある事になります。
 
sh が ワークシートオブジェクト であれば
「数式」-「名前の管理」で確認できる 名前を定義したセル範囲と言う事でしょうか?
 
 
とりあえず、
n=〜〜 の直前に
 
  Debug.Print sh.rangeA.Address
  Debug.Print textA
  Debug.Print sh.rangeB.Address
  Debug.Print textB.Address
  n = Application.WorksheetFunction.CountIfs(sh.rangeA, textA, sh.rangeB, textB)

とでもして、各変数の中身をイミディエイトウィンドに吐き出させ
それらを、実際のExcelのセルに、=COUNTIFS関数の引数として設定し、
希望通りの値が得られるか確認しましょう。

回答
投稿日時: 23/01/12 10:07:24
投稿者: 半平太

>同じ様な経験をされた方、いらっしゃいますでしょうか。
経験はないのですが、揮発性関数とかユーザー定義関数を
他のセルで多用していないですか?
そんなのが影響するかも知れないなぁと思っています(自信なし)
 
いずれにしても、コントロールをOSに戻せば正常化されるなら、
ワークシートファンクション直前に DoEvents 命令を
2行程挿入してみたらどうでしょうか?

トピックに返信