VBA一般

ファイル名をチェックするFunction

不正なファイル名を検出するFunction 作ってみた。 コード コードは次の通り。 リスト1 標準モジュール Public Function hasProhibitedCharacter( _ ByVal fileName As String) As Boolean '……(1)' hasProhibitedCharacter = True '……(2)' Dim ar As Varian…

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

シートモジュールにインターフェイスを実装する 単なる実験。 インターフェイスを作成する クラスモジュールを挿入して、次のコードを書く。 オブジェクト名は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を設置する(Excel)

ワークシートにPropertyを新設する Propertyプロシージャを使う Propertyプロシージャというと、クラスモジュールで使うという印象だが(私だけ?)、標準モジュールだろうが、フォームモジュールだろうが、シートモジュールだろうが、何ならThisWorkbookモ…

ExcelVBAでWordドキュメントを軽量PDF化する

ExcelでWordドキュメントを軽量PDF化する ExcelでWordドキュメントのファイル名の一覧表を作って、必要なものだけPDF化する、というのがお題。 ExportAsFixedFormatメソッドを使うやつは既に作成済みなので、PDF化部分を差し替えるのが目標。 ドキュメントを…

ワークシートの軽量PDF化(Excel)

アクティブシートのPDF化 akashi-keirin.hatenablog.com このときにも書いたように、アクティブシートをPDF化するときにはWorksheet.ExportAsFixedFormatメソッドを使う。 ただ、この場合、やたらファイルサイズがデカくなってしまうのが悩みのタネだった。…

メソッド呼び出し時にモジュール名の記述を強制する

画期的なアイディア(嘘) akashi-keirin.hatenablog.com このときに、 モジュール名を指定しないと使えない、とかだったら便利だと思ったんだけどなあ。 とか書いていたんだが、画期的な解決法が思い浮かんだので記しておく。 同一メソッドを持つダミーモジ…

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

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

Range.BorderAroundメソッド[Excel]~車輪の再発明

車輪の再発明 Range.BorderAroundメソッド 前回の akashi-keirin.hatenablog.com に、 ぴぼったー さんからコメントをいただいた。曰く、 つ borderaroundメソッド なんと、外枠線を引くメソッドがあったのだった。 またしても車輪の再発明をしてしまったの…

セル範囲の外枠に罫線を引く[Excel]

セル範囲の外枠罫線 VBAでセルの罫線の設定なんてしたことがなかったので知らなかったが、セル範囲の外枠だけに罫線を設定するのは非常にメンドクサイのだった。 セルの罫線はRangeオブジェクト配下のBordersコレクションで管理されている。 で、罫線の位置…

ナゾの書式設定文字列(Range.NumberFormatLocalプロパティ)

ナゾの書式設定文字列「;;;」 前回の akashi-keirin.hatenablog.com こちらに、 ぴぼったー さんという方からコメントをいただいた。曰く、 本日のサンプルのパターン、 (要望)列方向に連続する場合に表記を省略する (実装)セルの結合を行う (Excel屋の…

同じ値の連続するセルを結合する[Excel](Range.Mergeメソッド)

同じ値の連続するセルを結合する Excelは、表計算ソフトとしてよりも、方眼紙として使われているケースが多いと思う。 そこで、大活躍するのが(w)セルの結合機能だと思う。 多くのExcel使いは、データを蓄積するためのシートで見栄えをよくするためにセル…

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

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

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

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

部屋割りマクロ(Excel)(2)

部屋割りマクロ クラスを使ってみる 部屋を表すクラスを作って、部屋の数だけインスタンスを生成し、部屋が人間を取り合うようなイメージでコーディングしてみた。 Roomクラス クラスモジュールを挿入し、オブジェクト名は「Room」とした。 リスト1 クラス…

素人、Collectionクラスに入門す

Collectionクラスの使い方の勉強 人のコードを解読する (私が勝手に認定した)VBA四天王の1人(あと3人って誰だよw)thom (id:t-hom) さんが コチラの記事でお書きになっているコード を徹底解剖(笑)する。 参考コード 参考リスト1 Function GetRooms…

部屋割りマクロ(Excel)のリファクタリング(3)

部屋割りマクロのリファクタリング 傍流の処理を外に出す 前回の akashi-keirin.hatenablog.com のリスト2では、大まかに言って 引数のチェック 定員表の配列化 振り番処理 の3つの処理を行っていた。 メインの処理は、当然 3. の振り番処理。あとの2つは…

部屋割りマクロ(Excel)のリファクタリング(2)

部屋割りマクロのリファクタリング 画像ExcelIcon 返り値を改善する 前回の akashi-keirin.hatenablog.com この状態では、処理が無事に終わるとTrue、んで、うまく行かなかった場合は 理由の如何にかかわらずFalseが返る という 超不親切設計 だった。 今回…

部屋割りマクロ(Excel)のリファクタリング(1)

部屋割りマクロのリファクタリング Ifブロック内のDo~Loop ある程度コードが組み上がってから、 あ、この場合分けを見落としていたよ! ということに気づいて、慌ててコードを付け足したりしたときに、マヌケなコードを書いてしまうことがよくある(よね?…

配列関係の覚書(3)

配列関係の覚書 表を一旦配列にぶち込む まことに今さらながらで恐縮だが、 表のデータを利用するなら先に配列にぶち込むと激速 ということを知った。 っていうか、いろんなところで目にはしていたんだけれども、重要性を認識していなかった、ないしは端的に…

フォルダ選択ダイアログを表示させるFunction

フォルダを選択させてフォルダパスを取得するFunction ファイルをリネームするマクロを作るにあたり、保存先をその都度選べるようにした方が汎用性が高いと思ったので、Functionにしてみようと思った。 すでに akashi-keirin.hatenablog.com このときにクラ…

WordVBAで処理に使うデータを外部化する

指定した文字列のフォントを狙い撃ちで変えるマクロの改良 データを外部ファイル化する たとえば、明朝体で書かれた文書のうち、特定の語句だけを狙い撃ちでゴシック体にしたい、というときには、 ゴシック体に変えたい語句(X) と、 Xを含んでいるけれどゴ…

「"」(ダブルクォーテーション)のエスケープ

「"」(ダブルクォーテーション)のエスケープ 恥ずかしい告白 まことに今さらながら、実は、 「"」(ダブルクォーテーション)のエスケープについて、ちゃんと理解していなかったのである! では、どうしていたのかというと、 そのときどきでテキトーに書い…

モジュール名と同名のプロシージャ

「モジュール」とは何なのか? 「Module1」プロシージャ問題 つらつらとTwitterを眺めていると、フォローしている方が モジュール名とプロシージャ名を同じにしてCallで呼ぼうとするとエラーが出ます。 (中略) 「モジュールではなく、変数またはプロシージャ…

WshScriptのSendKeysメソッドを使う

ち~んw珍現象は続く WshScriptのSendKeysメソッド 前回の akashi-keirin.hatenablog.com コチラの記事にid:imihito さんからコメントをいただいた。 そこでご紹介いただいたのは、コチラの方法。このうち、「WshShellのSendKeysをラップする」というやつを…

Application.GetPhoneticが壊れた???

GetPhonetic関数がおかしい??? GetPhonetic関数の異状 Application.GetPhonetic関数は、2回目以降引数を省略すると、まだ返していないふりがな文字列を返すはず。 しかしながら、何か様子がおかしいのである。 たとえば、次のコード。 リスト1 標準モジ…