t-hom’s diary

主にVBAネタを扱っているブログです。

IT技術の独学で入門難民にならないために大事なこと

IT技術を独学するにあたって、挫折しないために必要なことは何だろうか。 挫折といっても原因は様々だけど、大きく分けて「続かない」と「始められない」の2種類がある。 今回紹介するのは「始められない」を避けるために大事なこと。ある技術の学習を始めら…

はてなブログ(このサイト)を常時SSL化したので備忘録

本日このブログを常時SSL化したので、備忘録も兼ねてここに記しておく。 切り替えそのものはダッシュボードから簡単にできるのでまぁ簡単。 問題はその後。まぁただ、以下の広野さんの記事を読んで、面倒な後処理が発生することは想定内ではあった。心の準備…

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

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

VBA オブジェクトのメソッドチェーン

メソッドチェーンとは メソッドチェーンとは、ひとつのオブジェクトに対して複数メソッドを1ステートメントで実行するテクニックである。 具体的には、オブジェクトのメソッドが自分自身を返すように設計することで、メソッドをドットで繋ぐだけで次々とその…

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

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

VBA マクロで利用する設定値をシートに保存し、文字列でアクセスするテクニック

VBA

今回はマクロで利用する設定値をシートに保存し、汎用的に文字列でアクセスできるようにするテクニックの紹介。 作り方 標準モジュールを挿入し、プロパティウィンドウからオブジェクト名をConfgに変更する。 Configモジュールに以下のコードを張り付ける。 …

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

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

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

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

VBA 専用ツールを使わないカスタムリボン作成チュートリアル

今回はマクロを実行できるリボン作成方法の紹介。 Excel2013をターゲットにしている。2010でもほぼこの通りにできるが、微妙にrelsに指定するURLが違ったりするのでうまくいかない場合は他のサイトを合わせて確認することをお勧めする。 ブックの準備 新規ブ…

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

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

VBA バグ?Number Formatがコピーされない事象

作成中のマクロでバグっぽい事象が確認されたのでメモ。 発生した環境はExcel 2013 32bit on Windows 10 Home 64bit。マクロというよりは、手でやっても同じことになるので手作業の方を先に紹介。 新規シートを挿入する。 B1セルに時刻を入力する。 A1:B2の2…

VBA 角丸四角形の角の丸めサイズを統一するマクロ(Excel・PowePoint・Word対応)

VBA

角丸シェイプは普通の四角形に比べて柔らかい印象を与えるため、よく使用される。しかし普通に配置すると、シェイプのサイズによって角丸のサイズも拡大・縮小するため、丸めサイズが不揃いで格好悪い。 諦めているか、目視で微調整している方がほとんどだと…

VBA オートシェイプの吹き出しの剣先を狙った位置に表示させるマクロ

VBA

オートシェイプを扱うマクロで特にややこしいのがAdjustmentsプロパティの調整だ。Adjustmentsはシェイプを選択したときに黄色のハンドルが表示されるもので、ドラッグすることで調整ができる。 説明などでよく利用される吹き出しもAdjustmentsプロパティを…

VBA 変数宣言はIfやFor等のコードブロック中に書いても機能する

VBAでは、変数宣言をIfやFor等の制御構文の中に書くことができる。 作法としてどうなのって話は一旦置いといて、とりあえず実証してみよう。以下のマクロは正常に実行できる。 Option Explicit Sub hoge() If False Then Dim variable As Integer End If var…

VBA 重なっているシェイプをグループ化するマクロ

今回の記事は重なりあうシェイプを自動判定してグループ化するマクロ。 といっても以前にクラスモジュールを使用してシェイプ同士が重なっているかどうかの判定までは作ってるので今回は手入れしてちゃんとグルーピング部分まで完成させたのでコードの紹介の…

VBA オートシェイプのグループを再帰的にグループ解除する。

VBA

今回は多重的にグループ化されたシェイプを全てグループ解除するマクロを紹介する。 グループ化されたもの同士がさらにグループ化されていると、一度解除しても以下のようにまだ子グループが残る。 もう一度解除するとようやくすべてのシェイプが分解される…

VBA Excelのウィンドウを最前面に出してから、元の重ね順に戻す方法

VBA

今回はExcelのウィンドウを1秒ほど最前面に出してから、元の重ね順に戻すマクロを紹介。 マクロというか、ほとんどAPI処理になってしまった。何がしたかったかというと、以前作成したスクリーンショット自動貼り付けマクロ(以下)において、貼り付けがうまく…

VBA 税法条文のカッコ書き部分にオリジナルの書式を適用する。

TwitterでVBA検索してたら面白そうなネタがあったので乗っかり。税法のカッコ書きの部分にオリジナルの書式を適用するマクロが作りたい様子。ふむふむと思って調べてみた。 十 同族会社 会社(投資法人を含む。以下この号において同じ。)の株主等(その会社…

VBA SubとFunctionとPropertyの使い分け

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

VBA Publicなプロシージャをマクロの実行メニューから隠す方法

ユーザーに実行させたくないマクロを「マクロの実行」メニューから隠す方法として最も簡便なのはプロシージャをPrivateにしてしまうことだ。 しかしマクロがある程度大きくなると、複数のモジュールにプロシージャを分散させたい場合がある。他モジュールか…

Static変数を利用してステータスバーに文字をスクロールさせる。

VBA

今回はExcelのステータスバーに電光掲示板のように文字をスクロールさせるマクロを紹介。 もともと作りたかった案件とは違うが、そちらが失敗して副産物として単体で何か使えそうな気がしたので簡単にメモ。矢印の方向に文字が流れる。 コード ※Mainプロシー…

プログラムコード中に値(あたい)は登場しない

VBAに限らず全てのプログラミング言語で言えることだが、コード中に値(あたい)が直接登場することは無い。 最近、「値とは何か」ということを掘り下げて考えることがあり、ようやくこの結論に行きついた。たとえば、数字の「1」。これは一般的に値だと理解さ…

学習において、疑問を抱えたまま次のページをめくる勇気

何かを学んでいると、まだ説明されていない箇所に対して色々と疑問が湧いてくることがある。たしかに、分からないというモヤモヤした気分のまま次に進むのはなんとなく気持ち悪いものだ。一般的に学習において疑問を持ち、自主的に調べるのは良いこととされ…

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

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

VBAの知識の依存関係の整理を試みる

※今回の記事は基本的に自分用の備忘録です。VBAの学習における知識の依存関係の整理を試みた。 試みたというのは、お世辞にも成功したとは言えない為である。書籍でプログラミングを学ぶ際は、ふつう1ページずつ読み進めていく。 これに対して、実際の知識体…

Excelのセキュリティ設定と怪しいファイルの対策

Excelには、悪意のあるマクロによってコンピューターが被害を受けることがないようにいくつかの防御機構が備わっている。 しかしExcelマクロの解説書・解説サイト等では利便性の観点からか、設定を無効化しましょうという方向での解説が多く、セキュリティリ…

プログラミング言語はコンピューター語ではなく人間のための言語

プログラミング言語とは何か。 初心者に向けて、よく次のような説明がなされる。 コンピューターは日本語や英語で指示しても理解できない。だからコンピューターが理解できる言葉、つまりプログラミング言語でコードを書く必要がある。 プログラミングを学び…

VBScript ドラッグ&ドロップでファイルをAccessDBに登録する仕組み

PCのファイルは通常「フォルダ分け」によって整理される。 ところがフォルダ―ツリーを使った整理は実際のところそんなにうまく機能しない。 なぜなら、コウモリ問題が存在するから。コウモリ問題とは、物事を単一の基準で分類していくと両方の基準に合致した…

VBA入門記事 インデント徹底解説!

VBA

VBA初心者のコードを見ると、インデントが乱れていることが多い。 中・上級者にとって、インデントはあまりに自明のことで、それゆえに詳しく解説されることがない。せいぜい入門書の最初の頃にちょろっと「きちんとインデントしましょう」と書かれる程度で…

プログラミング用語はなぜ小難しいのか

プログラミングでは識別子・キーワード・文字列・演算子・リテラルといった小難しい言葉が登場する。 意味は調べれば分かるが、なんでわざわざそんな小難しい言葉を使うんだろうか。演算子は、計算記号って呼んじゃだめ? 文字列は、単語って呼んじゃだめ? …

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