VBA

【VBA】バブルソートとクイックソートの速度差を実測比較

前回の記事では、シート上でのセル操作が遅い理由を解説しました。同じ並び替え処理でも、シートに直接書き込みながら処理するのと、配列上で処理してから一括で書き戻すのとでは、処理時間に大きな差が出ます。前回は「なぜシート操作は遅いのか」という原理...
VBA

【VBA】処理が遅い本当の原因|シート操作が重くなる仕組み

今回から数回に分けて、Excel VBAの「ソート」「配列」「連想配列(Dictionary)」について書いていきます。きっかけは新卒時代の出来事です。他部署の方と雑談していたときに、「重くて困っているマクロがある」と相談を受けました。正式...
Power Query

【Power Query】キーの型がバラバラで結合できない時の対処法

困った場面Power Queryで2つのテーブルを、社員コードのような共通キーで結合(マージ)したときに、一部の行だけ相手側の情報が空欄になることがあります。キーの値を見比べても、片方は「123」、もう片方も「123」で、同じに見えます。そ...
VBA

【VBA】ScriptControlが64bit Officeで使えない時の代替コード

VBAでURLエンコードをする際、CreateObject("ScriptControl")(JScriptのencodeURIComponentを呼び出す方法)を使っているコードをよく見かけます。32bit版のOfficeではこれで動きま...
Power Query

【Power Query】フォルダ内データを自動取込みする設定

Power Queryでフォルダ内のデータを取り込む処理を、最初はCSVの中身をコード側でそのまま処理する作り方にしていました。動くには動きますが、元データを見返すたびにCSVを開き直す必要があり、CSV自体を更新する運用だと参照周りの管理...
VBA

VBAで個数を数える3つの方法【CountIf・入れ子ループ・Dictionary】

今の会社に転職してからVBAで業務を効率化する機会が増えました。もともとVBAはまったく分からない状態でしたが、実務で必要に迫られて少しずつ書けるようになりました。先日、同僚にVBAを教える機会があり、「各項目の個数を数える」という処理を題...
VBA

【VBA】2次元配列の行数が決まらないときの対処法まとめ

VBAで2次元配列を使っていると、「格納する件数が事前に分からない」という場面によくぶつかります。以前、ReDim Preserveで2次元配列の行が増やせない原因と対処で解説した通り、ReDim Preserveで変更できるのは2次元配列...
VBA

【VBA】Type配列で件数不明のデータをためる方法

前回の記事では、2次元配列でReDim Preserveを使うと行数を増やせない原因と対処法を解説しました。そのとき、行数が読めないデータをためる方法として3つを紹介すると予告しました。今回はそのうちの1つ、ユーザー定義型(Type)の1次...
VBA

【VBA】ReDim Preserveで2次元配列の行が増やせない原因と対処

前回の記事では、配列が空(未割当)かどうかを判定する方法を紹介しました。配列を安全に扱えるようになると、次は「配列にデータを足していく」処理を書きたくなります。1次元配列なら、ReDim Preserve で要素を増やせます。ところが、2次...
VBA

【VBA】配列が空か判定する方法とIsEmptyの落とし穴

VBAで配列が空かどうかを IsEmpty で判定すると、実行時エラー9「インデックスが有効範囲にありません」で止まることがあります。実務ツールの改修で実際に直したバグです。原因と、動的配列が空(未割当)かを安全に判定する方法をまとめます。...