簡體   English   中英

VBA Excel 通過臨時 arrays 交換范圍值

[英]VBA Excel Swapping values of ranges through temporary arrays

我創建了一個包含一些數據的電子表格,我想通過宏交換該工作表中范圍的位置。 因此,我創建了所有不同范圍的 arrays。

Dim C1G1, C1G2, C1G3, C1G4, C1G5, C1G6  As Variant

C1G1 = Range("A3:D3")

C1G2 = Range("A4:D4")

C1G3 = Range("A5:D5")

C1G4 = Range("A6:D6")

C1G5 = Range("A7:D7")

C1G6 = Range("A8:D8")


Dim C2G1, C2G2, C2G3, C2G4, C2G5, C2G6 As Variant

C2G1 = Range("E3:H3")

C2G2 = Range("E4:H4")

C2G3 = Range("E5:H5")

C2G4 = Range("E6:H6")

C2G5 = Range("E7:H7")

C2G6 = Range("E8:H8")

… etc.

通過輸入,我詢問(值)我想與電子表格中的另一個范圍(值)交換哪個范圍。 我使用輸入中的變量將要交換的 arrays 的名稱放在一起。 示例:C2G4(保存 Range("E6:H6") 中的值)到 C5G3(保存 Range("Q5:T5") 中的值)

為了能夠在不覆蓋 arrays 的值(並丟失數據)的情況下進行交換,我將 arrays 的內容放入 2 個中間/臨時 arrays 中,然后進行交換:

Dim IntermediateFrom As Variant

Dim IntermediateTo As Variant

當我嘗試將“來自”數組的值放入中間 arrays 時,我的代碼使用數組的名稱而不是數組的內容。 'to' 數組也是如此。 當我嘗試這種說法時:

IntermediateFrom = ("C" & SearchFromComb & "G" & SearchFromGetal)

IntermediateFrom 數組具有字符串值“C2G5”,而不是 C2G5 數組的內容

IntermediateTo = ("C" & SearchToComb & "G" & SearchToGetal) :有同樣的問題

當我使用:

IntermediateFrom = C2G4 

arrays 的值被很好地復制。 同樣適用於:

IntermediateTo = C5G3

但是我想使用替換值來進行移動。

很抱歉進行了廣泛的解釋,但有人可以幫助我嗎?

這是一種方法:

Dim ranges(1 To 2) As Range '<< your ranges of data
Dim tmp, rng1, rng2

'populate the array
Set ranges(1) = Range("A3:D8")
Set ranges(2) = Range("E3:H8")

Set rng1 = ranges(SearchFromComb).Rows(SearchFromGetal)
Set rng2 = ranges(SearchToComb).Rows(SearchToGetal)

tmp = rng2.Value
rng2.Value = rng1.Value
rng1.Value = tmp

您可以使用字典來存儲范圍,鍵是 C1G1、C1G2 等。

在下面的代碼中,有些東西已經被硬編碼,但希望它能夠展示這個想法。

Sub SwapRanges()
Dim dicRanges As Object
Dim rng As Range
Dim rngOne As Range
Dim rngTwo As Range
Dim I As Long
Dim J As Long
Dim tmp As Variant

    Set dicRanges = CreateObject("Scripting.Dictionary")
    
    Set rng = Range("A3:D3")
    For I = 1 To 2
        For J = 1 To 6
            Set dicRanges("C" & I & "G" & J) = rng.Offset(J - 1)
        Next J
        Set rng = Range("E3:H3")
    Next I
    
    
    Set rngOne = dicRanges("C1G1")
    tmp = rngOne.Value
    Set rngTwo = dicRanges("C2G5")
    rngOne.Value = rngTwo.Value
    rngTwo.Value = tmp
    
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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