VBA バグ?Number Formatがコピーされない事象
作成中のマクロでバグっぽい事象が確認されたのでメモ。発生した環境はExcel 2013 32bit on Windows 10 Home...
View ArticleVBA バグの回避コードは別プロシージャに分離し、説明的な名前をつけ、懇切丁寧にコメントする。
プログラミングでどうにもならないバグに出会ったとき、そのバグを回避するコードを書くことになる。バグの回避コードというのは厄介で、単体で読んでも一見何をやっているのかさっぱり分からないことが多い。これをメインの処理コードに混ぜ込むと、メイン処理の理解を難しくさせる。従って、バグ回避コードは短いものであっても別プロシージャに分離するのが望ましい。また、プロシージャ名はそのプロシージャの機能を説明する簡潔...
View ArticleVBA モジュールのプロシージャは呼び出し順に書く
VBAでは互いに関連するプロシージャをひとつのモジュールに纏めることが多い。このとき、呼び出す側と呼ばれる側のどちらを先に書けば良いだろうか。以前の私の考えでは、例えばProc1がProc2を呼び出すとき、呼ばれる側を先に定義しておくという意味で先に書くことがあった。Sub Proc2()MsgBox"Hello"EndSubSub Proc1()Call Proc2...
View Articleコード共通化のデメリット
プログラミングが上達すると、コードの共通部分をプロシージャに切り出すことを覚える。コードを共通化すれば、共通部分に変更が発生した場合に、修正は一か所で済むので効率的だとされる。はたして本当にそうだろうか?私もつい最近まで、コードの共通化は善だと信じていた。しかし、最近いくつかの機能を備えたプログラムを書く機会があり、この考えに疑念を抱くようになった。例えば下図のように機能Aと機能Bがそれぞれ別のモジ...
View ArticleVBA マクロで利用する設定値をシートに保存し、文字列でアクセスするテクニック
今回はマクロで利用する設定値をシートに保存し、汎用的に文字列でアクセスできるようにするテクニックの紹介。作り方標準モジュールを挿入し、プロパティウィンドウからオブジェクト名をConfgに変更する。Configモジュールに以下のコードを張り付ける。OptionExplicitPrivate configurations AsVariant'<- configulations is keepd...
View Articleこのブログを通じて私がしたかったこと、していること。
このブログを書き始めた当時、VBA界隈は旧態依然としたコードで溢れていた。全ての変数はプロシージャの先頭で宣言され、変数名は極端に省略されて読んでも意味が分からず、それを補完するために本来必要のないコメントでコードは散らかっていた。プログラミング手法はトップエンジニア達の研究・議論・試行錯誤によって磨かれ、時代とともに進化している。しかしExcelVBA使いの中には「ExcelにはExcelの流儀が...
View ArticleVBA オブジェクトのメソッドチェーン
メソッドチェーンとはメソッドチェーンとは、ひとつのオブジェクトに対して複数メソッドを1ステートメントで実行するテクニックである。具体的には、オブジェクトのメソッドが自分自身を返すように設計することで、メソッドをドットで繋ぐだけで次々とそのオブジェクトに指令を与えることができるというもの。例えばPersonというオブジェクトにNameとAgeの2つのフィールドとIntroduceという自己紹介をするメ...
View ArticleVBA Select Case文における条件式の短絡評価活用の是非について
VBA Select Case文における条件式の短絡評価活用の是非について述べる。前提以下の書籍で、Select Case文の条件式短絡評価について記載されているが、そのテクニックとしての是非についてTwitter上で疑問が上がっていた。入門レベルでは決して足りない実務に必須のスキルとは ExcelVBA 実戦のための技術作者:沢内晴彦出版社/メーカー:ソシム発売日:...
View Articleはてなブログ(このサイト)を常時SSL化したので備忘録
本日このブログを常時SSL化したので、備忘録も兼ねてここに記しておく。切り替えそのものはダッシュボードから簡単にできるのでまぁ簡単。問題はその後。まぁただ、以下の広野さんの記事を読んで、面倒な後処理が発生することは想定内ではあった。心の準備ができたので感謝!www.mayoinu.com目次SSLとはアドレスバー表示についてGoogle Chromeのアドレスバー表示Microsoft...
View ArticleIT技術の独学で入門難民にならないために大事なこと
IT技術を独学するにあたって、挫折しないために必要なことは何だろうか。挫折といっても原因は様々だけど、大きく分けて「続かない」と「始められない」の2種類がある。今回紹介するのは「始められない」を避けるために大事なこと。ある技術の学習を始められない人々を、入門難民と呼ぶことにする。かくいう私も、Androidプログラミングの入門難民である。あとAI技術の入門難民でもある。入門難民にならないために大事な...
View ArticleAmazonでレビューを書く意義とその書き方について
最近、良い買い物をしたら出来るだけAmazonでレビューを書くようにしている。その理由は、将来的に私がさらに快適な暮らしをしたいからだ。レビューを書く意義Amazonでレビューを書くことと、快適な暮らしがどう繋がるのかを以下に図示してみた。つまり気に入ったものにちゃんと高評価を付けることで他の買い手が付き、そのお金が作り手に還元されれば次の商品を開発する資金になり、私は進化した商品を再び買うことがで...
View ArticleVBA 固定長のコードを扱うオブジェクトをクラスモジュールで作ってみた
業務では固定長のコードを扱うプログラムを作ることがある。例えば以下のようなコードがあったとする。20180728MPGこれは私が考えた適当なコードだが、2018年7月28日生まれの男性プログラマーを表すことにする。つまり先頭8桁が生年月日、次の1桁が性別、最後の2桁が職業を表す。たとえばこのコードの性別だけ取り出したいと思ったら、9文字目から1文字切り出すという処理が必要になるが、これが結構面倒くさ...
View ArticleVBA プロシージャ呼び出しの仕組みから再帰を理解する
以前に以下の記事で再帰を説明するのに、普通の関数呼び出しに置き換えるアプローチをとった。thom.hateblo.jp今回はそもそものプロシージャ呼び出しの仕組みから説明しようと思う。例えば以下のコードでProcedureCall1を実行してみる。Sub ProcedureCall1() a =1 Debug.Print a Call Proc1 Debug.Print a EndSubSub...
View ArticleVBA TRANSPOSE関数で一次元データのみの二次元配列を一次元配列に変換する。
VBAでは、セル範囲と配列の相互変換ができるが、たとえ1列分しか変換しなくても二次元配列となってしまう。参考infoment.hatenablog.comVBAのJoin関数でひとつの文字列に加工しようと思ったら色々と工夫が必要なのだが、実はワークシート関数のTRANSPOSEを使うと簡単にできるという裏技がある。たとえば次のようなデータを用意する。これを二次元配列arrとして読み込み、Transp...
View ArticleVBA マージソートの為に配列を左右に分ける計算式の妥当性を検証する方法
今回すんごいスコープを絞ったタイトルにしたけど、それには訳がある。このブログで過去にマージソートのコードを紹介した。thom.hateblo.jpその際コードを作るのにとても苦労したので、もう少し配列を抽象的に扱えるクラスを作って楽にマージソートしようと思い立った。ただ、クラスを作るにあたってもやはり苦労するポイントが同じなので、今回は改めて計算式を再考し、その妥当性を検証しようという記事である。具...
View ArticleVBA 循環的複雑度という指標でプロシージャの複雑度を測ってみる
VBAに限らずすべての言語に言えることだが、プロシージャが複雑になればなるほどバグが混入しやすくなる。そこで今回はプロシージャの複雑度を測る「循環的複雑度」という指標を紹介する。何がどう循環的なのか知らないけど、名前が醸し出すややこしさとは反対に、とてもシンプルに計算できるので身構える必要はない。まず押さえておきたいのは、この指標は10以下が理想的で、30を超えるとヤバいということ。数え方以下の参考...
View ArticleVBA セル上で文字列の置換を取り消し線と置換後の新しい色で表現する
元ネタはこちら。おもしろそうなのでやってみた。infoment.hatenablog.com今回やりたいことは、文字列の一部を置換したときにその履歴そのものを取り消し線と色で表現したいというネタ。つまり図示するとこういうこと。参照元の記事では1回目は上手く行ってるんだけど、2回目に失敗している様子。つまり、以下を成功させたい。まずはデータ構造を考えてみる複雑なプログラムを組む際に一番意識すべきはデー...
View ArticleVBA 業務フローチャートをマクロで簡単に作成するツールの更新と公開
以前、フローチャートを作成するツールの作り方を紹介した。thom.hateblo.jpこちらの反響が良かったのと、ちょうどお盆休みをいただいてて良い機会なのでもうすこしブラッシュアップし、GitHubで公開してみた。公開場所とダウンロード方法以下のリンクにてxlsmファイルを公開中。BreadChart/BreadChart.xlsm at master · thom-jp/BreadChart ·...
View Article