見出し画像

VBAの勉強(データの改良)覚え書き

こんにちは。
そろそろ無職になり3カ月が過ぎようとしている今日この頃。

去年あたりにちょっとVBAを勉強し始めたのですが、その後あまりやってなかったので再度おさらいをしてみました。

復習した本その1「できる イラストで学ぶ 入社1年目からのExcel VBA」

前回も読んで分かりやすかったのですが、結構忘れてたことがあったので再読して更に理解が深まりました。

復習した本その2「Excel VBA 脱初心者のための集中講座」

この本はVBAを勉強しようと思って最初に購入した本です。
初心者には難しく、前回も最初の方だけちょっと読んでやめてしまったのですが今回は「できる イラストで学ぶ 入社1年目からのExcel VBA」で基本を学んだので大分わかるようになりました。
と言ってもまだ第4章までしか読んでませんが。

しかし、プロシージャを部品化して再利用する方法は目から鱗でした!
今までだらだらコードを書いてたので、後から見ると分かりにくいところもどこを修正すればいいかわかるようになった。

ということで自分で作った家計管理用のエクセルデータの改良をすることにしました。

改変内容

改良1:モジュールレベル変数


何度も出てくる最終行の変数をモジュールレベル変数にする

改良2:プロシージャの部品化


最終行取得のコードだけのプロシージャを作る
(Callで呼び出すため、プロシージャの部品化)

改良3:プロシージャの部品化


2つのふるまいが入っているプロシージャはそれぞれ1つのプロシージャに分ける(プロシージャの部品化)
そしてまとめのプロシージャを作り、Callで呼び出す

改良4:Rangeオブジェクト


Rangeオブジェクトを適宜Cellsで書き直す
例えばRange("A" & i,"F" & i )をRange(Cells(i,1),Cells(i,6)にする

改良5:プロシージャ名


プロシージャ名を日本語表記からアルファベット表記に変えて、コメントを追加

改良6:モジュールレベル定数


意味のある列をモジュールレベル定数にする(後で列が移動しても対応できるように)

改良7:Rangeオブジェクト


Rangeオブジェクトの範囲を変数に入れる
下記サイトの「複数列を合計するサンプルコード」を参考にしました

Cellsで書いたら起きた問題

アクティブシート上のセル取得は問題ないのですが、他のシートのセル取得だとエラーになってうまくいきませんでした。

例えば以下のコードだとエラーになります。

With worksheet(2)
.Range(Cells(i,1), Cells(i,6)).Boders.LineStyle = xlContinuous
End With

Cells とかworksheetとかで調べてみたのですが、どうもよくわからなくてエラーコードでネット検索したら解決方法が出てきました。

With worksheet(2)
.Range(.Cells(i,1), .Cells(i,6)).Boders.LineStyle = xlContinuous
End With

Cellsの前に「.」(ドット)を付けないとworksheet(2)のセルが取得できないのです。考えてみたら、そうだよなあと思うんだけど、ビギナーの私は気づきませんでした。
ネット有難いです~。

今回の記事は以上です。

因みに初心者向けということで以下の本も買ったのですが、こちらは難解すぎて挫折しました。
いちばんやさしい・・・???と私は感じました。
個人的には「できる イラストで学ぶ 入社1年目からのExcel VBA」がおすすめだと思います。


よろしければサポートをお願いします。サポート頂いた資金は勉強や研究費に充てさせていただきます。