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

部屋割りマクロのリファクタリング akashi-keirin.hatenablog.com このときに作成した部屋割りマクロのコードを見直して修正した。 問題点その1 isFull_変数が無意味 Roomクラスの内部に、インスタンスが定員一杯であることを表すisFull_というPrivate変数…

「作業グループ」状態をVBAで作るには[Excel]

「作業グループ」状態にする 複数のシートにまとめて変更を加えたいときには「作業グループ」状態にする。 しかし、VBAからExcelを操作するときに、あまり「作業グループ」状態を使うことがなかった。 そういえば、どうやるんだろう? で、確かめてみた。 マ…

真の最終行番号を取得するFunction(2)

真の最終行を取得するFunctionの修正 前回の akashi-keirin.hatenablog.com にさっそくツッコミがw @excelspeedupさん曰く、 currentregion使うと、完全な空白行が入っているとき誤動作しませんか? と。 ははは。確かにおっしゃるとおり。 場合分けミスで…

真の最終行番号を取得するFunction

真の最終行番号を求めるFunction Twitterで、 オートフィルターで非表示になっている行があると、最終行番号の取得に失敗して困る みたいなツイを見た。 なるほど、データの入っている最終行を非表示にして、[Ctrl]+[↑]で確かめると、確かに 表示されている…

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

省略可能なオブジェクト型の引数のデフォルト値 省略可能な引数 プロシージャに省略可能な引数を設定するときには、 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…

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

変数の値を保存する WorkbookオブジェクトのCustomDocumentPropertiesコレクションを使う 前回 akashi-keirin.hatenablog.com の続き。 変数の値を保存するには、 シートに書き込む テキストファイルに書き込む レジストリに書き込む ぐらいしか方法がないと…

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

次回から表示しない ユーザーフォームに「次回から表示しない」チェックボックスを搭載する こんなユーザーフォームを作って、実験してみた。 VBAでは、クラスにstatic変数を持たせることができない(んですよね?)ので、Public変数で代用することにした。 …

部屋割りマクロ(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 ある程度コードが組み上がってから、 あ、この場合分けを見落としていたよ! ということに気づいて、慌ててコードを付け足したりしたときに、マヌケなコードを書いてしまうことがよくある(よね?…

部屋割りマクロ(Excel)

部屋割りをサクッと済ませるマクロ 部屋割りマクロ 部屋の定員数に応じて、部屋割りをサクッとやってくれるマクロを作ってみた。 同じ定員数の部屋ばっかりだと、単純にmod演算子を使ったループで一発なんだけれど、定員数に凸凹があるときに、定員数順に前…

表を配列として保持するクラス

表を配列化して保持するクラス 前回記事へのコメント Edgeがバグっているせいなのか、なぜかブログにコメントが返せない状態です。 akashi-keirin.hatenablog.com コチラに、id:imihito さん、thom (id:t-hom) さんのお二方からコメントをいただいているにも…

配列関係の覚書(3)

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

「プロパティ」とは何なのか

Rangeオブジェクトの4大(?)プロパティ Twitterで見かけたある考え方 Twitterで こんなツイを読んだ。自分なりに思ったことを書く。 一応引用しておくと Rangeオブジェクトのプロパティ、CurrentRegion、Offfset、Resize、End は必須アイテム。このプロパ…

STARTUPフォルダの中に置くのはショートカットでいい[Word]

STARTUPフォルダに置いておくのはショートカットでいい STARTUPフォルダに置くマクロ入りテンプレート しょっちゅう使うマクロをアドインにする、というワザを割と最近覚えたんだけれど、 akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com Wordの…

ファイル名を変えて保存する[Word]

Wordドキュメントの名前を変えて保存する SaveAs2メソッドとNameステートメントの処理をラップする イメージとしては、 「名前を付けて保存」でファイル名を変えて別フォルダに移す処理 元のファイルを別のフォルダに移す処理 をいっぺんにやってしまう、と…

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

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

Wordの表から文字列を取り出すFunction

Wordの表の文字列を取得するFunction Wordの表の文字列を取得する 「書類の電子化」と言いつつ、 単に紙をWordとかにしただけ という凶悪な職場はいまだに一定の数存在すると思う。 んで、いろんなところからWordドキュメントが集まってくるわけだが、そんな…

VBAでグラフをいじくる

VBAでグラフを操る Excelグラフのオブジェクトモデルを探る 次のような表からグラフを作成し、いろいろいじくり回してみた。 これが元のグラフ。それぞれの選手の連対時決まり手を元に積み上げ横棒グラフを作ってみた。 んで、次のコードでこのグラフを加工…

プロシージャを別プロシージャの引数にする?

プロシージャ名を引数にして別プロシージャに渡す??? Application.Runメソッド プロシージャの実行時間を計測するFunctionを作りたいなーと思って調べてみたら、 Application.Runメソッド というものを使えばよいと分かったので、やってみた。 GetTickCou…