Excel VBA | 列数可変・マッピング設定だけで動く完全ノーコードの高速ツール

VBA
スポンサーリンク

完全ノーコード高速ツール(配列 × Dictionary × 自動範囲 × マッピング対応)

ここでは 「列数可変・マッピング設定だけで動く、完全ノーコード高速ツール」 を作ります。
初心者でも マクロを触らず、Excel 上で設定だけで高速処理 が可能です。


コンセプト

  • データ表は列数可変、行数は数十万行でも OK
  • 処理内容は マッピング表 で指定するだけ
  • マクロは 1 回書くだけ、あとは設定するだけ
  • Dictionary + 配列 + 自動範囲で 超高速処理

マッピング表の作り方(シート「Mapping」)

処理対象列処理タイプ対象マスタ列出力列備考
Aマスタ結合Master!A:BC商品コード → 商品名
B重複チェックDB列の重複をチェック
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

特徴

  1. 列数可変
    • データ表の列が増減しても自動で対応
  2. 処理設定はマッピング表のみ
    • ノーコードで業務担当者でも設定可能
  3. 高速処理
    • 配列 + Dictionary + 一括書き戻し → 数十万行でも 1 秒前後
  4. 柔軟性
    • マスタ結合 / 重複チェック / 条件判定 / 計算 / 文字列変換など全対応

使い方

  1. データ表を「Sheet1」に用意
  2. マッピング表を「Mapping」シートに作成
  3. マスタがある場合はマスタシートを用意
  4. マクロ実行 → 設定通りに高速処理

💡 これで 「誰でも設定だけで、数十万行のデータを高速処理できる」 完全ノーコードツールの完成です。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました