t-hom’s diary

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

VBA

VBA テキストボックスで複数行表示させる場合の最適なHeightは連立方程式で求まる

前回、テキストボックスの最適なフォントサイズについて書いた。 thom.hateblo.jpそこでテキストボックスのHeightプロパティを21に設定したが、今回はその根拠と複数行書ける場合の最適なHeight値の求め方を紹介する。 Meiryo UI 12ポイントのときのテキスト…

VBA テキストボックスの最適なフォントサイズは12ポイント

VBAでユーザーフォームをデザインする際、フォントサイズに気を配っているだろうか。まず、ふつうにテキストボックスを配置するとこのような外観になる。 フォントはMS UI Gothicの9ポイント。これ、ブログの画像だと読みにくくないけれど、実際にフォームを…

VBAからVBScriptへマクロを移植する方法

今回はVBScriptをやってみたいVBA使いの方へ、VBAで書いたコードをVBSに移植する方法を説明しようと思う。 特にあまり知られていないであろう最初から移植性を意識したコードを書く方法について紹介する。執筆のきっかけになったのはこちらの記事。 chemiphy…

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でアホな実験 ~ Not演算子は何個連続で使えるか

二重否定文…それは時に控えめな肯定を、時に強い肯定を生み出す日本語のテクニックである。控えめな肯定の例「できなくもない」 強い肯定の例「やらねばならない」なんてことを考えてたら、そういやNotって二個以上つなげても大丈夫なんかしらと、アホなこと…

VBA クラスモジュールでRangeの仕組みを説明する

昨日公開した以下の記事について、比喩ではちょっと難しいという声をいただいたので、今回はクラスモジュールを使って私が想像するRangeの仕組みを具体的なコードで解説しようと思う。 thom.hateblo.jpまずはSheetの模擬クラスとRangeの模擬クラスを用意する…

VBA Rangeオブジェクトはシートを操作するエージェント

VBAで扱える代表的なExcelのオブジェクトにWorkbook、Worksheet、Rangeなどがある。 ひとつのブックにはひとつのWorkbookオブジェクトが対応している。 ひとつのシートにはひとつのWorksheetオブジェクトが対応している。 ではひとつのセルに対応する固有の…

VBA Application.OnKeyを使い、F1キーで任意のアクティブブックのメインプロシージャを実行させる

VBA

今回の記事はF1キーを押したときに、今使用しているブックによって実行するプロシージャを分けるというもの。執筆のきっかけになったのはこちらの記事のコメント欄のやりとり。 chemiphys.hateblo.jp OnKeyマクロを記載したブックを閉じた後,そのショートカ…

VBA ヒープソートを実装 ~関数を沢山作って複雑な問題に対処する

VBA

私は長らくヒープソートというものが理解できなかったのだが、ついに今日、なんとか動くところまで実装できたので紹介しようと思う。ヒープソートを理解しようと思ったら、実装の前にまずヒープのノードが入れ替わるイメージを理解しておく必要がある。 そこ…

VBA Collectionを使って数値をランダムに並び替える

VBA

今回はn個の数値をランダムに並び替えるアルゴリズム。 元ネタはこちらの記事。 chemiphys.hateblo.jp上記はRnd関数のランダム性を利用したアルゴリズムで、出てきたSingle値の順位を付けることで結果的にその順位が重複のないランダムな数列になるというも…

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オブジェクト 正規表現オブジェクト しかしこれがまた曲者で、…

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