完全ノーコード高速ツール(配列 × Dictionary × 自動範囲 × マッピング対応)
ここでは 「列数可変・マッピング設定だけで動く、完全ノーコード高速ツール」 を作ります。
初心者でも マクロを触らず、Excel 上で設定だけで高速処理 が可能です。
コンセプト
- データ表は列数可変、行数は数十万行でも OK
- 処理内容は マッピング表 で指定するだけ
- マクロは 1 回書くだけ、あとは設定するだけ
- Dictionary + 配列 + 自動範囲で 超高速処理
マッピング表の作り方(シート「Mapping」)
| 処理対象列 | 処理タイプ | 対象マスタ列 | 出力列 | 備考 |
|---|---|---|---|---|
| A | マスタ結合 | Master!A:B | C | 商品コード → 商品名 |
| B | 重複チェック | – | D | B列の重複をチェック |
| C | 条件判定 | – | E | 空白なら NG、数値なら OK |
- 処理対象列:データ表の列(例:A列)
- 処理タイプ:マスタ結合 / 重複チェック / 条件判定 / 計算 / 任意文字列
- 対象マスタ列:マスタの範囲(マスタ結合時のみ)
- 出力列:結果を書き込む列
- 備考:必要に応じてメモ
高速フレーム(完全版コード)
Sub NoCode_FastTool()
Dim ws As Worksheet, wsMap As Worksheet
Dim LastRow As Long, LastCol As Long
Dim Data As Variant
Dim Map As Variant
Dim r As Long, m As Long
Dim dict As Object
Set ws = ActiveSheet
Set wsMap = Sheets("Mapping")
'--- ① データ範囲自動取得 ---
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
LastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
'--- ② データを配列に読み込み ---
Data = ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol)).Value
'--- ③ マッピング表読み込み ---
Dim LastRowMap As Long
LastRowMap = wsMap.Cells(wsMap.Rows.Count, 1).End(xlUp).Row
Map = wsMap.Range("A2:E" & LastRowMap).Value
'--- ④ マッピングに沿って処理 ---
For m = 1 To UBound(Map, 1)
Dim ColSrc As Long, ColDest As Long
ColSrc = ColumnLetterToNumber(Map(m, 1)) ' A → 1
ColDest = ColumnLetterToNumber(Map(m, 4)) ' 出力列
Select Case Map(m, 2)
Case "マスタ結合"
Set dict = CreateObject("Scripting.Dictionary")
Dim masterArr As Variant
masterArr = Sheets(Map(m, 3).Split("!")(0)).Range(Map(m, 3).Split("!")(1)).Value
' マスタを Dictionary 化
Dim i As Long
For i = 1 To UBound(masterArr, 1)
dict(masterArr(i, 1)) = masterArr(i, 2)
Next i
' データに書き込み
For r = 2 To UBound(Data, 1)
If dict.exists(Data(r, ColSrc)) Then
Data(r, ColDest) = dict(Data(r, ColSrc))
End If
Next r
Case "重複チェック"
Set dict = CreateObject("Scripting.Dictionary")
For r = 2 To UBound(Data, 1)
If dict.exists(Data(r, ColSrc)) Then
Data(r, ColDest) = "重複"
Else
dict.Add Data(r, ColSrc), True
End If
Next r
Case "条件判定"
For r = 2 To UBound(Data, 1)
If Data(r, ColSrc) = "" Then
Data(r, ColDest) = "NG"
Else
Data(r, ColDest) = "OK"
End If
Next r
Case "計算"
For r = 2 To UBound(Data, 1)
Data(r, ColDest) = Data(r, ColSrc) * 1.08 '例:消費税計算
Next r
Case "文字列変換"
For r = 2 To UBound(Data, 1)
Data(r, ColDest) = UCase(Data(r, ColSrc))
Next r
End Select
Next m
'--- ⑤ 配列を一括書き戻し ---
ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol)).Value = Data
MsgBox "処理完了(超高速)"
End Sub
'------------------------------------
' A,B,C 列文字 → 数字に変換
Function ColumnLetterToNumber(ColLetter As String) As Long
ColumnLetterToNumber = Range(ColLetter & "1").Column
End Function
VB特徴
- 列数可変
- データ表の列が増減しても自動で対応
- 処理設定はマッピング表のみ
- ノーコードで業務担当者でも設定可能
- 高速処理
- 配列 + Dictionary + 一括書き戻し → 数十万行でも 1 秒前後
- 柔軟性
- マスタ結合 / 重複チェック / 条件判定 / 計算 / 文字列変換など全対応
使い方
- データ表を「Sheet1」に用意
- マッピング表を「Mapping」シートに作成
- マスタがある場合はマスタシートを用意
- マクロ実行 → 設定通りに高速処理
💡 これで 「誰でも設定だけで、数十万行のデータを高速処理できる」 完全ノーコードツールの完成です。

