Кажется, вам нужно решить, что вы подразумеваете под словом «удалить».Мне неизвестно свойство Delete
массива вариантов, поэтому, хотя ваш код может скомпилироваться, он выдаст ошибку, необходимую для объекта.
Тем не менее, ваша точка зрения о ранее использовавшемся методе Clear
вRange
объект, предполагает, что вы просто хотите прочитать значения диапазона в массив, удалить содержимое, если определенные условия не являются мной, а затем переписать ваш массив в диапазон.Если это так, вы, вероятно, не захотите изменять размер вашего массива, поскольку строки или столбцы не будут выстраиваться в ряд - чаще всего вы устанавливаете элемент вашего варианта массива на Empty
.
Приведенный ниже код показывает, как сделать это в простой процедуре: взять 10 чисел из столбца A, удалить все нечетные числа и переписать числа в столбец C, но строки все еще совпадают:
Public Sub EmptyItemsAndKeepArraySize()
Dim inArr() As Variant
Dim i As Long
'Read range into arrays.
inArr = Sheet1.Range("A1:A10").Value2
'Clear all numbers that are not even.
For i = 1 To UBound(inArr, 1)
If inArr(i, 1) Mod 2 <> 0 Then inArr(i, 1) = Empty
Next
'Write cleared array to column C
Sheet1.Range("c1").Resize(UBound(inArr, 1)).Value = inArr
End Sub
Однако, если вы действительно хотите удалить и изменить размер массива, то простой способ сделать это - сначала заполнить временную коллекцию, изменив размер выходного массива, а затем заполнив ее элементами коллекции.В приведенном ниже примере код удаляет все нечетные числа, а затем записывает массив в столбец B, но в виде массива, уменьшенного в размере (т. Е. Смежные строки):
Public Sub DeleteItemsAndShrinkArray()
Dim inArr() As Variant, outArr() As Variant
Dim i As Long
Dim temp As Collection
Dim v As Variant
'Read range into arrays.
inArr = Sheet1.Range("A1:A10").Value2
'Keep all even numbers in a temporary collection.
Set temp = New Collection
For i = 1 To UBound(inArr, 1)
If inArr(i, 1) Mod 2 = 0 Then temp.Add inArr(i, 1)
Next
'Dimension the output array.
ReDim outArr(1 To temp.Count, 1 To 1)
'Populate new array from temp collection.
i = 1
For Each v In temp
outArr(i, 1) = v
i = i + 1
Next
'Write reduced array to column B
Sheet1.Range("B1").Resize(UBound(outArr, 1)).Value = outArr
End Sub