107日目 テストコード1つ目完成

今日もテストコード作成。
今日でとりあえず1つ目のテストコードは完成。

 

まだ追加出来そうな事もありそうだけど、あんまり時間をかけすぎてもダメだと思うので完成にする。
やっぱり最初の1つ目だと時間が掛かってしまった。

 

使い回しをするプロシージャも1から作成するので、本体と部品を全て作る感じだった。
使い回しするプロシージャは、1回作っておけば他のコードでも使えるので便利だ。

 

今日はExcelの自動更新停止のプロシージャと、自動更新再開のプロシージャを作って本体の1部にも使った。
そんなに大規模な処理じゃないけど、一応入れておけば処理速度が上がるから気休め程度に。

 

エラー処理も入れてあるけど、間違えて使ってない変数を書いたおかげで1回コンパイルエラーが出た。
コンパイルエラーは、エラー処理を入れておいても処理が止まってしまう事が分かった。

 

とりあえず1つ目が完成したので、あと似た様な処理のコードを3つ作る予定だ。
もう部品は出来ているので、本体を少し変えて作るのでそんなに時間はかからないだろう。

106日目 体調の悪い日

今日もテストコードをひたすら作成していた。
作成していく中で、エラー処理の挙動が分からない事があって色々と調べたりした。

 

呼び出し先のプロシージャ内でエラーが発生した時の挙動がよく分からない。
今まで、プロシージャを分割して書く機会も無かったので当たり前かもしれない。
なので調べて動かしながら覚えた。

 

呼び出し先のプロシージャ内でエラーが発生した場合は、呼び出し先のプロシージャ内にエラー処理が書かれているかどうかで挙動が変わる。
エラー処理が書かれていない場合は、呼び出し先のプロシージャ内で処理が止まってしまう。

 

でもエラー処理が書かれていたら、呼び出し先のプロシージャ内でエラーが発生した場合呼び出し元に処理が戻ってくる。
Resume Nextだとそのまま処理が継続され、Goto 〇〇だったらエラー処理用の部分に飛ばされる。

 

これが今日勉強になった部分。
今日は体調が良くないので早めに切り上げる。

105日目 テストコード作成

今日はテストコードをひたすら作成していた。

 

自分のオリジナルのVBAを書いていると、当たり前だけど正解が無くて自分の思った通りに作成出来る。
なのでこれで良いのかなとか試行錯誤の毎日になっている。

 

テストコードを作成していると、ただ勉強してインプットしているよりも遥かに勉強になると思った。
インプットだけだとこの項目を勉強するとなると、その項目に出てくる範囲しか勉強出来ない。

 

しかしオリジナルのVBAを書いていると、様々な知識が必要で分からない事や忘れかけていた事を調べてまた勉強になる。
実際、インプットだけしていた時にほぼ勉強しなかったParamArrayやOptionalの事を調べまくっていた。

そのせいで割と詳しくなった。


やっぱり実際に書いていると復習にもなって勉強になる。

あと書いていて思った事は、以前よりも自分の引き出しが増えたと感じる事が多々ある。


少し前まで基礎固めをひたすらやっていたので、その効果と今までの積み重ねのおかげかもしれない。

明日もテストコードを作成する予定だ。

104日目 新しい関数を作成してみた

今日は新しい関数を作成した。
テストコードを作成していた時に必要になったので、ネットで調べながら作ってみた。

シートにある罫線で囲まれた範囲を取得出来る関数だ。


表の最終行を取得しようと思ったけど、セルにデータが入ってないとEndプロパティで取得出来ないので作った。

セルにデータが入ってない表の最終行を取得するには、UsedRangeかSpecialCellsを使うしか無いと思う。


でも両方とも表だけではなく、使われているセルまで取得してしまう。

これを解決する方法が思い浮かばなかったので、罫線で囲まれたセル範囲を取得するという結論になった。


この方法だとセルにデータが入ってない表の範囲も取得出来る。

ネットで調べたけど、罫線で囲まれたセル範囲を取得出来る関数を作っている人が1人しか見つからなかった。


いきなりサンプルコードを見るのも何だったので、自分で作成してみてからサンプルコードを見た。

見たら自分で書いたVBAと全く同じだった。
一応問題無く使えている。

 

明日もテストコードを作成の続き。

103日目 codicを活用してみた

今日は、色々なサイトで紹介されている変数の命名規則を見て勉強していた。
なんで勉強したかと言うと、昨日テストコードを作成していた時に変数名をどうするかとても悩んだからだ。

 

自分だけでは無くて他の人も見る前提でコードを書いているので、なるべく分かり易い変数名を付けたい。
でもいざコードを書いていると、変数名や関数名を命名するのがとても悩んでしまっていた。

 

なので今日は色々なサイトで変数名について勉強しようと思った。
全部で10サイト位見たかな。

 

皆さん色々と参考になる事を書かれていて、NGな変数名や意味が伝わる変数名なども書かれていて非常に参考になった。
その中で複数のサイトでcodicが紹介されていた。

 

日本語を入力すると英訳してくれて、分かり易い変数名に変換してくれるらしい。
早速使ってみると、使い易くて自分で変数名であれこれ悩む時間が大幅に削減された。

 

本当に良い物を発見したと思った。
これで効率が上がってくれればと思う。

102日目 個人用マクロブックの編集とテストコード作成

今日はほぼテストコードを作成していた。

 

今日思ったのが実際にコードを書いて、必要そうな関数を作成して個人用マクロブックに追加する方が良いと思ってテストコードを書いていた。
よく使う最終行の取得や、範囲を取得してRangeオブジェクトで返す関数などを作成した。

 

その他には、メインの処理の前に行う処理を関数化してみた。
ブックやシートの存在確認・非表示シートの表示・非表示の行列の表示・オートフィルターの絞り込み解除など。

 

一応今日作成した関数は、同一ブックでの処理は対応出来ると思う。
別ブックが絡んでくると対応出来ない。

 

今までこんなにプロシージャを分割したり引数を扱う事は無かったと思う。
そのせいで自分で読むと読みづらい。

 

今までプロシージャを分割しないで、全て1つのSubプロシージャに書く事が多かった。
なのでいざプロシージャを分割してみると、中々引数も多くて読みづらくなっている。

果たしてこれで良いのだろうか。


プロシージャを分割するとメリットもあるけど、可読性が落ちてしまったらダメだと思う。
明日も今日の続きをやる予定だ。

101日目 個人用マクロブックの編集

今日は個人用マクロブックを編集していた。
昨日汎用関数とかテンプレートと言ったモジュール名に変更したので、今日はその中身に書き込む作業をしていた。

 

テンプレートには、いつも使うFor Each文とかIf文とかをとりあえず追加しておいた。
その都度書いていると時間がかかってしまうので、テンプレートからコピペで持ってこれれば良いと思う。

 

汎用関数の中身も少し追加した。
ブックが開かれているかどうかと、該当シートの行列を全て表示するという関数を追加しておいた。

 

何も無い所から関数だけ作るのもあんまり必要性を感じないので、実務で使えそうなコードを書きながら作っていた。
今まで色々なサイトを見てインプットばかりしてきたので、実際に長いコードを書くのは初めてかもしれない。

 

そんな感じなので、結構何回も悩んで行き詰ってしまった。
今まで同一ブック内の処理ばかり勉強して来たので、別ブックから別ブックへの処理なんて書いた事も無かった。

 

転記元のブックと、転記先のブックの2つのブックがあるケースは初めてだった。
こういう場合はファイルの存在確認とか、ブックが開かれているかどうかの確認はそのブックごとにやらないといけないんだろうか。

 

確認のプロシージャを分割して、そのプロシージャ内で2つ共確認作業を終わらせようとしたけど上手く行かない。
1つずつFor文で回して確認して、オブジェクト変数に入れようとも思ったけどこちらも上手く行かなかった。

 

そうするとブックごとにIf文で判定して、確認のプロシージャに飛ばしてという処理になってしまう。
もっとコンパクトに書きたいし、見栄えがよろしく無い。

 

なんとかならないだろうか。