当某些条件为真时,我试图删除数组vba中的特定元素,但最终出现错误424。我是否知道正确的方法?我厌倦了使用redim,但是它不适合我的情况,因为在与其他数组进行比较之后,我需要将数据存储回excel文件中,而excel文件中的位置已经进行了排序。
在将remarkRange更改为数组变体之前,我将其用作 Dim remarkRange 作为范围,我可以在其中使用。清除清除特定元素中的范围项。
我尝试了remarkRange(I, 1)=" "
,它可以正常运行,但不确定是否合适。我可以知道正确的方法吗?谢谢。
Dim remarkRange() As Variant
remarkRange= wb.Sheets("wb").Range("A1:A5").Value2
For I = LBound(remarkRange) To UBound(remarkRange)
If (some condition is true) then
remarkRange(I, 1).Delete
End If
Next I
我希望数组中特定单元格中的元素为空,但出现错误424
答案 0 :(得分:0)
数组没有Delete
方法。当Range
是数组而不是remarkRange
时,在Range
中包含remarks
也会引起误解。也许是其他名称,例如For i = LBound(remarks, 1) To UBound(remarks, 1)
If some condition Then
remarks(i, 1) = ""
End If
Next i
或任何您可以理解的东西。
如果您要将数组写回到工作表中,那么将元素更改为空白字符串就没有问题。
for(int i=1;i<=num;i++){
for(int j=1;j<=i;j++){
System.out.print(" "+i+" ");
}
}
答案 1 :(得分:0)
似乎您需要确定“删除”的含义。我不知道变量数组的Delete
属性,因此虽然您的代码可能会编译,但会抛出对象必需的错误。
但是,关于先前在Clear
对象上使用Range
方法的观点建议您只想将范围值读入数组,如果不是某些条件,则删除内容,然后将数组重新写入该范围。如果是这种情况,您可能不希望调整数组的大小,因为行或列不会对齐-更常见的是,您将变量数组的项目设置为Empty
。
下面的代码显示了如何通过一个简单的例程来执行此操作,该例程从A列中提取10个数字,删除所有奇数,然后将数字重新写入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