2018-03-01から1ヶ月間の記事一覧
配列を引数にするときの注意事項 配列引数はByRefでなければなりません SubとかFunctionの引数に配列を使用しようとしたとき、「ByVal」キーワードを付けると、 こんなふうにコンパイル・エラーになる。 従って、引数を配列にしたときには必然的に参照渡しに…
文字列を比較演算子で比較する 文字列を比較演算子で比較した結果 何の気なしに、イミディエイトに次のように打ち込んで[Enter]してみた。 ?"ち~んw" < "た~んw" すると、 このように、Falseが返った。 んで、 ?"ち~んw" < "つ~んw" と入力して[Ente…
Not演算子は何をしているのか Boolean型の式の判定 もともと、 If isHoge = True Then fooBar みたいな書き方をする方だった。 If isHoge Then fooBar みたいな書き方が、何か大切なことを省略しているような気がしてイヤだったのだ。 ところが、あるときtho…
擬似continue 「VBAのイマイチなところ選手権」でもやったら、かなり上位に食い込むだろうと思うのが、 Forループでcontinueが使えない ことだと思う。 breakに相当する命令があるだけに、なおのこと歯痒いことだろう。 テスト用コード リスト1 標準モジュ…
SUM関数のナゾ akashi-keirin.hatenablog.com に、id:mmYYmmdd さん(勝手に脳内で「ヤマダさん」と呼んでいるw)からコメントをいただいた。曰く、 =SUM(1/COUNTIF(範囲,範囲)) だと求める値にならないけど、中身の「1/COUNTIF(範囲,範囲)」をF9で確定して…
値の重複の有無をチェックする(マクロ無し縛り) 久しぶりにマクロ無し縛りでExcelのシートを作ることになり、半分忘れかけていたことがあったので、備忘録的に記しておく。 1億2000万余名マイナス1億2000万名の非常に数少ないこのブログの読者の方ならお…
コメントの表示・非表示を切り替える コメントの表示・非表示を切り替えるマクロ 今まであまりコメントをVBAで操るということをしたことがなかったのだが、仕事でマクロ無し縛りで結構ややこしい数式を組み込んだワークシートを作る必要があり、 書いた自分…
セル範囲の伸び縮みに追随して名前を定義するマクロの改良 改良ポイント 前回 akashi-keirin.hatenablog.com のリスト1には問題があった。すなわち、 対象のセル範囲から値を全消去したら、名前の定義されたセル範囲が元のまま残る 対象のセル範囲(を含む…
定義された名前を消す そういえば、定義された名前をVBAから消すのって、どうしたらいいんだろう? そう思ってちょっと調べてみた。 WorkbookオブジェクトのNamesプロパティ コチラによると 指定されたブックのすべての名前 (すべてのワークシートの名前を含…
セル範囲の伸び縮みに追随して名前を定義する セル範囲に名前を定義しておくと、ワークシート関数の引数にするのにも、VBAでRangeオブジェクトを参照する際にも便利なことがある。 ただ、名前を付けて管理したいセル範囲に伸び縮みがあるような場合に、その…
配列の各要素にFor Each ~ Nextでアクセスする 配列の要素にはFor Each ~ Nextでアクセスできる akashi-keirin.hatenablog.com コチラに jinoji さんという方からいただいたコメント。 配列からの取り出しを For Each e In TargetArray とやれば2次元配列…
要素数 1 の配列 akashi-keirin.hatenablog.com のコメント欄で、VBA四天王のうちの二天王から、次のようなことを教えていただいた。すなわち、 配列の次元数の上限は60 各次元に0と1の二つの添え字を持たせるとして、最小のByte型配列を利用しても、2の次元…
フォルダ選択ダイアログを表示させるFunctionを改良する FileDialog.InitialFileNameプロパティ akashi-keirin.hatenablog.com このときに作成したFunctionをちょっと改良する。 このFunctionを使ってフォルダ選択ダイアログを表示させたとき、いつも不便な…
Iteratorクラスを作ってみた デザインパターンをまじめに勉強したくなったので、遊び半分でコーディング。 Iteratorクラス オブジェクト名は「Iterator」です。 リスト1ー1 クラスモジュール 宣言セクション Option Explicit Private Const ERROR_NOT_INITIAL…
配列の次元数を取得する 何気なく配列をぐりぐりいじくっていたときに、ちょっとした間違いで こんなエラーが出た。まあ、よくあるエラーなんだが、このときは要素数を超えたのではなくて、存在しない次元を指定していたのだった。 ということは、LBoundとか…
Scripting.Dictionaryの要素をCollection化するFunction Scripting.DictionaryクラスのItemsメソッド 何気なくScripting.Dictionaryクラスのインスタンスをぶち込んだ変数の後に「.」(ドット)を打ち込んだら、 Intellisenseでこんなのが出た。 よく見たら…
配列の要素をコレクション化するFunction 配列の要素をコレクションに格納する ちょっと思いつきで作ってみた。 リスト1 標準モジュール Public Function convertArrayToCollection( _ ByRef targetArray As Variant) As Collection If Not IsArray(targetA…
ユーザー設定のドキュメントプロパティを操作するFunction akashi-keirin.hatenablog.com このときに、処理用パラメータの保存場所としてユーザー設定のドキュメントプロパティを使ったが、もっと気軽に使えるようにFunction化しておいた。 追加用Function …
部屋割りマクロのリファクタリング akashi-keirin.hatenablog.com このときに作成した部屋割りマクロのコードを見直して修正した。 問題点その1 isFull_変数が無意味 Roomクラスの内部に、インスタンスが定員一杯であることを表すisFull_というPrivate変数…
「作業グループ」状態にする 複数のシートにまとめて変更を加えたいときには「作業グループ」状態にする。 しかし、VBAからExcelを操作するときに、あまり「作業グループ」状態を使うことがなかった。 そういえば、どうやるんだろう? で、確かめてみた。 マ…
真の最終行を取得するFunctionの修正 前回の akashi-keirin.hatenablog.com にさっそくツッコミがw @excelspeedupさん曰く、 currentregion使うと、完全な空白行が入っているとき誤動作しませんか? と。 ははは。確かにおっしゃるとおり。 場合分けミスで…
真の最終行番号を求めるFunction Twitterで、 オートフィルターで非表示になっている行があると、最終行番号の取得に失敗して困る みたいなツイを見た。 なるほど、データの入っている最終行を非表示にして、[Ctrl]+[↑]で確かめると、確かに 表示されている…
省略可能なオブジェクト型の引数のデフォルト値 省略可能な引数 プロシージャに省略可能な引数を設定するときには、 Public Sub hogeHoge(Optional ByVal foo As String = "ち~んw") というふうに書く。 引数名の指定の最初に「Optionalキーワード」を付け…
オートフィルターの状態を取得する 元データが置いてあるワークシートがオートフィルターで絞り込まれているのに、それに気づかずにマクロを実行してわけのわからない結果が出て(゚Д゚)ポカーンとなったことはないだろうか。 わしはある!!!!!!!! そんなわけで、オ…