簡體   English   中英

Excel VBA:如何將變量數組元素(行號)連接到范圍對象中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM