我正在尝试将不连续的范围单元格复制到另一张纸上。
- 我的第一个范围在工作表 Dati,范围 A3:G300
- 森康德系列在达蒂表上,范围AA3:AA300
-
第三个范围在工作表上 Dati,范围 AC3:AC300
-
我的目的地在卡尔科洛表上,范围 A3:I300
-
我想使用联合(范围 1、范围 2、范围 3(创建一个新范围并在卡尔科洛工作表的范围 A3:I300 上移动/复制它
我的代码如下,但存在一个问题,因为在目标表"Calcolo"上,从 A3 到 G300 的数据是正确的,从 H3 到 I300 的数据不考虑 #N/D 值。
Sub copia()
Dim SelectA As Range
Dim SelectB As Range
Dim SelectC As Range
Dim UnionABC As Range
Dim RangeInc As Range
Set SelectA = Sheets("Dati").Range("A3:G300")
Set SelectB = Sheets("Dati").Range("AA3:AA300")
Set SelectC = Sheets("Dati").Range("AC3:AC300")
Set UnionABC = Union(SelectA, SelectB, SelectC)
Set RangeInc = Sheets("Calcolo").Range("A3:I300")
RangeInc = UnionABC.Value
End Sub
任何帮助查找错误或任何重新编码的想法? 谢谢
忘记剪贴板,将直接值传输与中间变体数组一起使用。
sub copia2()
dim arr as variant, tmp as variant, i as long
with workSheets("Dati")
arr = .Range("A3:G300").value
'collect AA
tmp = .Range("AA3:AA300").value
'make room for AA
redim preserve arr(lbound(arr, 1) to ubound(arr, 1), _
lbound(arr, 2) to ubound(arr, 2) + 1)
'transfer AA
for i = lbound(arr, 1) to ubound(arr, 1)
arr(i, ubound(arr, 2)) = tmp(i, 1)
next i
'collect AC
tmp = .Range("AC3:AC300").value
'make room for AC
redim preserve arr(lbound(arr, 1) to ubound(arr, 1), _
lbound(arr, 2) to ubound(arr, 2) + 1)
'transfer AC
for i = lbound(arr, 1) to ubound(arr, 1)
arr(i, ubound(arr, 2)) = tmp(i, 1)
next i
end with
with workSheets("Calcolo")
'transfer values to destination
.Range("A3").resize(ubound(arr, 1), ubound(arr, 2)) = arr
end with
end sub
你的代码几乎就在那里了。
复制到工作表 Calcolo 的位置,替换代码的该部分
RangeInc = UnionABC.Value
具有以下功能:
UnionABC.Copy Destination:=Sheets("Calcolo").Range(RangeInc.Address)