VBA覚書

Worksheet.UsedRangeに関する衝撃の事実(大袈裟)

Worksheet.UsedRangeプロパティに関する衝撃の事実(大袈裟) はけたさんの一言 Twitterで、はけたさんが、 こんなことをおっしゃっていたので、実験してみた。 UsedRangeとは何なのか まず、 akashi-keirin.hatenablog.com このときに使用した このシートの…

配列を配列の要素にする

配列の配列を作ってみる 配列の要素を配列にすることはできるのか。 やってみた。 準備 Split関数をラップしたFunctionを作って、簡単にString型の配列を作れるようにした。 リスト1 標準モジュール Private Function setArray( _ ByVal spaceSeparatedWord…

列挙体の要素列挙時に「:」による改行が使えた

列挙体の要素列挙時に「:」による改行が使えた 前回の akashi-keirin.hatenablog.com に、id:imihito さんからコメントをいただいた。 曰く、 「: hgAho: hgBaka: hgKasu」 のように先頭に「:」を付ければ大丈夫 と。 ぬわにぃ~~~~!!(昭和風) という…

列挙体の要素列挙時に「:」による改行は使えない

列挙体の要素の列挙に「:」による改行は使えない もう題名以外に書くことがない。 列挙体の要素列挙時の改行 普通は、 こんなふうに、列挙体の要素の列挙をするときは、改行を用いる。 ただ、要素数が多いと異様にタテ長になってしまうのが南天のど飴難点。 …

UndoRecordオブジェクトというものがある(Word)

UndoRecordオブジェクトというものがある 前回の akashi-keirin.hatenablog.com に、id:imihito さんからコメントをいただいた。 曰く、 また、Undoの履歴は、以下のようにするとひとまとめに出来たはずです ```vb Application.UndoRecord.StartCustomRecord…

飛び地状態のセル範囲にも名前を付けることができる(Excel)

飛び地状態のセル範囲にも名前を付けることができる Excel使いこなしマンには常識だったのかも知れないが、便利だなと思ったので記しておく。 飛び地状態のセル範囲に名前を付けてみる まず、 こんな風に、投げやりに文字列を入れておく。 別に入れなくても…

Object型変数を積極的に使う

Object型変数を積極的に使う 今まで、Object型の変数を積極的に使うことはなかった。 VBAで作成したツール類も、内輪で使うものばかりなので、CreateObjectを自分から使うことはまずなかった。参照設定してNewばっかりだった。 今回、Object型変数を使ったら…

RangeオブジェクトのNameプロパティのち~んw現象(Excel)

RangeオブジェクトのNameプロパティに関するち~んw珍現象 とにかくご覧いただきたい。 ち~んw珍現象 A1セルに「ち~んw」と入力 まず、このようにA1セルに「ち~んw」と入力しておく。 イミディエイト・ウインドウで名前を定義 イミディエイト・ウイン…

全角ダブルクォーテーションの取り扱いはめんどくさい

全角のダブルクォーテーション 全角のダブルクォーテーションを文字列として扱うのに苦労したので、覚書的に記しておく。 普通に文字列として書いてみる 次のように書いてみる。 str = "“" この状態で、[Enter]をふわっと押してみる。すると、 おわかりだろ…

SentencesコレクションとCharactersコレクション(Word)

SentencesコレクションとCharactersコレクション SentencesコレクションとCharactersコレクションって、ちょっと変わっているよな、というだけの話。 Sentencesコレクションの要素はSentenceオブジェクトに非ず たとえば、コード・ウインドウ上で、 Dim targ…

インターフェイスに汚染されたWorksheetオブジェクトの末路

インターフェイスに汚染されたWorksheetオブジェクトの末路 前回 akashi-keirin.hatenablog.com インターフェイスを実装したせいでおかしくなってしまったWorksheetオブジェクトから、インターフェイスを取り外したらどうなるのか。 一枚の画像に語らせたい…

シートモジュールにインターフェイスを実装するのはやめた方がいい

シートモジュールへのインターフェイスの実装はやめた方がいいかも知れない 以前、 akashi-keirin.hatenablog.com で、シートモジュールにもインターフェイスを実装することができる、ということを示した。 んで、そのときに使ったブックを今日久しぶりに開…

ThisWorkbookとは何者なのか

ThisWorkbookとは何者なのか 案外、初歩的なことがわかっていない、ということを痛感したので、後の戒めのためにも残しておくことにした。 「ThisWorkbook」を使うことは非常に多い。VBAの場合、コードが書かれてあるブックが他のブックを操作する場面という…

「フォームコントロールのボタンオブジェクトのEnabledプロパティって、意味ないんじゃね?」問題

「フォームコントロールのボタンオブジェクトのEnabledプロパティって、意味ないんじゃね?」問題 前回 akashi-keirin.hatenablog.com の続き。 ボタンのEnabledプロパティをFalseにしてみる イミディエイト・ウインドウに activesheet.buttons(1).enabled =…

クラスの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…