[VBA]Collectionから指定した要素を削除する関数
VBAのCollectionのRemove関数は、インデックス指定による削除しか対応していなかったため、値指定で削除できる関数を作成しました。なお、VBAは値型とオブジェクト型で等価演算子が異なるため、作成した関数には3つのバリエ ...
[VBA]VBA単独でFor Eachに対応した自作クラスを作成する方法(64bit Excel対応)
今回はVBA単独でFor Eachに対応した自作クラスを作成する方法を説明します。この手の説明では、よくCollectionかDictionaryの_NewEnum()を呼び出す手法を紹介しているサイトがありますが、本記事では ...
[VBA]AvastがVBAから呼び出したCopyMemory(WinAPI)を監視しまくる件
先日、とあるExcel VBAの速度が、期待したより遅い事象が発生しました。どこで遅くなっているか調査した結果、原因はWindows APIのCopyMemory(RtlMoveMemory)でした。VBAの標準機能ではポイン ...
[VBA]32ビット/64ビットOfficeに対応した、主要なWindowsAPIの宣言文を入手する方法
VBAからWindows APIを呼び出す場合、実行環境にインストールされたOfficeのバージョンに注意が必要です。特に、実行環境にOfficeの32ビットバージョンと64ビットバージョンが混在している場合、Declareから始 ...
[VBA]OneDriveで同期しているファイルまたはフォルダのURLをローカルパスに変換する関数
Excel VBAのThisWorkbook.FullNameやThisWorkbook.Pathなどで絶対パスを取得する際、ExcelファイルがOneDriveに保存している場合、これらのメソッドはパスではなくURLを返すことが ...
[VBA]二分検索(Binary serarch)の実装
VBAで二分検索を実装しました。O記法での平均計算量はO(log n)です。二分検索はソート済みのランダムアクセス可能なデータ構造にのみ適用可能なアルゴリズムで、今回は一次元配列内を二分検索する実装にしました。戻り値は発見した要素 ...
Excelのカスタムワークシート関数を使用する方法
ホームページで公開されているカスタムワークシート関数(以下、「カスタム関数」と記載)を、ワークシート上で使用する方法を説明します。カスタム関数とは、ワークシート関数であるSUM関数やAVERAGE関数のような関数を、ユーザーが ...
[VBA]クイックソート(Quick sort)の実装
VBAでクイックソートを実装しました。O記法での平均計算量はO(n log n)です。データの並び順に規則性が無ければ、まず期待通りの性能を発揮してくれるソートアルゴリズムです。アルゴリズムの説明はWikipediaより引用させて ...
[VBA]コムソート(Comb sort)の実装
VBAでコムソートを実装しました。O記法での計算量はO(n log n)です。データ量が1000件以下か、クイックソートが不得意なデータの並び順が発生する場合にご使用ください。アルゴリズムの説明はWikipediaより引用させて頂 ...