VBA覚書

Len関数の返り値

Len関数の返り値 Len関数に文字列ではなく数値を渡してしまい、意図しない値が返っていたために小ハマりしてしまったので、反省も込めて覚え書き的に記しておく。 Len関数に数値を渡すとどうなるか たとえば、次のようなコードの場合。 Dim hoge As Long hog…

Worksheet.PageSetup.FitToPagesTall/Wideの設定はリアルタイムで反映されない

[Worksheet].PageSetup.FitToPagesTall/Wideの設定はリアルタイムで反映されない 知ってました? 私はこのことに気づかなかったせいで、お盆の期間だというのにドハマりして残業してしまいました。 状況 次のようなシートがあるとする。 四隅のち~んwを一…

FileSystemObjectを用いてテキストファイルを読み込む

FileSystemObjectを用いてテキストファイルを読み込む 〈FileSystemObject使い宣言〉をしていた(いつ?!)にもかかわらず、 akashi-keirin.hatenablog.com このときは、テキストファイルの読み込みにFileSystemObjectを利用していなかった。 深く反省して…

ドラッグで文字列を選択したかのような操作(Word)

文字列をドラッグして選択する操作(Word) akashi-keirin.hatenablog.com このとき、 選択範囲を文字数単位で拡張するメソッドとか、ないものか。(←調べろ。) などと、テキトーなことをぶっこいていたが、 あった。 やはり、ものごとというものは、ちゃんと…

2次元配列の値をRangeオブジェクトに突っ込むときの配列はVariantでなくても良い(Excel)

2次元配列の値をRangeオブジェクトに突っ込むときの配列はVariantでなくても良い 初歩的過ぎますか? 2次元配列の値を一気にRangeオブジェクトに書き込む処理は、Variant型の変数を使う例が多かったので、全然気づいていませんでした。 実験 シートモジュ…

Switch関数はRangeオブジェクトを返すのか

Switch関数はRangeオブジェクトを返すか 前回 akashi-keirin.hatenablog.com 初めてその存在を知ったSwitch関数。 こいつは、たとえばRangeオブジェクトを返したりすることはできるのだろうか。 やってみた。 準備 Sheet1オブジェクトに次のようなPropertyを…

Switch関数というものがある

Switch関数というものがある 知ってました? 私は全然知らなかった。 何気なく『Programming Excel with VBA and .NET』という本を読んでいたら、59ページに、 Sub GetResponse() ' Declare variable as an enumerated value' Dim res As VbMsgBoxResult ' G…

Staticプロシージャというものがある

Staticプロシージャというものがある 知ってました? 私は全然知らなかった。 何気なく『Programming Excel with VBA and .NET』という本を読んでいたら、58ページに、 Private Static Sub Proc3() ' In Static Procedures, all local variables are Static.…

アクセス修飾子「Friend」とは?

アクセス修飾子「Friend」とは? 勘違いから、マヌケな記事を書いてしまった。 訂正記事を書くのがめんどくさいので(←コラ!)、バッサリ削除して書き直す。 アクセス修飾子「Friend」は、入門書の類にはまず出てこない。 名前が「Friend」なのに、友達がい…

テスト用メソッドもPrivete指定にする

テスト用メソッドもPrivete指定にする Privete指定でもVBE上で実行できる これは、考えてみたら当り前なんだけれど、全然気づいていなかった。 イミディエイト・ウインドウ上での実行 次のようなメソッド群を用意する。 リスト1 標準モジュール Private Sub…

コマンドボタンから呼び出すメソッドはPrivete指定で良い

Priveteメソッドでもコマンドボタンから呼び出すことができる 常識ですか? 私は存じ上げませんでしたので、今まで何でもかんでもPublic指定にしていた。 そのせいで、「マクロの登録」ウインドウなんかを開くと、 こんなひどい有様にw Privete指定のメソッ…

Rahmenクラスの修正

Rahmenクラスの修正 前回 akashi-keirin.hatenablog.com のRahmenクラスを修正した。 生まれ変わったRahmenクラス クラスモジュール Rahmen Option Explicit '///Attribute VB_PredeclaredId = True///' Public Enum NoodleSolidity nsYugeTooshi nsKonaOtos…

クラス変数っぽいものを実現してみる

クラス変数っぽいものを実現してみる Attribute VB_PredeclaredIdをTrueにしたクラスモジュールでちょっと実験をしてみた。 実験用クラス 実験用に、Rahmenクラスを作成。 infoment.hatenablog.com こちらの記事にインスパイヤされたでござる。 クラスモジュ…

自身のインスタンスを返すクラス

自分自身のインスタンスを返すクラス Attribute VB_PredeclaredId = False のとき クラスモジュールをデフォルトで使うときは、 Attribute VB_PredeclaredId = False である。 このとき、クラスのメソッドやプロパティは、インスタンス化した後でないと利用…

表の位置を右にずらす(Word)

表の横位置を変更する ドキュメント内の表の横位置を変える方法が判明したので、メモ代わりに記しておく。 RowsオブジェクトのLeftIndentプロパティを使う 表の位置なので、Tableオブジェクトのプロパティを触ればよいと思っていたが、違った。 左端にある表…

拡張子のないファイル

拡張子のないファイル 前回の akashi-keirin.hatenablog.com に、ことりちゅん (id:Kotori-ChunChun) 氏からコメントをいただいた。 曰く、 実用上困ることは滅多にないですが、拡張子のないファイルも存在するので、自作された方は要注意です。 と。 なるほ…

ファイルの拡張子を取得する

ファイルの拡張子を取得する 車輪の再発明 ファイル名の拡張子を取得したくて、次のようなコードを書いた。 ちなみに、マクロを書いたブックのあるフォルダ内のTargetFilesフォルダ内に、次のようにファイルがあるものとする。 リスト1 標準モジュール Publ…

Filter関数というものがある

Filter関数というものがある こないだ、オブジェクト・ブラウザをぐりぐりやっていたら、「クラス」欄にStringsというものを発見。 ただし、オブジェクト・ブラウザ上では、「クラス」としてではなく、「モジュール」として記載されている。 Stringsを選ぶと…

Enumの研究(1)

Enumの研究(1) コードの可読性を上げる一つの方法として、 Enumを適切に使う というものがある。 ずいぶん前からEnum自体は使っていたが、最近やっと適切な使い方が定まってきたように思うので、Enumについていろいろ実験したことを書き留めておく。 Enumの…

「Any型」の追放に成功した

Any型の追放に成功した akashi-keirin.hatenablog.com これの続報。 この記事には、id:imihito さんからコメントをいただいていた。 曰く、 記事の `Call MoveMemory(lpMemory, VarPtr(strText), lngSize)` に関しては`VatPtr`を`StrPtr`にするとどうなるで…

別ブックのThisWorkbookモジュールのメソッドを呼ぶ(Excel)

別ブックのThisWorkbookモジュールのメソッドを呼ぶ 前回 akashi-keirin.hatenablog.com 別ブックのシートモジュールのメソッドを呼ぶ実験をした。 では、別ブックのThisWorkbookモジュールのメソッドはどうなのだろうか。 コードの追加 まず、ち~んw1号.…

別ブックのシートモジュールのメソッドを呼ぶ(Excel)

別ブックのシートモジュールに書いたメソッドを呼ぶ シート独自の処理など、シートモジュールに書いておくのは、「コードの整理」という観点からは非常に便利。 では、シートモジュールに書いた処理を、他のブック(プロジェクト)から呼び出すことはできる…

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」と入力しておく。 イミディエイト・ウインドウで名前を定義 イミディエイト・ウイン…