エクセルマクロ・VBA達人養成塾 小川です。
キューバ旅行記、その10です。
日本から贈られたと思しき清掃車。
そして、さきほどの大通りを越えて、Vadero地区へ。
ラテン諸国一の人口密度とも言われる地域。とはいえ、ここはその端っこのほう。
これから、この道をまっすぐ歩いてみる。
奥に入ってみると、野菜と果物を売っていた。手前は芋。
中央は地元の人。左の人は警官。
キューバは観光立国で、米国による経済封鎖の中、観光は貴重な外貨収入源。
ということで、外国人に対する犯罪には特に厳しいらしい。
現地で人から聞いたのだが、50人にひとりは警察なのだそうだ。
とはいえ、歩いていて、「監視社会」的な雰囲気はまったく感じなかった。
あとで出てくるが、政府の建物の近くとかでも、取り立てて厳重な警戒をしているという様子もない。
一昨日、10月23日の発展コースを受講された、ある外資系企業にお勤めの女性から、書いたマクロについての添削依頼メールを受け取りました。
今日は、そのときのやりとりのメールをネタにして、ひとこと。
早速、業務用にコピペのマクロを作成してみました。
動作は確認済みで問題なく動きましたが、先生の目から見たアドバイスをいただければと思います。
Module上には、作成前に目的を分割して記載し、作成までの流れを残していますが、環境等は以下の通りです。
更新ファイルは、今は週次で対応しているが、そのうち日次に変更する。
コピペ元のファイル名は規則どおり(最後に8桁の日付)で、データもいつもSheet1の同じセルに入っている。
コピペ元ファイルの保存先は、階層が深く、私以外は保存場所を知らない。
コピペ先のファイル(更新ファイル)はファイル名が毎月変わる。
コピペ先のファイルですが、オリジナルはF,G,H列に直接データを貼り付けないのは、データチェックで第三者に見てもらうためです。
戸惑ったこと、感想
For Each構文を使うために、更新ファイル以外を閉じてから作業するようにマクロを書いたら、知らないところで個人用マクロブックも開いていて、条件分岐が複雑になってしまった。
他のエクセルファイルを閉じるために、If構文を使おうと思ったら、Ifの中にIfが入ってなんだか見苦しかったので、見栄えを優先してSelect Caseで対応してみました。
仕事の合間に作って、3日間(延べ3時間くらい)で出来上がりました。個人的には上出来です。
Debug.Printはすごい役に立ちました!なぜうまく行かないのかがよくわかりました。
添付ファイルには、データ元になるファイルと、更新ファイル(マクロ保存)、マクロをテキストに落としたテキストファイルがあります。
よろしくお願いいたします。
添削依頼のファイルを開いてみてみると、やっていることは、こんな感じだった↓
○「ファイルを開く」ダイアログで開くディレクトリを変更
○「ファイルを開く」ダイアログを表示
○別のファイルを開く
○そのファイルからデータを取得
○マクロの入っていたファイルに転記
○ダイアログから開いたファイルを閉じる
見てみたところ、もともと独学でマクロを少し書けるようになっていた人で、ソースを見てみたところそこそこよく書けていた。
とはいえ、以下のところに改善の余地があった。
○変数名のつけかた
○個人用マクロブック等、他に開かれているエクセルファイルがあった場合の回避策
○ファイル名を元にして日付情報を取得するロジック
さっそく、添削を送った。
元のマクロは40行くらいのものだったが、添削して返送したマクロは、24行になった。
自分で学ぶのも得意な人だったので、添削に添えたコメントは、アバウトで、突き放した感じ(笑
そうしたら、その数時間後に返信を受け取った。
以下は、そのメール。
いただいたアドバイスをもとに、少し修正を加え、少しスマートになりました。
すごく見やすくて大満足です。
(私にとっては読み易いマクロであるということがすごく重要です。)
かつての私にはこんなマクロはかけませんでしたし、こんな短時間では出来上がらなかったと思います。
いただいた解説は全然アバウトではなかったですよ。なるほど・・・というかんじでした。
このマクロはこれで完了とし、次は少し複雑なものに挑戦しようと思います。
(またコピペなんですが・・・・)
ただ、どこから手をつければよいか、今のところまったく想像がつかないので、もう少し考えてから別途ご相談させていただくと思います。
発展編のオブジェクトやメソッドの説明が、とても役に立っています。
意味を理解してマクロを書くのがこんなに簡単だとは思いませんでした。
マクロを書くのが楽しい毎日です。
またよろしくお願いいたします。
読み易いマクロであるということは、すごく重要です。
読み易いマクロであるということは、ロジックがシンプルだということであり、バージョンアップも簡単だ、ということですから。
VBAは構文の意味をしっかり理解してしまえば決して難しいことはないのですが。
しかし、独学では、構文の意味をしっかり理解することが難しいです(笑
よく分かっていて説明上手な人から直接聞いたほうが、人生で使える時間・エネルギーの節約だと思います。
ということでしたが。
そりぁ、相手を見てますから。
解説は、冗長すぎず、簡潔すぎず。
ちょうど、「なるほど..」と思うくらいのところで抑えています。
そのくらいが、いちばん学ぶ人にとっては学びになりますので ヾ(´ー`)ノ