VBA 复制不连续范围单元格



我正在尝试将不连续的范围单元格复制到另一张纸上。

  • 我的第一个范围在工作表 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)

最新更新