以前に、色をカンウントするコードを紹介しました。
最近は、Functionにハマっています。
何が何でも、Functionにする意味はないのですが、スキルアップのために、Functionで、色をカウントします。
目次
かっこよくセルの色をカウントする
こんにちは。伊川(@naonaoke)です。
本末転倒になるかもしれませんが、私は、コードが短ければ、短いほど、優秀なコードだと思っています。
しかし、Functionを使うとかえって、複雑になるのではないか?
むしろ、コードが長くなるのではないか?
そんなことを思っていました。
しかし、オブジェクト指向ということを考えてくと、工程がわかったほうが、優れているという気がします。
たぶん、料理と一緒で、30分以内に、3品の料理を作る場合は、1番時間のかかる料理から、作るはずです。
少し、手間がかかっても、下準備をすることで、料理がはかどります。
Functionに関しては、コードが長くなっても、メンテナンスや、可読性が上がるということがあります。
使わずとも、知識には入れておきましょう。
そして、自分なりにアレンジをしていくことが重要です。
このブログはこんな人にお勧め
- Functionに苦手意識がある人
- Functionを勉強している人
- VBAの中級を目指している人
このブログを、読み終わるころには・・・・
私の説明が、芳しくないかもしれませんが、ネットや、基本書以外のサンプルを利用して、Functionの説明をします。消費税や、合格点数以外のサンプルです。
少しでも、あなたの理解が深まれば幸いです。
Functionで色をカウントする
今回も、少しわからないので、Yahooの知恵袋で教えてもらいました。
あの知恵袋がなければ、今の私は、存在しないと思います。
今回も感動するコードと考え方を教えてもらったので、紹介したいと思います。
Functionで色をカウントする 作業手順 その1 色の範囲を確認
このようなセルの色をカウントします。
- 赤の番号は3
- 黒の番号は1
- 黄の番号は6
- 青の番号は5
カラー番号でカウントします。
以前は、Select Caseでカウントしましたが、今回は、違った方法でカウントします。
Functionで色をカウントする 作業手順 その2 コードを確認
結論は、上のコードになります。
少しに、回答の答えに、自分なりにアレンジをしています。
Functionで色をカウントする 作業手順 その3 伊川が理解できなかった点
Function myCol(ByRef Red_cnt As Long, ByRef yellow_cnt As Long, ByRef Black_cnt As Long) As Variant
Functionで、myColの中身につき、赤、青、黄色の全部をカウントしようとしたのです。
これは、できないようです。
なぜなら、総合計しかでないのです。
ここがわかりませんでした。
基本すら知らない私です。★
回答してくれた方は、かなり優秀な人だと思います。
Functionには、範囲を渡したほうがいいということです。
つまり、色のカウントは、関数の中に入いるから、範囲を指定することで、結果として、カウントした色を返すというほうが、ロジックとして便利だということです。
あーそういうことか
今まで、出会ったFunctionは、必ずと言っていいほど、For Eachが使われていたのは、こういう意味だったのかと思いました。
ここでもFor Eachが使われています。
配列で、Colorsを作成して、その配列の中で、色のインデックス番号をカウントしています。
Functionで色をカウントする 作業手順 その4 肝心な点
色なんてカウントできないと思っていた時がありましたが、こんなにも、シンプルなコードで書けるなんで、まさに驚きです。
エリアを渡し、その結果ごと、親プロシージャへ返す。
人間味のある説明で、素晴らしい回答だと思います。
これが完成図です。
Functionで色をカウントする 作業手順 その5 余談
[J1:M1] = Array(“赤”, “黄色”, “黒”, “青”)
この意味が、分からないというか、知りませんでした。
Range(“J1:M1”) = Array(“赤”, “黄色”, “黒”, “青”)
同じ意味になります。
VBAと、かれこれ、5年付き合っていますが、見たこともありませんでした。
たぶん、すごい人だと思った瞬間です。
上には、上がいるし、いつか、この域に、達したいと、切に、思った瞬間でした。
ここがポイント
今回は、本当にわかりませんでした。Functionと配列は、セットなんですね。
人から教えてもらった回答ですが、本当に、タメになりました。
この手の処理は、Functionを利用すると、可読性が向上して、メンテナンスが楽になると思いました。
消費税や、合否判定では、絶対に理解できない領域です。
以前も、最終行を取得するFunctionを紹介しましたが、3割くらいは理解できたと思っています。
後は、この類のコードを書きまくって、実践で利用できるようになるかです。
時間はかかりますが、写経と共に、アレンジすることが大切です。
そのアレンジができたら、今のコードに関して、可読性と、メンテナンスの向上を目指して書き治したいと思います。
まとめ
今回は、純粋に勉強で質問したのですが、結果として、競馬にも利用できることがわかりました。
以前は、Functionを利用しないで、コードを記載していたのですが、コードを短縮できると思うとワクワクします。
Functionを仕込むだけで、本当に楽になると思いました。
今回も最後まで読んでいただき、ありがとうございました。
今回のサンプルファイルは、No240です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。