概要
MCCLoopArray1Dは、クリップボードに入っている文字列を配列名として扱い、一次元配列をループするExcel VBAコードの雛形を自動生成する開発補助プロシージャです。
たとえばArray1Dという配列名をコピーした状態で、イミディエイトウィンドウからMCCLoopArray1Dを実行すると、次のようなコードを生成してクリップボードへ格納します。
Dim I As Long
Dim N As Long: N = UBound(Array1D, 1)
For I = 1 To N
Array1D(I)
Next
生成結果はDebug.Printで確認でき、最後にコードウィンドウへ戻るため、任意の位置へ貼り付けて処理を書き足しやすくなります。
使う場面
- 一次元配列を処理するたびに同じ
For I = 1 To Nの雛形を書く手間を減らしたい - 配列名だけをコピーして、VBE上で素早くループコードを作りたい
UBound(配列名, 1)を使うループの書き間違いを減らしたい- コード生成、クリップボード格納、コードウィンドウ復帰までを一連の操作にしたい
処理イメージ図

MCCLoopArray1Dを実行すると、ループコードが自動生成されてクリップボードへ入ります。操作デモ
実際の操作では、配列名をコピーしてからイミディエイトウィンドウでMCCLoopArray1Dを実行し、生成されたコードをコードウィンドウへ貼り付けます。
使用例
次のように、処理したい一次元配列の変数名をコピーしてから実行します。
コードを読み込み中...イミディエイトウィンドウでは、短縮名のMCCLoopArray1Dを実行します。
MCCLoopArray1D
生成されたコードを貼り付けたあと、Array1D(I)の行に必要な処理を追加します。
サンプルブック
動作確認用のマクロ有効ブックも用意しています。
.xlsm形式のため、Excelで開くときはマクロの有効化、保護ビュー、ダウンロードファイルのブロック解除を確認してください。
コピー可能な実装コード
下のコードは、MCCLoopArray1D、MakeClipCodeLoopArray1D、ClipText、GetClipText、ShowCodeWindowDelay、ShowCodeWindowを1つにまとめた貼り付け用パッケージです。
コードを読み込み中...初心者向けコード解説
MCCLoopArray1Dは、長い名前のMakeClipCodeLoopArray1Dを呼び出すための短縮プロシージャです。イミディエイトウィンドウから実行する前提では、短い名前を用意しておくと入力が速くなります。
中心処理のMakeClipCodeLoopArray1Dでは、まずGetClipTextでクリップボード内の文字列を取得します。空文字の場合はBeepとDebug.Printで知らせ、配列名がない状態で不完全なコードを生成しないようにしています。
取得した文字列からvbLfとvbCrを削除して、配列名として1行に整えます。そのうえで、Str = Str & ...を使い、複数行のVBAコードを文字列として組み立てています。
生成するループでは、Dim N As Long: N = UBound(配列名, 1)でUBoundを取得し、For I = 1 To Nで1番目から最後まで処理する形にしています。これは、1始まりの一次元配列を前提にした雛形です。
最後にClipText(Str)で生成コードをクリップボードへ入れ、Debug.Print Strで確認用に出力します。さらにShowCodeWindowDelayを呼び、Application.OnTime経由でShowCodeWindowを実行して、コードウィンドウへ戻りやすくしています。
ShowCodeWindowではVBIDEのApplication.VBE.Windowsを調べ、最大化されているコードウィンドウを見つけてSetFocusします。これにより、生成コードを貼り付けたい場所へ戻る操作を短縮できます。
注意点
- 生成コードは
For I = 1 To Nのため、1始まり配列を前提にしています。0始まり配列を扱う場合は、LBound(配列名, 1) To UBound(配列名, 1)の形へ修正してください。 - クリップボードの文字列がそのまま配列名としてコードに埋め込まれます。配列名以外の文字列をコピーした状態で実行しないようにします。
- 実行すると、直前にコピーしていたクリップボード内容は生成コードで上書きされます。
GetClipTextではDataObjectを使います。VBEの「ツール」→「参照設定」でMicrosoft Forms 2.0 Object Libraryが必要になる場合があります。ShowCodeWindowはApplication.VBE.Windows、vbext_wt_CodeWindow、vbext_ws_Maximizeを使います。コンパイルエラーになる場合は、Microsoft Visual Basic for Applications Extensibility 5.3の参照設定を確認してください。- 環境によっては、Excelのトラストセンターで「VBAプロジェクト オブジェクト モデルへのアクセスを信頼する」の確認が必要です。
- 生成されたコードは雛形です。貼り付け後に、
Array1D(I)の行へ実際の処理を必ず書き足します。
関連記事
- 文字列をクリップボードへ格納するClipText
- コードウィンドウへ戻すShowCodeWindowDelay
- エラー回避コードのひな形を生成するMCCErrorEscape
- 0始まり配列を1始まりへ変換するConvArray1D_Start1
- 一次元配列から値の位置を取得するGetNumFromArray1D
- イミディエイトウィンドウをCUIのように使ってプロシージャコードを半自動生成する
軽いまとめ
MCCLoopArray1Dを用意しておくと、一次元配列のループ雛形を毎回手入力せず、配列名のコピーとイミディエイトウィンドウ実行だけで作れるようになります。
大きな機能ではありませんが、VBA開発中に何度も書く定型コードを短縮できるため、開発補助用の汎用プロシージャとして残しておく価値があります。
