2018-03-01から1ヶ月間の記事一覧

配列を引数にするときの注意

配列を引数にするときの注意事項 配列引数はByRefでなければなりません SubとかFunctionの引数に配列を使用しようとしたとき、「ByVal」キーワードを付けると、 こんなふうにコンパイル・エラーになる。 従って、引数を配列にしたときには必然的に参照渡しに…

文字列を比較演算子で比較するとどうなるか

文字列を比較演算子で比較する 文字列を比較演算子で比較した結果 何の気なしに、イミディエイトに次のように打ち込んで[Enter]してみた。 ?"ち~んw" < "た~んw" すると、 このように、Falseが返った。 んで、 ?"ち~んw" < "つ~んw" と入力して[Ente…

Not演算子は何をしているのか

Not演算子は何をしているのか Boolean型の式の判定 もともと、 If isHoge = True Then fooBar みたいな書き方をする方だった。 If isHoge Then fooBar みたいな書き方が、何か大切なことを省略しているような気がしてイヤだったのだ。 ところが、あるときtho…

VBAで擬似continueを実現する(失敗)

擬似continue 「VBAのイマイチなところ選手権」でもやったら、かなり上位に食い込むだろうと思うのが、 Forループでcontinueが使えない ことだと思う。 breakに相当する命令があるだけに、なおのこと歯痒いことだろう。 テスト用コード リスト1 標準モジュ…

SUM関数の謎[Excel]

SUM関数のナゾ akashi-keirin.hatenablog.com に、id:mmYYmmdd さん(勝手に脳内で「ヤマダさん」と呼んでいるw)からコメントをいただいた。曰く、 =SUM(1/COUNTIF(範囲,範囲)) だと求める値にならないけど、中身の「1/COUNTIF(範囲,範囲)」をF9で確定して…

値の重複を調べる[Excel]

値の重複の有無をチェックする(マクロ無し縛り) 久しぶりにマクロ無し縛りでExcelのシートを作ることになり、半分忘れかけていたことがあったので、備忘録的に記しておく。 1億2000万余名マイナス1億2000万名の非常に数少ないこのブログの読者の方ならお…

コメントの表示・非表示を切り替える[Excel]

コメントの表示・非表示を切り替える コメントの表示・非表示を切り替えるマクロ 今まであまりコメントをVBAで操るということをしたことがなかったのだが、仕事でマクロ無し縛りで結構ややこしい数式を組み込んだワークシートを作る必要があり、 書いた自分…

セル範囲の伸び縮みに追随して名前を定義する[Excel](2)

セル範囲の伸び縮みに追随して名前を定義するマクロの改良 改良ポイント 前回 akashi-keirin.hatenablog.com のリスト1には問題があった。すなわち、 対象のセル範囲から値を全消去したら、名前の定義されたセル範囲が元のまま残る 対象のセル範囲(を含む…

指定した名前のセル範囲が参照切れだったら削除する(Excel)

定義された名前を消す そういえば、定義された名前をVBAから消すのって、どうしたらいいんだろう? そう思ってちょっと調べてみた。 WorkbookオブジェクトのNamesプロパティ コチラによると 指定されたブックのすべての名前 (すべてのワークシートの名前を含…

セル範囲の伸び縮みに追随して名前を定義する[Excel]

セル範囲の伸び縮みに追随して名前を定義する セル範囲に名前を定義しておくと、ワークシート関数の引数にするのにも、VBAでRangeオブジェクトを参照する際にも便利なことがある。 ただ、名前を付けて管理したいセル範囲に伸び縮みがあるような場合に、その…

配列の各要素にはFor Each ~ Nextでアクセスできる

配列の各要素にFor Each ~ Nextでアクセスする 配列の要素にはFor Each ~ Nextでアクセスできる akashi-keirin.hatenablog.com コチラに jinoji さんという方からいただいたコメント。 配列からの取り出しを For Each e In TargetArray とやれば2次元配列…

要素数「1」の配列(アホネタ)

要素数 1 の配列 akashi-keirin.hatenablog.com のコメント欄で、VBA四天王のうちの二天王から、次のようなことを教えていただいた。すなわち、 配列の次元数の上限は60 各次元に0と1の二つの添え字を持たせるとして、最小のByte型配列を利用しても、2の次元…

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

フォルダ選択ダイアログを表示させるFunctionを改良する FileDialog.InitialFileNameプロパティ akashi-keirin.hatenablog.com このときに作成したFunctionをちょっと改良する。 このFunctionを使ってフォルダ選択ダイアログを表示させたとき、いつも不便な…

Iteratorクラスを作ってみた

Iteratorクラスを作ってみた デザインパターンをまじめに勉強したくなったので、遊び半分でコーディング。 Iteratorクラス オブジェクト名は「Iterator」です。 リスト1ー1 クラスモジュール 宣言セクション Option Explicit Private Const ERROR_NOT_INITIAL…

配列の次元数を取得するFunction

配列の次元数を取得する 何気なく配列をぐりぐりいじくっていたときに、ちょっとした間違いで こんなエラーが出た。まあ、よくあるエラーなんだが、このときは要素数を超えたのではなくて、存在しない次元を指定していたのだった。 ということは、LBoundとか…

Scripting.Dictionaryの要素をCollection化するFunction

Scripting.Dictionaryの要素をCollection化するFunction Scripting.DictionaryクラスのItemsメソッド 何気なくScripting.Dictionaryクラスのインスタンスをぶち込んだ変数の後に「.」(ドット)を打ち込んだら、 Intellisenseでこんなのが出た。 よく見たら…

配列の要素をCollection化するFunction

配列の要素をコレクション化するFunction 配列の要素をコレクションに格納する ちょっと思いつきで作ってみた。 リスト1 標準モジュール Public Function convertArrayToCollection( _ ByRef targetArray As Variant) As Collection If Not IsArray(targetA…

ユーザー設定のドキュメントプロパティを気軽に使う

ユーザー設定のドキュメントプロパティを操作するFunction akashi-keirin.hatenablog.com このときに、処理用パラメータの保存場所としてユーザー設定のドキュメントプロパティを使ったが、もっと気軽に使えるようにFunction化しておいた。 追加用Function …

部屋割りマクロ(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

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