Softex CelwareTech Blog
Excel VBA2026-06-02

一次元配列ループの雛形を生成するExcel VBA汎用プロシージャ MCCLoopArray1D

クリップボードにコピーした配列名から、一次元配列をForループするVBAコード雛形を生成し、すぐ貼り付けられる状態にする開発補助プロシージャを解説します。

Excel VBA汎用プロシージャコード生成一次元配列クリップボード

概要

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を実行し、生成されたコードをコードウィンドウへ貼り付けます。

使用例

次のように、処理したい一次元配列の変数名をコピーしてから実行します。

使用例
vba
コードを読み込み中...

イミディエイトウィンドウでは、短縮名のMCCLoopArray1Dを実行します。

MCCLoopArray1D

生成されたコードを貼り付けたあと、Array1D(I)の行に必要な処理を追加します。

サンプルブック

動作確認用のマクロ有効ブックも用意しています。

MCCLoopArray1Dサンプルブックをダウンロード

.xlsm形式のため、Excelで開くときはマクロの有効化、保護ビュー、ダウンロードファイルのブロック解除を確認してください。

コピー可能な実装コード

下のコードは、MCCLoopArray1DMakeClipCodeLoopArray1DClipTextGetClipTextShowCodeWindowDelayShowCodeWindowを1つにまとめた貼り付け用パッケージです。

MCCLoopArray1D.bas
vba
コードを読み込み中...

初心者向けコード解説

MCCLoopArray1Dは、長い名前のMakeClipCodeLoopArray1Dを呼び出すための短縮プロシージャです。イミディエイトウィンドウから実行する前提では、短い名前を用意しておくと入力が速くなります。

中心処理のMakeClipCodeLoopArray1Dでは、まずGetClipTextでクリップボード内の文字列を取得します。空文字の場合はBeepDebug.Printで知らせ、配列名がない状態で不完全なコードを生成しないようにしています。

取得した文字列からvbLfvbCrを削除して、配列名として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ではVBIDEApplication.VBE.Windowsを調べ、最大化されているコードウィンドウを見つけてSetFocusします。これにより、生成コードを貼り付けたい場所へ戻る操作を短縮できます。

注意点

  • 生成コードはFor I = 1 To Nのため、1始まり配列を前提にしています。0始まり配列を扱う場合は、LBound(配列名, 1) To UBound(配列名, 1)の形へ修正してください。
  • クリップボードの文字列がそのまま配列名としてコードに埋め込まれます。配列名以外の文字列をコピーした状態で実行しないようにします。
  • 実行すると、直前にコピーしていたクリップボード内容は生成コードで上書きされます。
  • GetClipTextではDataObjectを使います。VBEの「ツール」→「参照設定」でMicrosoft Forms 2.0 Object Libraryが必要になる場合があります。
  • ShowCodeWindowApplication.VBE.Windowsvbext_wt_CodeWindowvbext_ws_Maximizeを使います。コンパイルエラーになる場合は、Microsoft Visual Basic for Applications Extensibility 5.3の参照設定を確認してください。
  • 環境によっては、Excelのトラストセンターで「VBAプロジェクト オブジェクト モデルへのアクセスを信頼する」の確認が必要です。
  • 生成されたコードは雛形です。貼り付け後に、Array1D(I)の行へ実際の処理を必ず書き足します。

関連記事

軽いまとめ

MCCLoopArray1Dを用意しておくと、一次元配列のループ雛形を毎回手入力せず、配列名のコピーとイミディエイトウィンドウ実行だけで作れるようになります。

大きな機能ではありませんが、VBA開発中に何度も書く定型コードを短縮できるため、開発補助用の汎用プロシージャとして残しておく価値があります。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →