t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBAについての考え・意見

VBA アサーションチェックとは

最近Twitterで何件か、Debug.Assertについて語られているのを見かけたので乗っかってみる。Debug.Assertの使い方自体は以下で述べたので今回はその意義を中心に説明してみようと思う。 thom.hateblo.jp アサートとは Assertという英単語には、主張する・断言…

VBA マクロのバージョン番号の付け方

ソフトウェアは一度作って終わりではなく、公開後もバグの修正や機能向上のため修正を繰り返すことになる。 マクロも同様で、通常はバージョン番号をつけて管理したりする。バージョン番号の付け方は特に決まっているわけではないが、一般的には次のルールに…

VBA そのマクロ集約、ちょっとまった!

たとえば、とあるデータを次のようなステップで加工しているとする。それぞれのマクロはボタンを押すだけで完了する。 だったら、わざわざ3つもボタンを押させる意味はあるのか。 普通はそう考える。そしてボタンを3つ押す作業を一つのボタンに集約する。こ…

マクロ作成者が覚えておきたい重要な概念「冪等性(べきとうせい)」について

冪等性(べきとうせい)とは、ある操作を1回行っても複数回行っても結果が同じであることをいう概念である。 言葉の響きは難しいが、これはプログラマーなら何度も遭遇するシチュエーションなので、是非とも覚えておきたい。たとえばExcelマクロにおいて、以下…

オブジェクト指向でつまづく7つのポイントと処方箋

こちらの記事で伊藤先生も書かれているように、この数年でVBAのクラスモジュールに関する情報が充実してきている。これからクラスモジュールについて学習しようと考えている方も沢山(期待を込めて)いらっしゃることと思う。そこで今回は、オブジェクト指向を…

VBA Dir関数とFileSystemObjectの比較

※ 冗談の通じない方はご退場願います。はじめに私の立場を明確にしておくと、私は個人的にFileSystemObject(以降FSOと記載)が好きで、Dir関数はあまり好きではない。従ってDir関数で事足りる処理でも基本的にVBAコードではFSOを利用する。この記事ではその理…

VBA Select Case文における条件式の短絡評価活用の是非について

VBA Select Case文における条件式の短絡評価活用の是非について述べる。 前提 以下の書籍で、Select Case文の条件式短絡評価について記載されているが、そのテクニックとしての是非についてTwitter上で疑問が上がっていた。入門レベルでは決して足りない実務…

このブログを通じて私がしたかったこと、していること。

このブログを書き始めた当時、VBA界隈は旧態依然としたコードで溢れていた。 全ての変数はプロシージャの先頭で宣言され、変数名は極端に省略されて読んでも意味が分からず、それを補完するために本来必要のないコメントでコードは散らかっていた。プログラ…

コード共通化のデメリット

プログラミングが上達すると、コードの共通部分をプロシージャに切り出すことを覚える。 コードを共通化すれば、共通部分に変更が発生した場合に、修正は一か所で済むので効率的だとされる。はたして本当にそうだろうか? 私もつい最近まで、コードの共通化…

VBA モジュールのプロシージャは呼び出し順に書く

VBAでは互いに関連するプロシージャをひとつのモジュールに纏めることが多い。 このとき、呼び出す側と呼ばれる側のどちらを先に書けば良いだろうか。以前の私の考えでは、例えばProc1がProc2を呼び出すとき、呼ばれる側を先に定義しておくという意味で先に…

VBA バグの回避コードは別プロシージャに分離し、説明的な名前をつけ、懇切丁寧にコメントする。

プログラミングでどうにもならないバグに出会ったとき、そのバグを回避するコードを書くことになる。 バグの回避コードというのは厄介で、単体で読んでも一見何をやっているのかさっぱり分からないことが多い。これをメインの処理コードに混ぜ込むと、メイン…

VBA SubとFunctionとPropertyの使い分け

VBAには3種類のプロシージャがある。SubとFunctionとPropertyだ。 しかしその守備範囲はキッチリ線引きされているわけではなく、使い分けに困る場面がある。今回はその使い分けのヒントとなる考え方を紹介する。なお、3種類と書いたがProperty にはLet・Set…

高品質なコードを短時間で編み出すには

プログラムのコーディングで一番時間を消費するのは「思考」と「試行錯誤」である。コーディングスピードが落ちることを嫌って極端に短い変数名をつけたり、一つのプロシージャで一気に書ききったりするとコードが把握しにくくなり、「思考」に時間をとられ…

VBA Boolean型をTrueやFalseと比較することの是非について

If文の条件式でBoolean型をTrueやFalseと比較することは昔から論争の種だった。たとえば以下のようなIf文。 If IsNumeric(x) = True Then If IsDate(x) = False Then わざわざTrueやFalseと比較しなくても、このように書くことができる。 If IsNumeric(x) Th…

VBA マクロが遅い・速いという議論は、要件ありきの話

VBAのコードについて、よく、この手法は遅いから使うなという話を聞く。高速化万歳! またはその逆で、高速化のためにわかりやすさを犠牲にするなどナンセンスだ!という話も聞く。この記事では前者を「$バンザイ」、後者を「$ナンセンス」と呼ぼう。$バンザ…

マクロ作成を安請け合いしないという選択

「こんだけVBAの記事を書いておいてよくもまぁ」という声が聞こえてきそうなタイトルである。 しかし安請け合いがよくないというのは常々思っている。執筆のキッカケになったのはこの記事。 akashi-keirin.hatenablog.com以下、序文の引用。 最近、自分には…

プログラミングの入門に必要なのは「おお、すげー!動いた!」という体験。小難しいことは後回し。

こちら、最近たまたま昼休みに書店に立ち寄る機会があり、ふと手に取った書籍。アイディアを実現させる最高のツール プログラミングをはじめよう作者: 池澤あやか出版社/メーカー: 大和書房発売日: 2015/03/22メディア: 単行本(ソフトカバー)この商品を含…

VBA マクロ、プロシージャ、メソッドなどの用語について正確に理解する

初心者向けの解説によくマクロとVBAの違いが取り上げられる。 一応違いについて説明した後、同じようなものなのであまり気にしなくて良いと締めくくるケースも多いけど、私はやはり違いを意識したほうが良いと考える。初心者は同じようなものと言ってくれた…

VBAのコーディングガイドラインを作ってみた

VBAのコーディングガイドラインを作ってみた。掲載先は私のメインサイト。VBA コーディングガイドライン - You.Activateガイドライン作成にあたり参考にしたのはこちらの4冊VB.NETルールブック ?読みやすく効率的なコードの原則作者: 向山隆行,片山優司,阿部…

VBA 「これはマクロ化しない」という決断も必要

VBAを覚えてマクロを作れるようになると、業務を手当たり次第自動化したくなるものだ。しかし安易な自動化は慎むべきかもしれない。このように考えるようになったのは、以下の記事がきっかけだった。 自動化をどこまで進めるか|会社で役立つリスクマネジメ…

VBA 変数宣言で途中改行する

VBAでは、半角スペースに続けてアンダーバーを書くことでステートメントの途中で改行することができる。実は昔、この途中改行が嫌いだった。理由は単に自分が途中改行されたコードに慣れてなかっただけで、慣れてからガンガン使うようになっている。たとえば…

VBA 私がコードを整理するときの思考プロセスを紹介

今回は私が普段どんなことを考えながらコードを整理しているのかを紹介する。 題材としてはなるべくシンプルなものがよかったので、カレンダーのヘッダー部分を作成するマクロを取り上げた。 最初に書いたコードがどういう風に変化していくか、またなぜその…

VBA ローカル変数は使用する直前で宣言する

ネットや書籍で見かけるマクロでは、変数宣言はプロシージャの先頭にまとめられているものが多い。一般的に変数宣言はプロシージャの先頭にまとめて書くものだと紹介している記事さえある。それはなぜかというと、みんながそうしてるからだ。先頭にまとめる…

VBA プロシージャ呼び出しのオーバーヘッドについて

今回はVBAでプロシージャ呼び出しにかかるオーバーヘッド時間を計測してみた。 プロシージャ呼び出しのオーバーヘッド改善はコンパイラの領分 一般的に、プログラミングではプロシージャの呼び出しにはオーバーヘッドが発生すると信じている方もいるようだけ…

VBAの標準モジュールはオブジェクトなのか

結論として、私は最近標準モジュールを「オブジェクト」と見做すようになったのだが、そのあたりの経緯と悩みをうだうだと書こうかと。 MSの公式見解によると、標準モジュールはオブジェクト モジュールではない Excel VBAでコードを書ける場所は、Microsoft…

VBA 苦労して作ったマクロを操作ミスで消してしまったあなたへ、これはチャンスだ

2~3時間、あるいはもっと時間をかけて作ったマクロを、操作ミスで消してしまうことがある。 「うっかりxlsxで保存してしまった」などは代表的なミスである。ネットを探し回り、エラーと格闘して、必死の思いでやっと動くプログラムができたところで消えてし…

VBA エラーは忌むべきものではなく、非常に重要な機能である

プログラマーなら誰でもエラーで悩んだ経験があるだろう。特に初心者の頃はなかなか思ったように動かずにイライラしたことがあるハズだ。しかしエラーは本来、忌むべきものではない。 プログラムエラーは現実世界で問題が起きる前に、「それは間違っている」…

VBA ユーザーの領分を侵さないコードを書く ~ SelectionやActiveWorkbookはユーザーのもの

セルやブックの操作にSelectionやActiveWorkbookが多用されているコードを見かけることがある。特にマクロの記録を使った場合は顕著だ。 これはこれでちゃんと動くのだが、できればちゃんと変数に格納したほうが良いと思う。さて、いちいちSelectionを用いる…

VBA Propertyはフィールドのフリをしたメソッド ~ プロパティに値を代入するという表現は厳密には正しくない

プロパティーに値を代入するという表現をよく見かける。 私もつい最近までそのように表現していたけれど、これって厳密には間違ってるんじゃないかと思い始めている。 というのも、Propertyプロシージャを学習する際、この「代入」という表現が理解を難しく…

VBA クラスモジュールはもっと当たり前に使われるようになって欲しい

私がクラスモジュールの使い方を知るまでのエピソード 私が初めてオブジェクト指向の便利さを理解したのは、なぜかVBScriptだった。ExcelファイルをVBScriptのファイルにドラッグ&ドロップすると内容を読み取ってAccessのデータベースに登録し、ドロップさ…

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。