Arrays VBA:运行二维变量数组以删除行

Arrays VBA:运行二维变量数组以删除行,arrays,excel,vba,variant,Arrays,Excel,Vba,Variant,我正在将一个范围作为二维变量导入VBA,并通过'Dim matrix()将数组声明为变量 现在,我想在第二行列=“偶数”或第五行以“\u tom”结尾的行中循环并删除这些行。下面的数据集 我的主要问题是,我不知道如何删除该行 1, odd, 3, 27, today 2, even, 6, 21, today_tom 3, odd, 9, 28, today 4, even, 12, 30, today 5, odd, 15, 17, today_tom

我正在将一个范围作为二维变量导入VBA,并通过'Dim matrix()将数组声明为变量

现在,我想在第二行
列=“偶数”
或第五行以
“\u tom”
结尾的行中循环并删除这些行。下面的数据集

我的主要问题是,我不知道如何删除该行

1,  odd,    3,  27, today
2,  even,   6,  21, today_tom
3,  odd,    9,  28, today
4,  even,   12, 30, today
5,  odd,    15, 17, today_tom
6,  even,   18, 17, today
7,  odd,    21, 18, today
8,  even,   24, 9 , today_tom
9,  odd,    27, 24, today_tom
10, even,   30, 9,  today
11, odd,    33, 11, today
12, even,   36, 22, today
13, odd,    39, 8 , today
14, even,   42, 1 , today
15, odd,    45, 4 , today

当前代码:

Sub test()
    Dim matrix As Variant
    matrix = Range("A1:E15")
    Dim r As Long

    For r = LBound(matrix, 1) To UBound(matrix, 1)
        If matrix(r, 2).Value = "even" Then
            'delete
        End If
        If Right(matrix(r, 2).Value, 4) = "_tom" Then
            'delete
        End If
    Next r

End Sub


通过
Application.Index()删除数组元素

Function getRowNo(arr) As Variant()
' Note: receives last column values of array two as 1-dim 1based array
' Purp: returns 2-dim 1-based array with row numbers if conditions met
    Dim i As Long, ii As Long, tmp()
    ReDim tmp(1 To 1, 1 To UBound(arr))     ' provide for temporary array
    For i = LBound(arr) To UBound(arr)
        If arr(i, 2) = "even" Or Right(arr(i, 5), 4) = "_tom" Then
        ' do nothing
        Else
            ii = ii + 1                     ' increment temp counter
            tmp(1, ii) = i                  ' enter row number of original column data
        End If
    Next i
    ReDim Preserve tmp(1 To 1, 1 To ii)     ' correct last dimension
    getRowNo = Application.Transpose(tmp)   ' return 2-dim array with rownumbers to be preserved
End Function

是的,可以通过
应用程序.Index
函数通过一种变通方法“删除”数组元素,该函数由几个数组参数组成:


Sub Restructure()
' Site: https://stackoverflow.com/questions/59685516/vba-run-through-a-2d-variant-array-deleting-columns
    Dim matrix As Variant
    matrix = Sheet1.Range("A1:E15")
    '========================================================
    'Maintain only array rows <> "even" or ending with "_tom"
    '--------------------------------------------------------
    matrix = Application.Index(matrix, getRowNo(matrix), Array(1, 2, 3, 4, 5))

''optional: write to any target range    
'           Sheet1.Range("G1").Resize(UBound(matrix), UBound(matrix, 2)) = matrix
End Sub
示例结果

进一步提示


不能通过
.Value
属性引用数组元素,只能通过索引(例如
矩阵(1,1)

引用数组元素,因此需要循环。你试过代码了吗?您需要从
LBound(matrix,1)
循环到
Ubound(matrix,1)
。添加了代码,但根据您提供的代码重新打开不起作用。不能“删除”数组的元素。也许你想读一些行来保持一个新的数组?谢谢。所以您认为最好制作另一个数组,并且只有在这些条件为真的情况下才能输入?Mkaes更有意义-只有当这些条件为假时,罐式溶液ASAICWell才会输入,但这是一个选择是的。