プログラミングのメモ

プログラミングの学び直し備忘録

VBA:Excel :Tips:範囲(Range)の重複削除、結果取得・出力(Excelシート)

  • 配列の配列
  • 配列の配列 → 2次元配列
  • 配列をセルに出力
  • Excelシート 重複削除
  • セルの値を2次元配列に取得
  • 2次元配列をセルに出力
'VBAで二次元配列のデータを高速にセルへ貼り付ける | Excel作業をVBAで効率化 : https://vbabeginner.net/paste-2d-array-data-into-cells-at-high-speed/
'
Public Sub Sample()

    '=====================================
    '   配列の配列
    '=====================================
    Dim vArrOfArr
    vArrOfArr = Array( _
                        Array("a", "b", "c", "d"), _
                        Array(1, 2, 3, 4), _
                        Array(1, 2, 3, 4), _
                        Array(1, 3, 3, 4), _
                        Array(1, 2, 3, 4), _
                        Array(1, 4, 3, 4), _
                        Array(1, 2, 3, 4) _
                        )

    '=====================================
    '   2次元配列
    '=====================================
    Dim v2dArr()
    Dim r As Long, c As Long
    
    ReDim v2dArr(UBound(vArrOfArr), UBound(vArrOfArr(0)))
    
    For r = LBound(vArrOfArr) To UBound(vArrOfArr)  '// 1段目配列(行)
        For c = LBound(vArrOfArr(r)) To UBound(vArrOfArr(r))    '// 2段目配列(列)
            v2dArr(r, c) = vArrOfArr(r)(c)
        Next
    Next
    
    '=====================================
    '   セルに出力
    '=====================================
    Dim iRowMax As Long, iColMax As Long
    iRowMax = UBound(v2dArr, 1) - LBound(v2dArr, 1) + 1 '// 1次元目の要素数を取得
    iColMax = UBound(v2dArr, 2) - LBound(v2dArr, 2) + 1 '// 2次元目の要素数を取得

    Cells.Clear
    
    '// Rangeオブジェクトで貼り付けるセル範囲を指定する場合
    Dim cellStart   As Range: Set cellStart = Cells(2, 2)
    Dim cellEnd     As Range: Set cellEnd = cellStart.Offset(iRowMax - 1, iColMax - 1)
    
    Range(cellStart, cellEnd).Value = v2dArr: Cells.Clear
    
    '// Rangeオブジェクトで開始セルから貼り付けるセル範囲を拡張する場合
    Range("B2").Resize(iRowMax, iColMax).Value = v2dArr: 'Cells.Clear
    
    
    '=====================================
    ' Excelシート 重複削除
    '   対象列 Columns:=Array(1, 2)
    '=====================================
    Dim rng As Range
    Set rng = Range("B2").CurrentRegion
    
    rng.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
    
    '=====================================
    '// セルの値を2次元配列に取得
    '=====================================
    Dim vGetArrCell As Variant
    vGetArrCell = rng.CurrentRegion.Value    '※indexは「1」から
    
    '=====================================
    '   セルに出力
    '=====================================
    iRowMax = UBound(vGetArrCell, 1) - LBound(vGetArrCell, 1) + 1 '// 1次元目の要素数を取得
    iColMax = UBound(vGetArrCell, 2) - LBound(vGetArrCell, 2) + 1 '// 2次元目の要素数を取得

    '// Rangeオブジェクトで開始セルから貼り付けるセル範囲を拡張する場合
    Range("B12").Resize(iRowMax, iColMax).Value = vGetArrCell: 'Cells.Clear
    
    
End Sub