クラスモジュール活用
先日Excel方眼紙で作成された表を1データ1列の綺麗な表に変換するために、空白行を削除するというシチュエーションが発生した。以下は今回のマクロ紹介のために作成したダミー。全国の郵便番号データから無作為に100件選んだものである。 上記の表では列が結…
プログラミングの学習途中で、いくつか難しい概念にぶつかる。 インターフェースもその一つだと思う。このインターフェースは、フォームのボタンなどの、ユーザーインターフェースのことではない。 クラスモジュールなどで作ったオブジェクトに適用するイン…
プロパティーに値を代入するという表現をよく見かける。 私もつい最近までそのように表現していたけれど、これって厳密には間違ってるんじゃないかと思い始めている。 というのも、Propertyプロシージャを学習する際、この「代入」という表現が理解を難しく…
今回はクラスモジュールを使って連結リストを作成してみる。 実験ではなく、必要性があって作ることになったのでそういう意味では実用的なサンプルとして紹介できるかと思う。 連結リストとは 情報処理技術者試験などで学習したことがある人も要ると思うが、…
さて、前回は自作クラスにEventを実装する方法について説明した。 thom.hateblo.jp前回紹介したマクロはMoveNextをクリックするたびにカーソルが下に移動するというものだったが、CursorオブジェクトのValueに上限・下限を設けていないためクリックし続ける…
今回はクラスモジュールに、自作のEventを実装し、シートモジュールでクラスのイベントを受け取る処理をやってみる。 まずはEventを使用しないクラスサンプル クラスモジュールを挿入し、以下のコードを貼り付け。 ※サンプルなのでクラスモジュールのオブジ…
私がクラスモジュールの使い方を知るまでのエピソード 私が初めてオブジェクト指向の便利さを理解したのは、なぜかVBScriptだった。ExcelファイルをVBScriptのファイルにドラッグ&ドロップすると内容を読み取ってAccessのデータベースに登録し、ドロップさ…
これまでクラスモジュールについて扱ってきたけど、言葉の意味を知らないままクラスクラス言っててもなかなかその本質的なイメージをつかむことは難しいと思う。やはり人間、なじみのない言葉で何かを覚えようというのは無理がある。そこで今回はVBAは一旦脇…
クラスモジュールを使いこなすためには、モデル化という概念をおさえておくと分かりやすい。しかしいきなりモデル化といわれても何のことかわからないと思うので、順を追って説明していく。まずプログラミングにおけるモデル化の話をする前に、モデルという…
オブジェクト変数の宣言と使用については、以下の2パターンが存在する。■パターン1 宣言と同時にNewしてしまう方法 Dim C As New Collection■パターン2 宣言とオブジェクトのSetを分ける方法 Dim C As Collection Set C = New Collection私はこれまで大体の…
今回は、Withを使ったコードをWith無しのコードに変換するマクロを作ってみる。 何の役に立つんだというツッコミはなしで。目次 マクロの概要 実現方法を検討する 入れ子になったWithの扱い方 VBAでスタックを実装 スタックを使ったWithを外すコード 課題 マ…
以下のような注文票にマクロでデータを記入することを考えてみる。 人間が記入する場合は、次のように考えながら記入していくだろう。 「注文票の、ひとつ目の商品名は"パソコン"で、単価は10万円、個数は40個。二つ目の商品は"複合機"で、単価は150万円、個…
こちらの記事を読んだところ、同じようなChangeイベントプロシージャがコントロールの数だけできてしまうことにお悩みの様子。 kantoku.hatenablog.com面白そうなので色々調べながらやってみた。参考にしたページはこちら 3.4.3 共通イベント処理クラス - EX…
以前、クラスモジュールをエクスポートしてテキストエディタで編集することでデフォルトプロパティを変更できるという記事を書いた thom.hateblo.jpしかし、わざわざエクスポートして書き換えるというのも面倒くさい。VBAはテキストも扱えるので、どうせなら…
今回の記事では、VBAでシート上のシェイプをすべて走査してどのシェイプと重なっているかを表示させるところまでを紹介する。 具体的なグループ化については今のところまだ完成していないので取り扱わないが、今回の記事がスラスラ理解できるレベルの方なら…
VBAには標準モジュールのほかに、クラスモジュールというものがある。 クラスモジュールについて調べようと思っても日本の書籍ではあまりきちんと解説されておらず、主にネットから情報を得ることになる。 使い方についてはまだ情報が存在するのだが、「使い…
オブジェクトを扱うときに登場するNewキーワード。おそらく以下の2種類の使い方が一般的かと思う。まずは、変数へ新規インスタンスをセットする際に使うNew。 (以下のObjectには任意のオブジェクトが入る。例:Collection) Dim obj As Object Set obj = New O…
Excelで作成されたマニュアルをWord化したい場合がある。 一旦PDFにしてから読み込んでくる手もあるが、あとで色々と機能を付け足すためにもマクロでやってみたいと思う。Excelマニュアルは、以下のように文字と画像が交互に配置されているものを想定してい…
Excelで2つの表を比較したいというケースがよくある。 たとえば、以下のように表Aと表Bがあり、それぞれ片側にしかないIDを抽出したい。 このとき、IDは重複がなく、昇順に並んでいるものとする。VLookupでやれば簡単だが、表の規模が大きく、頻繁に行う場合…
今回は公開されている既存のライブラリ「Ariawase」を使って解説したいと思う。Ariawaseは次のページから入手できる。github.comページを開くと右下のほうにZipでダウンロードできるボタンがあるのでこちらを入手する。 zipを解凍するとbuild.batファイルが…
今取り組み中の以下の書籍で、油分け算というパズルが登場する。Excel VBAでパズルを解こう作者: 坪崎誠司出版社/メーカー: 株式会社プレスティージ発売日: 2010/07/06メディア: 単行本(ソフトカバー)この商品を含むブログを見る3リットル、5リットル、8リ…
その1ではOperatableNumberというオブジェクトを作成した。 thom.hateblo.jp似たような内容になるが、今回はOperatableStringを作成してみようと思う。 ※なお、サンプルなので変数の型などは一部省略している。クラスモジュールを追加し、以下のコードを追加…
以前以下の記事で書いたものは、デフォルトプロパティの設定だった。 thom.hateblo.jpしかしその後、海外のサイトでさらにすごいテクニックを発見。 http://www.papwalker.com/ref101/ccol.htmlかいつまんで説明する。まずクラスモジュールを作成し任意のク…
先日買った以下の書籍に取り組みはじめた。アルゴリズム大事典 (I・O BOOKS)作者: 橋本英美出版社/メーカー: 工学社発売日: 2013/11/01メディア: 単行本この商品を含むブログ (3件) を見る序盤に足し算だけで掛け算をするという問題があるが、普通に書くとこ…
今回はベテランVBA使いの方にもあまり活用されていないと思われるClassモジュールの活用について。現在発売されている書籍でもClassモジュールについての説明がほとんど無く、パーフェクト○○とか、完全○○とか書かれた網羅系の書籍をあたると一番最後の方に申…
ExcelでのIE操作クラスを作成中。 といってもただのIEラッパーで、読み込み完了処理を隠蔽してVBA初心者にも使いやすくするのが主目的である。私がVBAでIE操作を始めた頃はインターネット上で調べるしかなくて、まずいサイトにあたるとコードが不安定だった…
海外のサイトで、自作のクラスにデフォルトプロパティを設定する方法を発見した。 (リンク先は英語) http://www.cpearson.com/excel/DefaultMember.aspxデフォルトプロパティとは、クラス名だけで参照できるデフォルトの値のことである。 たとえば、ExcelのR…
タイトルにコンストラクタとあるが、正確にはコンストラクタもどきである。先日VBAのAriawaseライブラリのCore.basに書かれたInitのコードに感銘を受けた話を書いた。 ただ、私の個人的な好みとしては、外部DLLの参照よりはVBAの基本機能だけで解決してしま…
VBAはクラスを継承することができないが、インターフェースを作成することでポリモーフィズムを実現させることができる。元ネタはこちらのサイト 4.5 インターフェース継承による開発 - EXCEL-VBA開発講座 VBAに関しては入門者向けの情報が多いなか、高度な…
はじめに断っておくと、実際にVBAのコンストラクタに引数を渡す裏技は無い。 タイトル詐欺で申し訳ない。 2015/2/15追記 これより後の記事で、もう少しスマートなやり方を発見している。(以下リンク) VBAでインターフェースを使って引数付きのコンストラクタ…