二次元配列で任意の一行を削除 の続き

昨日は、二次元配列で任意の一行を削除して、上に詰めることに挑戦した。
infoment.hatenablog.com

しかし、どうもスッキリしない。

そこで今日は、昨日の続きに挑戦する。
f:id:Infoment:20190830224703p:plain

もともと、シートに対してならば、このような表記ができる。

Range("A4").EntireRow.Delete

配列でも、このような表記ができないものか。
よし。無いならば、作ってしまおう。

ということで、無理やり作ったのがこちら。

一つ目のクラスモジュール(SeaquenceClass)
Option Explicit

Public Function TargetArray() As ArrayEditClass
    Set TargetArray = New ArrayEditClass
End Function
二つ目のクラスモジュール(ArrayEditClass)

こちらには、昨日作成したユーザー定義関数を丸っと移植。

Option Explicit

Public Function RowDelete(ByVal source_array As Variant, _
                           row_index As Long) As Variant
    Dim rMin As Long: rMin = LBound(source_array, 1)
    Dim rMax As Long: rMax = UBound(source_array, 1)
    Dim cMin As Long: cMin = LBound(source_array, 2)
    Dim cMax As Long: cMax = UBound(source_array, 2)

    Dim TempArray As Variant
    ReDim TempArray(rMin To rMax - 1, cMin To cMax)
                    
    Dim r As Long
    Dim i As Long: i = rMin
    Dim c As Long
        For r = rMin To rMax - 1
            For c = cMin To cMax
                TempArray(r, c) = source_array(i, c)
            Next
            If r + 1 = row_index Then
                i = i + 2
            Else
                i = i + 1
            End If
        Next
    
        RowDelete = TempArray
End Function

それでは、テストコードを作成してみる。
作成経過は、こんな感じだ。
f:id:Infoment:20190830225715g:plain

Sub Test()
    Dim SQC As SeaquenceClass
    Set SQC = New SeaquenceClass
    Dim arr() As Variant
        arr = Range("A1:D8").Value
        arr = SQC.TargetArray.RowDelete(arr, 4)
        
        Range("A10").Resize(7, 4) = arr
End Sub

テスト結果は、↓ こちら。
f:id:Infoment:20190830225949g:plain

動いた。動いたが・・・間に一個クラスモジュールを咬ませる意味があるのか?と問われると、自信が無い。拡張の方向次第だとは思うのだが。

という訳で、引き続き模索してみます。

参考まで。