VBA覚書

クラスのPrivateメソッドもイミディエイトで実行できる

クラスのPrivateメソッドもイミディエイトで実行できる 再び超小ネタ。 クラスモジュールの準備 クラスモジュールを作る。 リスト1 クラスモジュール 'オブジェクト名は"HiddenBooks"' Private Function isHiddenBook( _ ByVal targetBook As Workbook) As …

個人用マクロブックはアドインに非ず

個人用マクロブックはアドインに非ず 「当り前だろバカ!」と思ったらスルー推奨。 IsAddinプロパティ イミディエイト・ウインドウに ?Workbooks("PERSONAL.XLSB").IsAddin と打ち込んで[Enter]をポチッ。すると、 Falseが返るのであった。 Windows.Countプ…

Split関数の裏技

Split関数の裏技 このとき、 akashi-keirin.hatenablog.com thom (id:t-hom) さんに教えてもらった。 Split関数の第2引数は省略できる 完全に思い込みで必須だと思っていた。 なるほど、Office VBA Reference の Split Function の項によると、 Syntax Spli…

ファイルのコピーを作成する(FileSystemObjectオブジェクトのCopyFileメソッド)

ファイルのコピーを作成する FileSystemObjectオブジェクトを用いる。 ファイルのコピーを作成するFunction FileSysetmObjectオブジェクトのCopyFileメソッドをラップする。 参照設定でMicrosoft Scripting Runtimeにチェックを入れておく。 リスト1 標準モ…

シートモジュールとインターフェイス

シートモジュールにインターフェイスを実装する 単なる実験。 インターフェイスを作成する クラスモジュールを挿入して、次のコードを書く。 オブジェクト名はIA1ValueShowableとする。 ちなみに、Instancingプロパティの値を「PublicNotCreatable」にしてい…

「オブジェクト型の定数」的なものを設定する

オブジェクト型の定数 定数は便利な仕組みだが、オブジェクト型の定数は指定できないっぽい。 Range型の定数を定義しようとしてみる 標準モジュールの宣言セクションに、次のように書いてみる。 で、[Enter]を押してみると、 こんな風に、コンパイルエラーっ…

Propertyを使って配列定数っぽいものを実現する

列挙体とPropertyを組みあわせて配列定数っぽくする 前回 akashi-keirin.hatenablog.com のつづき。 Propertyに配列をセットする Propertyプロシージャ内でArray関数を用いて、Propertyに配列を持たせるようにした。 標準モジュール Option Explicit Private…

配列は定数にはならない

配列を定数にすることはできるのか 配列は定数にできるのだろうか。 やってみた 標準モジュールの宣言セクションに、次のように書いてみた。 リスト1 標準モジュールの宣言セクション Option Explicit Private Const CONST_ARRAY As Variant = Array("アホ"…

Workbook.LinkSourcesメソッド(Excel)

Workbook.LinkSourcesメソッド 何気なくggっていたら、WorkbookオブジェクトのLinkSourcesメソッドというものを見つけた。 MicrosoftのOffice VBA Reference:Workbook.LinkSources Method (Excel) のページによると、 Returns an array of links in the wor…

名前、定数、列挙体(Excel)

名前、定数、列挙体 ちょっと、PINK FLOYDっぽいタイトルだったのでつい……。 名前、定数、列挙体に同じ文字列を使ってみる ワークシートのA1、A2、A3セルに、それぞれ「aho」、「baka」、「kasu」と名前をつけておく。 んで、次のように定数と列挙体を…

Sheetオブジェクトを変数にぶち込むと自作Propertyにアクセスできない?

Sheetオブジェクトの自作Propertyが呼び出せない? Sheetオブジェクトをぶち込んだ変数からアクセスできない 前回の akashi-keirin.hatenablog.com で作成したPropertyに、Sheetオブジェクトをぶち込んだ変数からアクセスしようとしたらできなかった。 リス…

Rangeプロパティの引数に定数・変数を使う(Excel)

Rangeプロパティの引数 通常、Rangeプロパティの引数と言えば、 [親オブジェクト].Range("A1") のように、セルの番地を指定する。 しかしながら、このやり方だと、マジックナンバー的になってしまって、不便だなあと思っていた。 セルに名前を付ける、という…

君は[Ctrl]+[J]というショートカットキーを知っていたか(VBE)

[Ctrl]+[J]というショートカットキー [Ctrl]+[J]の働き Twitterで、thom (id:t-hom) さんが教えてくださった。曰く、 識別子はCtrl+Jで入力候補でる と。 え? そ、そうなんすか??? というわけでちょっとやってみた。 変数名の入力中に[Ctrl]+[J] こん…

Worksheet_Changeイベントの引数Target(Excel)

Worksheet_Changeイベントの引数Target Worksheet_Changeイベントについては、イベントを起こすセル範囲を限定するのによく使う。 引数「Target」に関する注意事項 Worksheet_Changeイベントが発生したときに、プロシージャに渡される引数Targetについて、ち…

プリンタ名を調べる

プリンタ名を取得する akashi-keirin.hatenablog.com コチラをうpしたところ、Twitterで次のサイト(『パソコンの小技・備忘録(ExcelのVBAで、パソコンのプリンタ一覧を取得したい。)』)をご紹介いただいた。 たぶん、 プリンタ名を比較するときにApplic…

列挙体にはメンバを何個列挙できるか

列挙体はいくつまで列挙できるか 列挙体のメンバ数の最大って、いくつなのだろうか。 ちょっと調べてみた。 Integer型の最大値 Integer型の最大値は32767。へえ。意外と小さいな。 標準モジュールの宣言セクションに次のように書いてみる。 Public Enum MaxS…

isAutoFilteredメソッドの修正

isAutoFilteredメソッドの欠陥 isAutoFilteredメソッドとは 自作のFunction。 akashi-keirin.hatenablog.com このときに作ったもの。 こんなふうにフィルターで絞り込まれていないときにFalseを返す。 イミディエイト・ウインドウに ?isAutoFiltered(Sheet1)…

半角カタカナを全角ひらがなに変換する(StrConv関数)

半角カタカナと戦う(StrConv関数) 名簿のふりがな欄 いろんな名簿を作る必要があって、着手してから気がついた。 名簿のふりがな欄、ふりがなの付け方めちゃくちゃやんけ! ある名簿は全角ひらがな。またある名簿は半角カタカナ。 んで、StrConv関数を使っ…

Document_Closeイベントで差込データソースとの接続を切断する

Document_Closeイベントの挙動 差し込み印刷の設定をしているドキュメントは、一旦閉じると、次回起動時に自動的に前回接続していたデータソースに接続しようとする。 これはこれで親切機能なのだが、何も知らない人が差し込み設定をしたドキュメントを別の…

「標準モジュール」とは何ものなのか

「標準モジュール」とは何ものなのか 割と最近まで、「標準モジュール」というのは、単に【コードを書く場所】ぐらいの雑なとらえ方で済ませていた。 しかし、「クラスモジュール」とか、「フォームモジュール」、「シートモジュール」、「ThisWorkbookモジ…

配列変数を値渡しにする

値渡しの配列引数 配列引数を値渡しにする方法 akashi-keirin.hatenablog.com このときにも書いたとおり、通常、プロシージャの引数に配列を渡すとき、 Public Sub hogehoge(ByVal foo() As String) みたいにすると、 こんなエラーが出る。 ところが、VBA四…

配列を引数にするときの注意

配列を引数にするときの注意事項 配列引数はByRefでなければなりません SubとかFunctionの引数に配列を使用しようとしたとき、「ByVal」キーワードを付けると、 こんなふうにコンパイル・エラーになる。 従って、引数を配列にしたときには必然的に参照渡しに…

Not演算子は何をしているのか

Not演算子は何をしているのか Boolean型の式の判定 もともと、 If isHoge = True Then fooBar みたいな書き方をする方だった。 If isHoge Then fooBar みたいな書き方が、何か大切なことを省略しているような気がしてイヤだったのだ。 ところが、あるときtho…

VBAで擬似continueを実現する(失敗)

擬似continue 「VBAのイマイチなところ選手権」でもやったら、かなり上位に食い込むだろうと思うのが、 Forループでcontinueが使えない ことだと思う。 breakに相当する命令があるだけに、なおのこと歯痒いことだろう。 テスト用コード リスト1 標準モジュ…

コメントの表示・非表示を切り替える[Excel]

コメントの表示・非表示を切り替える コメントの表示・非表示を切り替えるマクロ 今まであまりコメントをVBAで操るということをしたことがなかったのだが、仕事でマクロ無し縛りで結構ややこしい数式を組み込んだワークシートを作る必要があり、 書いた自分…

指定した名前のセル範囲が参照切れだったら削除する(Excel)

定義された名前を消す そういえば、定義された名前をVBAから消すのって、どうしたらいいんだろう? そう思ってちょっと調べてみた。 WorkbookオブジェクトのNamesプロパティ コチラによると 指定されたブックのすべての名前 (すべてのワークシートの名前を含…

配列の各要素にはFor Each ~ Nextでアクセスできる

配列の各要素にFor Each ~ Nextでアクセスする 配列の要素にはFor Each ~ Nextでアクセスできる akashi-keirin.hatenablog.com コチラに jinoji さんという方からいただいたコメント。 配列からの取り出しを For Each e In TargetArray とやれば2次元配列…

要素数「1」の配列(アホネタ)

要素数 1 の配列 akashi-keirin.hatenablog.com のコメント欄で、VBA四天王のうちの二天王から、次のようなことを教えていただいた。すなわち、 配列の次元数の上限は60 各次元に0と1の二つの添え字を持たせるとして、最小のByte型配列を利用しても、2の次元…

ユーザー設定のドキュメントプロパティを気軽に使う

ユーザー設定のドキュメントプロパティを操作するFunction akashi-keirin.hatenablog.com このときに、処理用パラメータの保存場所としてユーザー設定のドキュメントプロパティを使ったが、もっと気軽に使えるようにFunction化しておいた。 追加用Function …

「作業グループ」状態をVBAで作るには[Excel]

「作業グループ」状態にする 複数のシートにまとめて変更を加えたいときには「作業グループ」状態にする。 しかし、VBAからExcelを操作するときに、あまり「作業グループ」状態を使うことがなかった。 そういえば、どうやるんだろう? で、確かめてみた。 マ…