質問: excel 2010 プルダウンメニューを塗りつぶしたセルの数をカウントしたい。 お世話になっています。よろしくお願いします。 この間ここで、チェックボックスをチェックすると、塗りつぶしできる方法を教えていただきました。 今度は、表題にもあるように、塗りつぶしたセルの数を数えておきたいのです。 過去ログに、塗りつぶしのセルのカウント方法として、以下のようなものを見つけました。 https://oshiete.goo.ne.jp/qa/2000523.html これでもカウントできるのですが、変化があるたびに、enterが必要です。 リアルタイムに反映させる方法はないのでしょうか? ご存知の方おられましたらご教授願います。
回答: こんにちは、お邪魔します。 私なりの解答というのも考えてはみたのですが、 今の流れでそれを提示しても混乱を招くと思いますので、今回は敢えて 他の回答者さんの手による解決にお任せする前提で、 気が付いたことを書いてみようと思います。 より良き解決へと帰結することを願うばかりで他意はありませんのでご了承を。 application.calculatefull (必要のない再計算まで求めるのはどうかと思いました) よりは、 sheet.calculate (セル数式より先に条件付き書式などを再計算させる不思議なメソッドで、 使い途は限定されますが今回の例ではこれでも十分) それよりも計算する範囲を限定して、 range.calculate (一般的にsheet.calculateよりは的確な結果が出せるメソッドです) を使えるならその方が宜しいかと。 ユーザー定義関数では、 "activeなにがし"というプロパティを避けた方がいいです。 それこそapplication.calculatefullを実行する前提なら整合性を取る意味でも、 activesheetは、application.thiscell.worksheet、とかで参照するのが 安全で妥当です。 フォームコントロールに1対1で登録するマクロの中の記述としても activesheetは普通は避けて、具体的なシートを指定するべきでしょう。 1対1で登録するのなら、その方が自然で、特に手間も掛からないでしょう。 余談ですが、最近関連した質問に応えています。 https://oshiete.goo.ne.jp/qa/8929895 参考になることがあるかも知れません。 強いて付け足すなら、フォームコントロールは ロックとシートの保護でも付け足さない限り、 何かの拍子で簡単に位置を移動してしまうことがあるので、 .topleftcell では思わぬ結果を招く場合もあり得ます。 その点を勘案されて#2様のように1対1の処理を 提案なさる意図は解ります。でも、それならactivexコンントロールの方が 却って扱い易いように思うのです。 ところで、#1様ご提示の様に、多対1で登録するマクロをお使いになる場合は、 そのマクロを通った時には必ずカウントが変更になるのですから、 出力先を指定して、そのマクロから出力した方が ユーザー定義関数で後から追いかけるよりも スッキリするような気がするのですが、いかがでしょう。 関数である必要があるのかないのか、一度は確認してみたい処です。 以上になりますが、これはこれで、設計上の提案、という意味で、 ひとつの回答スタイルにはなっている、と私は考えています。 必ずしも、他の回答者様だけに向けたコメントではありませんので。 何か不足があれば私からもお応えします。