[英]Excel VBA - How do you add a row to a 2d variant array while preserving old array values?
[英]Excel VBA: How to concatenate variant array elements (row numbers) into a range object?
我確實研究了這個問題,但是找不到我想要的具體答案,實際上目前更加困惑。
我創建了一個宏,該宏將遍歷工作表上的行,並對每行中查找是否存在特定值的單元格進行布爾檢查,或者計算特定不等式的結果。 根據這些檢查,宏可能會也可能不會將行號傳遞到特定的數組中。 那部分工作正常。
我的問題是,現在我有了行號(存儲在變量數組中)-我無法弄清楚如何正確地將數據連接到一個范圍內,然后對這些項目執行大量的excel操作。 我想做的是創建這些值的范圍,然后一次刪除所有這些行,而不是循環遍歷。
我的宏在我的工作計算機上,但是我寫的一些東西應該解釋我正在嘗試做的事情:
Sub Test()
Dim Str As String
Dim r As Range
Dim i, a As Integer
Dim Count As Integer
Dim RngArray()
Count = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, "A:A").End(xlUp).Row
ReDim RngArray(Count)
a = 0
For i = 1 To Count
If Not i = Count Then
RngArray(a) = i
Str = Str & RngArray(a) & ":" & RngArray(a) & ", "
a = a + 1
ElseIf i = Count Then
RngArray(a) = i
Str = Str & RngArray(a) & ":" & RngArray(a)
a = a + 1
Else: End If
Next i
Set r = Range(Str)'Error Can Appear here depending on my concatenation technique
Range(Str).EntireRow.Delete 'error will always appear here
End Sub
我在這里組合了幾個步驟,並省略了所有布爾檢查。 在我的實際宏中,數組中的值已經存儲,並且我從LBound循環到UBound並將這些值連接成以下形式的字符串:““ 1:1,2:2,3:3,....,n: N“)
之所以這樣做,是因為行遍及整個工作表,我想達到可以傳遞參數的地步
Range("1:1, 2:2, 3:3, ..., n:n").EntireRow.Delete
我認為很明顯,我只是不了解如何將正確的信息傳遞給范圍對象。 當我嘗試運行此命令時,出現“對象全局范圍方法”錯誤消息。
我的短期解決方法是循環遍歷並清除行,然后刪除所有空白行(宏會跟蹤行的絕對位置,而不是迭代刪除后的行)-但我想弄清楚如何以我的方式執行此操作,以及為何不起作用。
我也歡迎其他解決方案,但我想了解我在這里做錯了什么。 我還應該提到,我使用Join()
來嘗試找到解決方法,但仍然收到相同類型的錯誤。
謝謝。
在對上面的宏的數據集進行了一些試驗之后,我發現它可以處理A:A中的少量數據集,但不適用於較大的數據集。
我在調整設置大小和宏的同時運行Debug.Print Len(Str)
,發現Range()最多只能接受240個字符。 我仍然不明白為什么會這樣,或者我收到特定錯誤消息的原因,但是如果Len(Str)<240,則宏將起作用。
如果我想使用我現在的方法,我將不得不在我的數組中向后循環以刪除這些行...或者我可以嘗試其他方法。
感謝安德魯對此的關注!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.