和風スパゲティのレシピ

日本語でコーディングするExcelVBA

サンプルコード

半角英数はそのままに半角カナを全角カナに変換する

文字列中の半角カナを全角カナに変換する場合は、StrConv関数を使用します。しかし半角⇒全角を行う引数vbWideはすべての半角文字を変換してしまうため、半角英字や半角数字をそのままにする処理が必要です。

文字の種類(数字/アルファベット/カナ)を判定する

文字の種類(数字/アルファベット/カナ)を判定する方法を解説します。主にLike演算子を利用し、数字なら"#"、アルファベットなら"[A-Z]"または"[a-z]"、カナなら"[ァ-ヶ]"などの文字列と比較して判定します。

生年月日から年齢を計算する - DateDif関数

生年月日から年齢を計算する方法を解説します。シート関数のDATEDIF関数とは異なり、VBAのDateDiff関数では一発で求めることができませんので、Formulaプロパティ、Evaluateメソッド、自作関数で対応します。

数値の桁数を揃える(0埋めする) - Format関数

数値の0埋めにはFormat関数を利用します。ただし、変数に入れるときはString型、セルに出力する際は書式を「文字列」にするか値の先頭にシングルクォーテーション「'」を付けてから出力する必要があります。

数値の桁数を取得する/小数点第何位か調べる

数値が何桁か数える場合は、Len関数を使用します。ただしLen関数は「String型以外に使用すると使用するメモリ数を返す」という仕様があるため、CStr関数を使って一度文字列にしてから実行してください。

オブジェクトがActiveXコントロールか判定する

Excel2024からActiveXコントロールが使用できなくなるにあたり、指定の図形がActiveXコントロールか判定する方法と、ブック内のすべてのActiveXコントロールを取得する方法をそれぞれ解説します。

データの区切りごとに改ページを挿入する

小計行や商品種別の切り替わる行など、データの区切りごとに改ページを挿入する方法を解説します。PageBreakプロパティで既存の改ページを判定しながら、条件を満たす行ごとに同プロパティで改ページを設定します。

ダブルクリックでセルの値を切り替えるマクロ

ダブルクリックをするごとにON-OFFが切り替わる、リスト内を順送りするような機能をシート上に実装する方法を解説します。セルに設定したドロップダウンリストの値をループさせる方法もあわせて解説します。

環境依存文字をセルに出力する - ChrW関数

環境依存文字をコード上に書こうとすると「?」マークになってしまいます。このようにコード上(VBE)に表示できない環境依存文字をセルに出力するには、ChrW関数に対象の文字コードを渡して文字を取得します。

DictionaryのItemからKeyを取得する

DictionaryはKeyからItemを取得するオブジェクトですが、逆にItemからKeyを取得する方法を解説します。といってもそんなプロパティはありませんので、自作関数を作ってゴリ押しするよりほかありません。

Dictionaryを新規シートに出力して中身を確認する

Dictionaryは中身の確認が難しい欠点があります。ローカルウィンドウでKeyは見れますがItemは見ることができません。この対策として「Dictionaryを新規シートに出力する」マクロを用意するのがおすすめです。

文字列を含むか判定する - InStr関数/Like演算子

文字列内に特定の文字列があるかを判定する方法を解説します。InStr関数とLike演算子を使う2つの方法があり、単純な判定ならInStr関数を使うのが簡単で、複雑な判定を行う場合はLike演算子の方が機能が多く便利です。

ファイルの拡張子を取得する - GetExtensionName

ファイル名から拡張子を取り出す方法を解説します。FileSystemObjectのGetExtensionNameメソッドを利用する方法と、InstrRev関数+Right/Mid関数を使用する方法の2種類があります。

開いているファイルをコピーする - FSO.CopyFile

現在開いているブックをコピーするには、FileSystemObjectのCopyFileを使用し、「FSO.CopyFile コピー元ファイルパス, コピー先ファイルパス」を実行します。この処理はFileCopyステートメントでは実行できません。

Dictionaryを用いたデータ集計 - ItemにもDictionary版

Dictionaryの活用例として、データ集計マクロを作成してみます。Itemに値を保管する手段としてDictionary/配列/クラスなどがありますが、本ページでは「ItemにもDictionaryを格納」パターンを紹介します。

Dictionaryを用いたデータ集計 - Itemにクラス版

Dictionaryの活用例として、データ集計マクロを作成してみます。Itemに値を保管する手段としてDictionary/配列/クラスなどがありますが、本ページでは「Itemに自作クラスを格納」パターンを紹介します。

Dictionaryを用いたデータ集計 - Itemに配列版

Dictionaryの活用例として、データ集計マクロを作成してみます。Itemに値を保管する手段としてDictionary/配列/クラスなどがありますが、本ページでは「Itemに一次元配列を格納」パターンを紹介します。

配列を新規シートに出力して中身を確認する

配列をマクロに利用する際、中身を確認するのにひと手間かかるのですが、「新規シートに配列を出力する」マクロを用意することで対策ができます。フィルターを設置することでデバッグ作業の効率が上がります。

ジャグ配列(配列の配列)を二次元配列に変換する

配列の中に配列が入っている、いわゆるジャグ配列を、ただの二次元配列に変換するコードを紹介します。DictionaryのItemに配列を入れた際、Itemsで生成されるジャグ配列をセルに一括出力するなどに活用できます。

色(RGB値)の操作を補助するクラスを作る

クラスモジュールづくりのサンプルとして「色の操作を補助するクラス」を作ってみました。Property Get&Letプロシージャの勉強にピッタリな題材なので、練習がてらコードを眺めてみてください。

配列をセル範囲(Range)に一括出力する

配列をセル範囲に一括で出力する方法を紹介します。横方向に出力する場合はRange.Value=配列、縦方向に出力する場合はRange.Value=Transpose(配列)、二次元配列の場合はRange.Value=二次元配列で実行できます。

Dictionaryを用いたデータ集計 - 列ごとにDictionary作成版

Dictionaryの活用例として、データ集計マクロを作成してみます。Itemに値を保管する手段としてDictionary/配列/クラスなどがありますが、本ページでは「列ごとにDictionaryを作成する」パターンを紹介します。

クラスのメンバーに配列(Array)を定義する

クラスモジュールのメンバーに配列(Array)を定義する方法を解説します。Variant変数で定義することはできますが、そのままでは要素の書き換えが出来ないため、入出力用のPropertyプロシージャを作成して対応します。

配列(Array)の次元数を取得する

配列の次元数を取得する方法を紹介します。GetDimensionのような一発で取得する組込関数、プロパティはありませんので、Uboundがエラーを出すまで次元数をループして上げてみるという方法で取得します。

WEB上の表をExcelに読み込む - QueryTable

WEBページ内にある表(テーブル)を、ワークシートに書き出すコードを紹介します。CSV読み込みなどに使用するQueryTableのAddメソッドにURLを渡すことで、WEBの読み込みも行うことができます。

Dictionaryで列番号を管理する

列番号を管理する方法として、列挙型変数Enumを用いる他に、Dictionaryを用いる方法もあります。特に「同じコードをレイアウトの異なるシートに対して実行できる」のが強みですので一度使ってみてください。

破損したブックを修復して開く(CorruptLoad)

破損したブックを修復して開くには、Workbooks.OpenメソッドでCorruptload:=xlRepairFileを指定すればいいのですが、これは破損していないブックも修復済みにしてしまうため、まずは普通に開く→失敗したら修復という手順を踏む必要があります。

読取専用の推奨を無視して書込権限でブックを開く

ブックの読取専用推奨メッセージを無視して書き込み権限で開きたい場合は、Workbook.OpenメソッドのIgnoreReadOnlyRecommendedをTrueにすればOKです。DisplayAlerts=False、ReadOnly:=Falseではいずれも読取専用になるためご注意ください。

重複しないようファイル名に連番を付与する関数

ファイルを新規保存したりコピー・移動する際に、既存ファイルを上書きしないよう連番を付与するコードは関数化しておくと便利です。ファイルが存在しなくなるまでiを増やし、ファイルベース名 & (i) & 拡張子を結果値として返すことで実装できます。

フォルダを統合する(同名のフォルダに移動する)

同じ名前のフォルダがある場所にフォルダを移動すると、手作業であればフォルダを統合することができます。しかしVBAにはその機能がないため、フォルダ内の全ファイルを判定しながら移動していき、最後に元フォルダを削除する必要があります。