VBA覚書

名前、定数、列挙体(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を操作するときに、あまり「作業グループ」状態を使うことがなかった。 そういえば、どうやるんだろう? で、確かめてみた。 マ…

省略可能なオブジェクト型引数のデフォルト値

省略可能なオブジェクト型の引数のデフォルト値 省略可能な引数 プロシージャに省略可能な引数を設定するときには、 Public Sub hogeHoge(Optional ByVal foo As String = "ち~んw") というふうに書く。 引数名の指定の最初に「Optionalキーワード」を付け…

オートフィルターの状態を取得するFunction

オートフィルターの状態を取得する 元データが置いてあるワークシートがオートフィルターで絞り込まれているのに、それに気づかずにマクロを実行してわけのわからない結果が出て(゚Д゚)ポカーンとなったことはないだろうか。 わしはある!!!!!!!! そんなわけで、オ…

オートフィルター、Rangeオブジェクト、2次元配列

※題名は、PINK FLOYDのオマージュです。 オートフィルターをかけたRangeオブジェクトを2次元配列にぶち込む セル範囲の値を2次元配列にぶち込むお馴染みの方法。 ClearContentsメソッドでは非表示行が無視されたが、この場合はどうなるのか。 やってみた …

オートフィルターとClearContentsメソッド

フィルターをかけているときのRange.ClearContentsメソッドの挙動 ちょっとビックリしたので、記しておく。 フィルターで非表示の列が含まれているRangeオブジェクトにClearContentsメソッドを実行する こんな表があったとする。E列には全て値が入っている。…

レジストリを使う(2)

レジストリを削除する 今回は、前回の akashi-keirin.hatenablog.com のマクロに、レジストリ削除機能を付加する。 レジストリの削除 『VBAエキスパート 公式テキスト ExcelVBAスタンダード』の206ページによると、 レジストリのデータを削除するには、Delet…

レジストリを使う

レジストリに値を保存する 今回は、前回の akashi-keirin.hatenablog.com のisDisplayableプロパティを、レジストリで管理するように変更する。 レジストリへの値の書き込み 『VBAエキスパート 公式テキスト ExcelVBAスタンダード』の203ページによると、 レ…

次回からは表示しない(ユーザーフォーム)[Excel](5)

次回からは表示しない まさかの第5弾!!!!!!!! 四天王からのアドヴァイス (私が勝手に認定している)VBA四天王の一人、 id:imihito さんから、前回の akashi-keirin.hatenablog.com にコメントをいただいた。 曰く、 もとい、 `myDocProp` という名前の`Fun…

次回からは表示しない(ユーザーフォーム)[Excel](4)

次回からは表示しない さらにシンプルなコードにする 「もうええっちゅうねん!!!!!!!!」という声が聞こえてきそうだが、もう一本だけ。 前回 akashi-keirin.hatenablog.com かなりシンプルになったコードだが、 ThisWorkbook.CustomDocumentProperties.Item(…

次回からは表示しない(ユーザーフォーム)[Excel](3)

結局…… WorkbookオブジェクトのCustomDocumentPropertiesコレクションを使うんだから、もはやPublic変数は必要なかった、という話。 akashi-keirin.hatenablog.com 今回使用するユーザーフォームについては、コチラの記事をどうぞ。 コードの修正 前回 akash…