t-hom’s diary

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

クラスモジュール活用

VBA 正円同士の当たり判定用クラス

ゲームでは正確性よりもスピードが求められる場面がある。 当たり判定もその一つで、キャラ同士がぶつかったかどうかの判定は矩形や正円などに単純化して表現される。今回Twitterで羽毛田氏がたい焼きのキャラの当たり判定の方法を模索してるようなので以下…

VBA オートシェイプを使った泡のアニメーション

TwitterでJavascriptを使った綺麗なアニメーションが流れてきたので、VBAでも真似してみた。 ics.media本家の躍動感まではコピーできなかったけど、それなりに見栄えのするアニメーションができたので紹介。 作り方 まずSheet1のオブジェクト名をプロパティ…

VBA セル上で文字列の置換を取り消し線と置換後の新しい色で表現する

元ネタはこちら。おもしろそうなのでやってみた。 infoment.hatenablog.com今回やりたいことは、文字列の一部を置換したときにその履歴そのものを取り消し線と色で表現したいというネタ。つまり図示するとこういうこと。 参照元の記事では1回目は上手く行っ…

VBA 固定長のコードを扱うオブジェクトをクラスモジュールで作ってみた

業務では固定長のコードを扱うプログラムを作ることがある。例えば以下のようなコードがあったとする。 20180728MPGこれは私が考えた適当なコードだが、2018年7月28日生まれの男性プログラマーを表すことにする。つまり先頭8桁が生年月日、次の1桁が性別、最…

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

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

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

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

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

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

Access VBAでフォームのコントロールイベント共通化

前回紹介したExcel VBAのユーザーフォームに動的メニューを追加する方法を紹介した。 thom.hateblo.jpただ、実は作りたかったのはAccessで、連票フォームのフッター領域にそれを配置したかったのだ。 慣れないAccessと格闘する前にまずExcelフォームでプロト…

VBA クラスモジュールを使ってフォームに動的なメニューを作る

今回作成するのはボタンを動的に切り替えられるメニューである。これだけでは意味が分からないと思うので動作サンプルを紹介する。 通常は1つのボタンに1つの処理なので、5つボタンがあれば5つしか処理は書けないが、このメニューは▲と▼で動的にボタンを切り…

VBA クラスモジュールでExcelのテーブル(ListObject)を操作する

今回はVBAでちょっと扱いにくいExcelのテーブル(ListObject)をクラスモジュールで包んで簡単に操作できるようにするコードを紹介。 作り方 まずVBEで対象のブックを選択し、挿入メニューからクラスモジュールを挿入する。 挿入されたクラスモジュール(Class1…

VBA クラスモジュールで今月末・来月初などの日付計算を楽に扱う

今日はVBAで日付を扱う案件があった。 とりいそぎ、日付関連の関数で済ませたけれど、オブジェクトがあると楽だなと思ったのでクラスモジュールを作ってみた。 作り方 まずはクラスモジュールを挿入し、プロパティウインドウから名前をDateObjectに変えてお…

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

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

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

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

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 クラスモジュールを使ってセル内の文字を簡単に色づけ

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

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

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

VBA クラスモジュールでフィールド数の多いデータを扱う

最近読者になったブログにこんなお悩みが。 80以上の要素を持つ400~500件のデータをどう扱おうか悩み中。Powerpoint VBAに触れてみて - chemiphys’s blog自分ならどうするってのを考えてみたので公開。 やはり人のブログを読むと刺激されて執筆が捗る…

VBA クラスモジュール 超 入門

このブログではこれまでにクラスモジュールを活用したコードをいくつか紹介してきたが、使いどころの紹介がメインでクラスモジュールそのものの使い方について一から学べるような構成は取っていなかった。今回は「クラスモジュール超入門」と題してクラスモ…

VBA 自分と同じクラスの新規オブジェクトを返すメソッドを作ってコレクションにスマートに代入する

VBAではコンストラクターに引数を渡すことができないので、一旦オブジェクトを作ってから値をセットするという二度手間が発生する。今回はその手間を省くべく、引数をもとにオブジェクトを自己複製するメソッドを作ってみた。まずクラスモジュールを挿入し、…

VBA 標準モジュールのマクロを読み取って起動時にVBEのメニューに自動登録するアドインを自作する

今回は、指定の標準モジュールにマクロを書いておくとブックの起動時にVBエディタのメニューに自動登録してくれるアドインを作る。 VBエディタのメニューから実行するマクロなので、主に開発支援のためのコードを登録すると便利。 アドイン化することで常にV…

VBA クラスモジュールをゴミ箱代わりに使って複数列を一気に削除する方法

先日Excel方眼紙で作成された表を1データ1列の綺麗な表に変換するために、空白行を削除するというシチュエーションが発生した。以下は今回のマクロ紹介のために作成したダミー。全国の郵便番号データから無作為に100件選んだものである。 上記の表では列が結…

VBA インターフェースとは、プロパティやメソッドの存在を保証する規格のようなもの

プログラミングの学習途中で、いくつか難しい概念にぶつかる。 インターフェースもその一つだと思う。このインターフェースは、フォームのボタンなどの、ユーザーインターフェースのことではない。 クラスモジュールなどで作ったオブジェクトに適用するイン…

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

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

VBA クラスモジュールで連結リストを作成する方法

今回はクラスモジュールを使って連結リストを作成してみる。 実験ではなく、必要性があって作ることになったのでそういう意味では実用的なサンプルとして紹介できるかと思う。 連結リストとは 情報処理技術者試験などで学習したことがある人も要ると思うが、…

VBA 自作クラスのBeforeChangeイベントでCancel処理をする方法

さて、前回は自作クラスにEventを実装する方法について説明した。 thom.hateblo.jp前回紹介したマクロはMoveNextをクリックするたびにカーソルが下に移動するというものだったが、CursorオブジェクトのValueに上限・下限を設けていないためクリックし続ける…

VBA クラスモジュールに自作のEventを実装する

今回はクラスモジュールに、自作のEventを実装し、シートモジュールでクラスのイベントを受け取る処理をやってみる。 まずはEventを使用しないクラスサンプル クラスモジュールを挿入し、以下のコードを貼り付け。 ※サンプルなのでクラスモジュールのオブジ…

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

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

VBA クラスという用語は「類(るい・たぐい)」を指す言葉である。

これまでクラスモジュールについて扱ってきたけど、言葉の意味を知らないままクラスクラス言っててもなかなかその本質的なイメージをつかむことは難しいと思う。やはり人間、なじみのない言葉で何かを覚えようというのは無理がある。そこで今回はVBAは一旦脇…

VBA モデル化の概念を理解すると、クラスモジュールの使い方が分かる

クラスモジュールを使いこなすためには、モデル化という概念をおさえておくと分かりやすい。しかしいきなりモデル化といわれても何のことかわからないと思うので、順を追って説明していく。まずプログラミングにおけるモデル化の話をする前に、モデルという…

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