二次元配列の指定位置(Row, Col)を左上基準として、別の二次元配列の範囲分だけ値を上書きする汎用プロシージャ Excel VBA
- yuji fukami
- 9 時間前
- 読了時間: 2分

<概要 (上書き)>
OverwriteArray2D は、二次元配列 Array2D の指定位置(Row, Col)を左上基準として、別の二次元配列 OverwriteArray2D_ の範囲分だけ値を上書きする関数です。
「配列の一部だけ差し替えたい」ときに便利例:テンプレ配列の一部に、計算結果ブロック/ヘッダー/注釈ブロックなどを埋め込む
行列の開始位置が 1 の配列を前提にしており、範囲外やサイズ超過はメッセージで止めてくれるため、事故りにくい作りです。
仕様(ポイント)
Row, Col は 上書きブロックの左上セル(配列要素)を指定
上書きは OverwriteArray2D_ のサイズ(N×M)分だけ行い、Array2D の同範囲を置換
次の条件を満たさない場合は停止(MsgBox + Stop)
どちらも二次元配列である
どちらも開始要素番号が 1
Row/Col が Array2D の範囲内
上書き範囲が Array2D の範囲を超えない
<実行例>
実行例のサンプルコードは次の通りです
実行結果のイミディエイトウィンドウは次のようになります。

今回のサンプルでは、5行×6列の土台配列 Base2D のうち、Row=3 / Col=2 を左上とする範囲を、2行×3列の配列 Patch2D で上書きしました。
出力結果を見ると、指定した位置を起点にしたブロックだけが置き換わり、それ以外の要素は元の値のまま維持されていることが確認できます。
このように OverwriteArray2D を使うと、二次元配列の一部分だけを安全に差し替える処理を、ループ記述なしでシンプルに表現できます。
<関連コード>
今回の汎用プロシージャは、下記の別で紹介している汎用プロシージャを使用しています。
・IsArray2D → https://www.softex-celware.com/post/isarray1d
・IsArray2DStart1 → https://www.softex-celware.com/post/isarray1d
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。




コメント