Softex CelwareTech Blog
Excel VBA2026-06-04

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

クリップボードにコピーした2次元配列の変数名から、UBoundを使った二重ループのVBAコードを自動生成する汎用プロシージャです。配列処理の定型コードを素早く作成できます。

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

概要

MCCLoopArray2Dは、クリップボードに入っている2次元配列の変数名をもとに、二重ループのExcel VBAコードを自動生成する汎用プロシージャです。

たとえば、Array2Dという変数名だけをコピーしてから、イミディエイトウィンドウMCCLoopArray2Dを実行すると、次のようなコードが生成され、クリップボードにも格納されます。

    Dim I As Long
    Dim J As Long
    Dim N As Long: N = UBound(Array2D, 1)
    Dim M As Long: M = UBound(Array2D, 2)
    For I = 1 To N
        For J = 1 To M
            Array2D(I, J)
        Next
    Next

1次元配列用のMCCLoopArray1Dと同じ発想で、2次元配列の定型的なFor IFor Jの雛形を素早く作るための開発補助マクロです。

使う場面

  • 2次元配列を処理するたびに、同じ二重ループを書く手間を減らしたい
  • UBound(配列名, 1)UBound(配列名, 2)の書き間違いを減らしたい
  • 配列名だけコピーして、VBE上ですぐループ雛形を作りたい
  • コード生成、クリップボード格納、コードウィンドウ復帰までを一連の操作にしたい
  • 1D版と2D版のコード生成補助をセットで持っておきたい

2次元配列は、シート範囲を配列へ読み込んだ処理や、行列形式のデータを加工する処理でよく使います。毎回二重ループを手入力すると小さなミスが出やすいため、雛形だけでも自動生成できると開発が軽くなります。

処理イメージ図

MCCLoopArray2Dで2次元配列名から二重ループコードを生成して貼り付ける流れ
配列変数名をコピーし、イミディエイトウィンドウでMCCLoopArray2Dを実行すると、二重ループのコードが生成されてクリップボードに入ります。

処理の流れは次の通りです。

2次元配列の変数名をコピー
  ↓
MCCLoopArray2Dを実行
  ↓
GetClipTextで変数名を取得
  ↓
MakeClipCodeLoopArray2Dで二重ループ文字列を組み立てる
  ↓
ClipTextで生成コードをクリップボードへ格納
  ↓
ShowCodeWindowDelayでコードウィンドウへ戻りやすくする

動作デモ

実際の操作では、配列名をコピーしてからMCCLoopArray2Dを実行し、生成されたコードを任意の位置へ貼り付けます。

使用例

次のような2次元配列があるとします。ここではArray2Dという変数名だけをコピーしてから、イミディエイトウィンドウでMCCLoopArray2Dを実行します。

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

生成されるコードは次の形です。

    Dim I As Long
    Dim J As Long
    Dim N As Long: N = UBound(Array2D, 1)
    Dim M As Long: M = UBound(Array2D, 2)
    For I = 1 To N
        For J = 1 To M
            Array2D(I, J)
        Next
    Next

貼り付け後は、Array2D(I, J)の行に実際の処理を書き足します。たとえば各要素を確認したい場合は、次のように変更します。

Debug.Print Array2D(I, J)

サンプルブック

動作確認用のマクロ有効ブックも用意しています。手元で動きを確認したい場合に使えます。

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

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

コピー可能な実装コード

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

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

初心者向けコード解説

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

Public Sub MCCLoopArray2D()
    Call MakeClipCodeLoopArray2D
End Sub

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

Dim Text As String: Text = GetClipText
If Text = "" Then
    Call Beep
    Debug.Print "クリップボード格納に文字列が格納されていません"
    Exit Sub
End If

取得した文字列には、コピー操作の都合で改行が混ざることがあります。そのため、vbLfvbCrを削除して、1行の変数名として扱います。

Text = Replace(Text, vbLf, "")
Text = Replace(Text, vbCr, "")

二重ループのコードは、Strへ1行ずつ連結して作ります。UBound(配列名, 1)は1次元目、UBound(配列名, 2)は2次元目の最大インデックスを取得します。

Str = Str & "    Dim N As Long: N = UBound(" & Text & ", 1)" & vbLf
Str = Str & "    Dim M As Long: M = UBound(" & Text & ", 2)" & vbLf

外側のFor I = 1 To Nで1次元目を回し、内側のFor J = 1 To Mで2次元目を回します。内側のループで配列名(I, J)を参照する形です。

Str = Str & "    For I = 1 To N" & vbLf
Str = Str & "        For J = 1 To M" & vbLf
Str = Str & "            " & Text & "(I, J)" & vbLf
Str = Str & "        Next" & vbLf
Str = Str & "    Next"

最後にClipText(Str)で生成コードをクリップボードへ格納し、Debug.Print Strでイミディエイトウィンドウにも出力します。ShowCodeWindowDelayは、コードウィンドウへ戻りやすくする補助処理です。

Call ClipText(Str)
Debug.Print Str
Call ShowCodeWindowDelay

注意点

  • 生成コードはFor I = 1 To NFor J = 1 To Mのため、1始まりの2次元配列を前提にしています。
  • 0 To 1のような0始まり配列に使う場合は、生成後に開始値を修正してください。
  • クリップボードに入れる文字列は、基本的にArray2Dのような配列変数名だけにします。
  • 複数行のコードや余計な文字列をコピーしていると、その文字列がそのまま生成コードへ埋め込まれる可能性があります。
  • GetClipTextではDataObjectを使うため、VBEの「ツール」→「参照設定」でMicrosoft Forms 2.0 Object Libraryが必要になる場合があります。
  • ShowCodeWindowApplication.VBE.Windowsを参照するため、環境によっては「VBAプロジェクト オブジェクトモデルへのアクセスを信頼する」の設定や、VBE Extensibility系の参照設定が関係する場合があります。
  • 生成されたコードは雛形です。貼り付け後にArray2D(I, J)の行へ実際の処理を書き足してください。

関連記事

軽いまとめ

MCCLoopArray2Dを用意しておくと、2次元配列の二重ループ雛形を毎回手入力せず、配列名のコピーとイミディエイトウィンドウ実行だけで生成できます。

1D版のMCCLoopArray1Dとあわせて持っておくと、VBA開発で繰り返し書く配列処理の土台を素早く作れるようになります。小さな補助マクロですが、定型コードの入力ミスを減らし、実際の処理内容を書くことに集中しやすくなります。

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

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

無料相談はこちら →