VBA
デスクトップのフォルダパスを取得する方法を解説します。いくつか方法がありますが、環境変数を取得するEnviron関数を使用するのが簡単です。他にWScript.Shellオブジェクトを使用する方法もあります。
せっかくの同形式グラフなのに、軸上限・軸下限・目盛り幅が違うとグラフ間で比較ができませんので、これを自動設定するマクロを紹介します。120%上限のグラフを100%上限に一括変更するときにも活用できます。
全マクロブックで共有するような自作汎用関数(ライブラリ)を、ワンタッチでアクティブブックにコピーするマクロを紹介します。Scripting Runtimeの参照もついでに実行しているため、FSOやDictionaryも即使用可能です。
DictionaryやFSOを使用する際As FileSystemObject/Dictionaryとデータ型を明示するにはScripting Runtimeの設定が必要です。設定すれば選択肢入力が活用できるため、自分でコードを書く場合は必ず設定を行いましょう。
Scripting Runtimeの設定をVBAから行う場合はVBProject.References.AddFromGuidメソッドを利用します。Scripting Runtime以外のライブラリもIDを調べれば自動化できますので流用してみてください。
ブックに標準モジュールを挿入、ソースコードを書き替えるなど、マクロの作成や更新を自動化する際にに使用する基本コードを汎用関数としてまとめました。ご自由にお持ち帰りください。
CollectionとDictionaryの違いについて解説します。どちらも「複数のデータをまとめて持つ仕組み」で、KeyとItemをペアで格納することができますが、Dictionaryが完全上位互換と言ってよい性能を持っています。
Collectionを配列に変換する方法を解説します。標準機能にはないため、愚直に全要素を配列へ出力して変換します。CollectionはFor文で回すと非常に遅い性質があるため、配列への代入はForEach文で行ってください。
Collectionの中身をセルに出力する方法を解説します。For Each文を使って各要素を出力する方法と、一旦二次元配列に変換してから一括出力する方法があります。後者を汎用関数化しておくと便利です。
セルの行高を設定するにはRangeオブジェクトのRowHeightプロパティ、列幅にはRangeオブジェクトのColumnWidthプロパティを使用します。セルの値に合わせて自動調整を行う場合はAutoFitメソッドを使用します。
和風スパゲティ勉強会 第6回のテーマは「VBAの落とし穴大全」ということで、知らないとハマってしまうVBAの初見殺し30品を一挙に紹介します。マニアックなバグに対策するためにマニアックな仕様を覚えてしまいましょう。
知らずに落ちると抜け出せなくなるVBAの落とし穴です。 Killステートメントを実行したら関係のないファイルも削除された ファイル名を半角に変換した際、Killステートメントが暴発する 環境依存文字を用いたファイルの削除が安定しない あたりにお悩みの方は…
ブックを開いたまま移動したり、名前を変更する方法を解説します。これをストレートに実行する方法はありませんので、対象のブックを名前を付けて保存したあと元のブックを削除という手順で実行します。
ExcelVBAで使用できる変数の型(データ型)の一覧と、各変数を宣言・使用するサンプルコードを解説します。Long(整数)、Double(小数)、String(文字列)、Range(セル)、Worksheet(シート)など主要な型を覚えておきましょう。
配列が空であるかを判定する方法を解説します。空の配列には「要素代入前」「変数代入前」「動的配列ReDim前」「Split("")やArray()」「ParamArray省略時」の5パターンがあるため、それぞれ適した判定を用いてください。
動的配列が初期化されているか判定する方法を解説します。Uboundがエラーになる仕様を利用してOn Error Resume Nextを用いる方法と、ビット演算を用いた(Not Not 配列)を判定する方法の2つがあります。
Array()やParamArrayの省略時に「空の配列」が生成されます。この空の配列は要素数が0でFor/ForEachをノーエラースキップできるため、配列を受け取る関数と相性がよく、汎用関数の返り値に活用することができます。
第5回 和風スパゲティ勉強会「Collection&Dictionary」の配布資料と配信アーカイブを共有します。前回の配列(Array)に続いてExcelVBA配列トリオを一挙に解説しました。復習にお役立てください。
引数の数を任意にできるParamArrayキーワードを使用した際、その配列が空=引数自体が省略されたかを判定するにはIsMissing関数を使用します。また空の配列はUboundが-1なので、こちらで判定も可能です。
行・列の表示/非表示を切り替えるにはHiddenプロパティを使用します。Trueが非表示、Falseが再表示です。行/列全体に実行する必要があるため、Rows/Columns、EntireRow/Columnから実行してください。
第4回 和風スパゲティ勉強会「配列(Array)入門」の配布資料と配信アーカイブを共有します。配列をまだ使ったことがない方向けに配列の使いどころから基本コードまでを解説しました。復習にお役立てください。
複数のOR条件分岐を簡潔に書く方法を解説します。IF/ORステートメント、Select Case ステートメント、Functionプロシージャ、カンマ区切りテキスト&Instr関数、Dictionary(連想配列)を紹介しますのでお好みで使い分けて下さい。
複数のセル範囲をひとつのRangeに統合するにはUnionメソッドを使用します。Ctrlキーを使ったセルの複数選択に似ていますが、ちょうど矩形になる場合はセル範囲も1つにまとめてくれる便利な特長があります。
NumberFormatLocalとNumberFormatの違いを解説します。両者とも「セルの表示形式」を設定するプロパティですが、G/標準、\、[赤]など日本語で表された表示形式を設定可能な点が違います。
桁区切りカンマの「#,##0」などセルの表示形式を設定するにはRangeオブジェクトのNumberFormatLocalプロパティを使用します。セル.NumberFormatLocal=セル.NumberFormatLocalでコピーも可能です。
テーブル形式の表データに縞模様を付けるコードを紹介します。表の範囲を取得できる場合は表エリア.Rows、列のエリアを指定する場合はIntersectを利用して行ごとにRangeを取得し、偶数/奇数で判定して着色します。
結合セルの値を取得する方法を解説します。結合エリアから先頭セルの値を取得したい場合はCells(1).Valueを、結合内部セルから結合セルの値を取得したい場合はMergeArea.Cells(1).Valueをそれぞれ使用します。
表示されているシートだけをループするにはForEach文で取得したWorksheetのVisibleプロパティを調べてTrueにシートだけに処理を実行します。他の条件も判定する場合はIf文を重ねるかAnd演算子を使用します。
フローチャートなどに折れ線矢印コネクタをよく使いますが、なぜかこの矢印は2回曲がるものしかありません。これに対応するため、ガイド図形を始点と終点に配置した矢印コネクタを挿入するマクロを紹介します。
シートの表示状態を切り替えるにはWorksheetオブジェクトのVisibleプロパティを使用します。表示Ture/非表示FalseのほかにVeryHiddenという設定があり、ユーザーがExcel上で再表示できない設定にもできます。