arrays - VBA Excel通过临时数组交换范围值
问题描述
我创建了一个包含一些数据的电子表格,我想通过宏交换该工作表中范围的位置。因此,我创建了所有不同范围的数组。
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.
通过输入,我询问(值)我想与电子表格中的另一个范围(值)交换哪个范围。我使用输入中的变量将要交换的数组的名称放在一起。示例:C2G4(保存 Range("E6:H6") 中的值)到 C5G3(保存 Range("Q5:T5") 中的值)
为了能够在不覆盖数组值(并丢失数据)的情况下进行交换,我将数组的内容放入 2 个中间/临时数组中,然后进行交换:
Dim IntermediateFrom As Variant
Dim IntermediateTo As Variant
当我尝试将“来自”数组的值放入中间数组时,我的代码将使用数组的名称而不是数组的内容。'to' 数组也是如此。当我尝试这种说法时:
IntermediateFrom = ("C" & SearchFromComb & "G" & SearchFromGetal)
IntermediateFrom 数组具有字符串值“C2G5”,而不是 C2G5 数组的内容
IntermediateTo = ("C" & SearchToComb & "G" & SearchToGetal)
: 有同样的问题
当我使用:
IntermediateFrom = C2G4
数组的值被很好地复制。同样适用于:
IntermediateTo = C5G3
但是我想使用替换值来进行移动。
很抱歉进行了广泛的解释,但有人可以帮助我吗?
解决方案
您可以使用字典来存储范围,键是 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
推荐阅读
- amazon-web-services - 如何将 ssh 与 AWS ssm 会话和多配置文件一起使用?
- python - 替换列表中的 None 值时如何处理边缘情况?
- mysql - 过滤与 SQL 中的过滤条件相对应的重复记录和出现次数
- html - Safari 的填充计算问题
- apache-spark - 如何知道执行 pysaprk 代码需要多长时间
- ruby-on-rails - gem install pg 失败
- python - Python简单拆分器
- android - 在 Angular HttpClient 中没有发现网络错误
- javascript - 滚动时如何模糊传入和传出的文本/元素?
- r - str_c 在 R 中使用 "