VBA一般

名前、定数、列挙体(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 標準モジ…

○箇月後の○曜日――改良版

「○箇月後の○曜日」割り出しFunctionの改良 akashi-keirin.hatenablog.com VbDayOfWeek型の引数 Twitterのフォロワー氏、及びid:imihito さんが教えてくださった。 vbSundayとかvbMondayって、単なる組み込み定数だと思っていたけれど、正体はVbDayOfWeek列…

○箇月後の直近の○曜日は?

○箇月後の○曜日の日付を求める自作Function 「1箇月後の直近の木曜日を求める」という作業が発生した。別に、暦を見たらいいんだけれど、もし今後たくさんの日付について同じ作業をする必要が生じたらメンドウなので、ちょこちょこっと「1箇月後の直近の木…

素人がアドインの世界に首を突っ込んでみる

素人、アドインに手を出す アドインとは……? 「アドイン」って、よく聞く言葉だったけど、意味が分からんかったのでずっと放置していた。 何かの拍子に「マクロをアドインとしてうんたらかんたら」というのを読んで、ちょっと調べてみた。 そしたらアンタ、…

親ブックから子ブックを量産する

データを変えて親ブックから子ブックを量産するマクロ 子ブック生成部分を切り出す akashi-keirin.hatenablog.com の続き。 FileSystemObjectオブジェクトのCopyFileメソッドを使うと、子ブックの生成が簡単にできることが分かったので、いよいよ量産体制に…

親ブックから子ブックを生成する

子ブック生成マクロ 親ブックから子ブックを生成する方法 akashi-keirin.hatenablog.com 先日、コチラの記事をうpしたところ、twitterのフォロワーさんから、 FileCopyステートメントでよくね??? 的なリプをいただいたのだった。 私自身、 たかがブック…

ゼロ埋め番号文字列を作る関数を自作した

ゼロ埋め番号を作る関数 調子に乗って関数化 こいつら akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com をもとに、最大数に応じてゼロ埋め数字の文字列を返す関数を作ってみた。 仕様 書式 createNumberFilledByZero(最大数 , 対象数) 第1引数…