以前に、色をカンウントするコードを紹介しました。

最近は、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には、範囲を渡したほうがいいということです。

つまり、色のカウントは、関数の中に入いるから、範囲を指定することで、結果として、カウントした色を返すというほうが、ロジックとして便利だということです。


Naosuke

あーそういうことか

今まで、出会ったFunctionは、必ずと言っていいほど、For Eachが使われていたのは、こういう意味だったのかと思いました。


ここでもFor Eachが使われています。

配列で、Colorsを作成して、その配列の中で、色のインデックス番号をカウントしています。

Naosuke
配列に、カウントされた色が格納されています。

 

 


Functionで色をカウントする 作業手順 その4 肝心な点

色なんてカウントできないと思っていた時がありましたが、こんなにも、シンプルなコードで書けるなんで、まさに驚きです。

エリアを渡し、その結果ごと、親プロシージャへ返す。

人間味のある説明で、素晴らしい回答だと思います。


これが完成図です。

Functionで色をカウントする 作業手順 その5 余談

[J1:M1] = Array(“赤”, “黄色”, “黒”, “青”)

この意味が、分からないというか、知りませんでした。

Range(“J1:M1”) = Array(“赤”, “黄色”, “黒”, “青”)

同じ意味になります。

VBAと、かれこれ、5年付き合っていますが、見たこともありませんでした。

たぶん、すごい人だと思った瞬間です。

上には、上がいるし、いつか、この域に、達したいと、切に、思った瞬間でした。

ここがポイント

ここがポイント

Function8.png今回は、本当にわかりませんでした。Functionと配列は、セットなんですね。

人から教えてもらった回答ですが、本当に、タメになりました。

この手の処理は、Functionを利用すると、可読性が向上して、メンテナンスが楽になると思いました。

消費税や、合否判定では、絶対に理解できない領域です。

以前も、最終行を取得するFunctionを紹介しましたが、3割くらいは理解できたと思っています。

後は、この類のコードを書きまくって、実践で利用できるようになるかです。

時間はかかりますが、写経と共に、アレンジすることが大切です。

そのアレンジができたら、今のコードに関して、可読性と、メンテナンスの向上を目指して書き治したいと思います。

動画とブログでわかりやすくExcelとACCESSを紹介しています

まとめ

今回は、純粋に勉強で質問したのですが、結果として、競馬にも利用できることがわかりました。

以前は、Functionを利用しないで、コードを記載していたのですが、コードを短縮できると思うとワクワクします。

Functionを仕込むだけで、本当に楽になると思いました。

今回も最後まで読んでいただき、ありがとうございました。

 

今回のサンプルファイルは、No240です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事