t-hom’s diary

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

VBA

VBA マクロの高速化のためのApplication設定をクラスモジュールにまとめる

今回はちょっと変わったクラスモジュールのテクニック案。 異端扱いされそうな気がするので、思いついた私自身、採用には慎重なのだけれど、アイデアとしては面白いと思ったので備忘録として公開してしまうことにした。さて、過去にPropertyプロシージャを使…

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

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

VBA 変数で躓いた方に贈る、くどいくらい丁寧な変数の説明

VBA

さて、今回は初心者向けの記事なので、本文を「ですます調」で書くことにする。 途中でこのように緑文字でコメントを入れる。コメントはいつもどおり「だ・である調」で書く。本文は黒文字とする。プログラミングでは「変数(へんすう)」という道具を利用して…

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

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

VBA Excel表をHTMLのtableタグに変換するマクロ

VBA

先日メインサイトにXlRgbColor定数の一覧を掲載した。色順に並べたXlRgbColor定数の一覧表 - You.Activate今回はこれを作る時に使用したExcelマクロを題材に、VBAでExcel表からtableタグを出力する方法について記す。まずHTML化する前のExcel表を用意してお…

VBA プロシージャのオーバーロード機能(もどき)を自作する

今回のネタは@mmYYmmddさんのつぶやきから生まれた。感謝。さて、オーバーロードとは。 ふつう、Functionが取れる引数の数や型は固定されていてあまり自由が利かないのだが、引数の数や型によって処理を振り分けたい場合がある。 VariantやOptional、ParamAr…

VBA 入門書を再評価する ~ チャレンジングな5冊をピックアップして劇甘レビュー

私は普段マニアックな記事ばかり書いてるが、実は入門者向けの教材なんてのも書いている。さりげないアッピールはいやらしいので、堂々といこう。宣伝!みんな、見てねっ!EXCEL VBA 入門教材 急がば回れ!文法から覚えるやさしいVBA 入門ダウンロードはこち…

VBA パスカル記法を単語ごとに区切って配列で返すSplitPascal関数を自作する

VBA

今回はパスカル記法を単語ごとに区切って配列で返す関数を作成する。前回このような記事を書いたのだが、 thom.hateblo.jpこの記事を受けて@Dev_Clipsさん(サイト)からツイッターで「ImageMsoの"名前"の一致率も類似画像抽出に使えそう」とのヒントを貰った…

VBA GDI32で画像をピクセルごとに比較して類似画像を選り分けるマクロ

今回の記事は以下3記事の集大成である。 1) VBA アドイン作成で使用するリボンアイコンの組み込み画像(ImageMSO)をBitmapで一括保存する方法 - t-hom’s diary 2) VBAで2つの画像ファイルを比較して内容が同一かどうかを判定する方法 - t-hom’s diary 3) VBA …

VBA クラスモジュールを使って色見本(カラーパレット)を作る

前回の記事ではVBAで2つの画像を比較して内容が同一かどうかを判定した。 「次回はこれを更に自動である程度分類するため、VBAで機械学習もどきをやってみようと思う。」と書いたのだが、ちょっとコード分量が多くなりそうなので前半と後半に分けようと思う…

VBAで2つの画像ファイルを比較して内容が同一かどうかを判定する方法

VBA

前回、アドインのリボンで使用できるImageISOをビットマップで保存するという記事を書いた。thom.hateblo.jp実際に保存してみたところ、その数8425点。しかし名前が違うだけで同じ画像がたくさんある。たとえば以下の3つ。 これらは特定画像を探したいときに…

VBA アドイン作成で使用するリボンアイコンの組み込み画像(ImageMSO)をBitmapで一括保存する方法

VBA

目次 能書き ~ うんたらかんたら 全ImageMSOをBitmapで保存するマクロ 能書き ~ うんたらかんたら Excel、Word、PowerPointでは作成したマクロをアドインとして保存することができる。また、オリジナルのリボンタブを作ってマクロを登録しておくと配布され…

VBA XlRgbColor定数をシート上に色相順、明るさ順で出力する

VBA

「あなたの好きな色は何色ですか?」と聞かれたら赤、青、緑、黄、黒、白、紫…まあ、普通はこんな感じで答えると思う。ここで、狐色、若草色、深紅、枯草色といったちょっとこだわった感じの名前を返してくると、「おっ、情緒的でいいな」と思う。ラベンダー…

VBA オートシェイプで作った桜のアイコンでユーザーフォームを可愛くデコレーションする

普段からこのブログを読んでくれてる方は、今回のタイトルを見て「ついにthomもVBAのやり過ぎで頭がおかしくなってしまったか」と思われた方もいるかもしれない。可愛くだなんて。30超えたオッサンが何言うとんねん。 さてさて、今回作ったのはこれ。でん! …

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

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

VBA クラスモジュールを使ってセル内の文字を簡単に色づけ

VBAでセル内のテキストの個別の文字に色をつけるのはわりに面倒くさい。たとえばこんな風に、着色したいとしよう。 上のテキストを実現するには、以下のコードを書けば良い。 Sub hoge() Sheet1.Range("A1").Value = "Red, Green, Blue" Sheet1.Range("A1").…

VBAでテンプレートを元にHTMLコードを自動生成する

VBA

今回はVBAを利用してHTMLを生成するテクニックを紹介題材は先日紹介した、参照設定とCreateObjectの対応リスト - You.Activate thom.hateblo.jpこのページはご覧いただくとわかるように、項目名は同じで内容だけ異なるものが複数回出てくる。 ひとつのオブジ…

VBA 中級者を悩ませるプロシージャ分割をマスターする極意

VBA

タイトルで大きく出てしまった。極意だなんてまあよく恥ずかしげもなく。 「だって教えるプロの~」よりマシか。。なんちゃって。ま、是非知ってほしい内容ではあるので、釣ってみた感じ。さて、それなりにVBAを書けるようになった方が次に悩むこととして、…

VBA WSHとScriptingに存在するFileSystemObjectは同一のバイナリーであることが判明

VBエディタから参照設定で「Windows Script Host Object Model」と、「Microsoft Scripting Runtime」の両方にチェックを入れると、どちらのライブラリにもFileSystemObjectが存在する。 今回はこの2つが同じものなのか、それとも別物なのかを検証してみた。…

VBA ありそうで無かった、参照設定とCreateObjectの対応表を作った

VBA

表題のとおり。。。なんだけど、作ったといってもまだたったの6点のみ。 ファイルシステムオブジェクト ディクショナリーオブジェクト WSHシェルオブジェクト WMIオブジェクト InternetExplorerオブジェクト 正規表現オブジェクト しかしこれがまた曲者で、…

(解決済)VBAからPowerShellのパラメーター付きコマンドが実行できずにハマった話

先日以下の記事を書いたが、ひとつ問題が発覚した。thom.hateblo.jpパラメーター付きのコマンドがうまく実行されないのだ。 実行時エラーで、「ファイルが見つかりません」と出てしまう。つまり、コマンドが失敗してテンポラリーファイルが作成されてないと…

VBAから手軽にDOSコマンドやPowerShellを実行して結果を取得するモジュールを作成

VBA

システムの運用をやっていると、VBAからDOSコマンドとかPowerShellを実行したくなるケースがある。 WScript.ShellのExecメソッドなら標準出力が取得できるのだが、一瞬DOS窓が開いてしまうのがちょっと格好悪い。非表示でやりたいと思ったら、Runコマンドで…

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

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

九九、FizzBuzz、じゃんけんの3つをプログラミングの「永字八法」に認定する

漢字の「永」の字には、書に必要な以下の技法8種が全て含まれている。 点 横画 縦画 はね 右上がりの横画 左はらい 短い左はらい 右はらい このことを永字八法(えいじはっぽう)というらしい。カッコイイ!つまり書の練習に「永」という漢字をチョイスすれ…

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

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

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

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

VBA SmartArtを使ってシートごとに作業ステップを表示するバーを作成するマクロ

VBA

今回はVBAでSmartArtを使ってシートごとに作業ステップを表示するバーを作成してみようと思う。作成物のイメージはこのようなもの。 今回マクロで作成するのは上部のStepを表示するバーの部分だけ。シート2ならStep2がハイライトされる。 ひとつの業務に使用…

VBA デザインしたユーザーフォームを元にNewで複数のフォームインスタンスを作る。

VBAでユーザーフォームはふつう、単一のオブジェクトとして扱う。たとえば以下のようなフォームを作ったとしよう。 オブジェクト名は「frm成績」としたので、このフォームを表示させるコードはこうだ。 Sub hoge() frm成績.Show End Sub この時フォームは、…

VBA 参照設定とCreateObjectを定数1つで切り替えるテクニック

VBA

VBAで外部のオブジェクトを扱うには、事前バインド方式と遅延バインド方式の2種類がある。事前バインドとはいわゆる参照設定のことで、遅延バインドとはCreateObject関数によるオブジェクト生成を指す。さて、どちらが良いかと言われると一長一短なので困る…

VBA ウォッチウインドウとステップ実行でオブジェクト変数の仕組みを学ぶ

以前クラスモジュールの入門記事でオブジェクト変数はタグのようなものだと書いた。 http://thom.hateblo.jp/entry/2016/12/31/013555#オブジェクト変数は箱じゃなくてネームタグでイメージしよう具体的な仕組みは以下の記事で書いた。 thom.hateblo.jpとは…

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