将一系列单元格粘贴到具有特殊条件的相同大小的目标范围?
Pasting a range of cells onto a same size target range with special conditions?
感谢您帮助我。我在网上找不到解决这个问题的方法,所以这里是 :P。我想知道如何将一系列值(在本例中为 C6:R371)粘贴到另一个相同大小的工作表。我的问题是我只想将源工作表中的数据粘贴到目标工作表上空白的单元格中,而不更改目标工作表上 C6:R371 范围内的值。本质上,我有一系列需要 c&p 的单元格,但我希望宏仅将范围内的值粘贴到目标范围的空白单元格上。非常感谢
Range("C6:S371").Select
Selection.Copy
wbWest2.Activate
Dim rng As Range
Dim row As Range
Dim cell As Range
Set rng = Range("D9:S374")
For Each row In rng.Rows
For Each cell in row.Cells
If cell.value = 0 then selection.paste
Next cell
Next row
使用 With ... End With statements 将两个工作表隔离开来,因此它们的单元格是唯一被考虑的单元格。最快的比较是将两个范围批量加载到变体数组中。
Sub fill_blanks_from_source()
Dim r As Long, c As Long, aSRCs As Variant, aDSTs As Variant
With Worksheets("Sheet1") '<~~ source
aSRCs = .Range("C6:R371").Value2
End With
With Worksheets("Sheet2") '<~~ destination
aDSTs = .Range("D9").Resize(UBound(aSRCs, 1), UBound(aSRCs, 2)).Value2
End With
For r = LBound(aDSTs, 1) To UBound(aDSTs, 1)
For c = LBound(aDSTs, 2) To UBound(aDSTs, 2)
If Not CBool(Len(aDSTs(r, c))) Then
aDSTs(r, c) = aSRCs(r, c)
End If
Next c
Next r
With Worksheets("Sheet2")
.Range("D9").Resize(UBound(aDSTs, 1), UBound(aDSTs, 2)) = aDSTs
End With
End Sub
一旦完成比较并且目标中的空白值填充了源中的值,整个变量数组将返回到目标工作表中。
范围将始终保持相同大小。将源值加载到第一个变体数组后,LBound and UBound 函数将用于从 top-left 角的单元格扩展的目标范围的所有进一步维度。
感谢您帮助我。我在网上找不到解决这个问题的方法,所以这里是 :P。我想知道如何将一系列值(在本例中为 C6:R371)粘贴到另一个相同大小的工作表。我的问题是我只想将源工作表中的数据粘贴到目标工作表上空白的单元格中,而不更改目标工作表上 C6:R371 范围内的值。本质上,我有一系列需要 c&p 的单元格,但我希望宏仅将范围内的值粘贴到目标范围的空白单元格上。非常感谢
Range("C6:S371").Select
Selection.Copy
wbWest2.Activate
Dim rng As Range
Dim row As Range
Dim cell As Range
Set rng = Range("D9:S374")
For Each row In rng.Rows
For Each cell in row.Cells
If cell.value = 0 then selection.paste
Next cell
Next row
使用 With ... End With statements 将两个工作表隔离开来,因此它们的单元格是唯一被考虑的单元格。最快的比较是将两个范围批量加载到变体数组中。
Sub fill_blanks_from_source()
Dim r As Long, c As Long, aSRCs As Variant, aDSTs As Variant
With Worksheets("Sheet1") '<~~ source
aSRCs = .Range("C6:R371").Value2
End With
With Worksheets("Sheet2") '<~~ destination
aDSTs = .Range("D9").Resize(UBound(aSRCs, 1), UBound(aSRCs, 2)).Value2
End With
For r = LBound(aDSTs, 1) To UBound(aDSTs, 1)
For c = LBound(aDSTs, 2) To UBound(aDSTs, 2)
If Not CBool(Len(aDSTs(r, c))) Then
aDSTs(r, c) = aSRCs(r, c)
End If
Next c
Next r
With Worksheets("Sheet2")
.Range("D9").Resize(UBound(aDSTs, 1), UBound(aDSTs, 2)) = aDSTs
End With
End Sub
一旦完成比较并且目标中的空白值填充了源中的值,整个变量数组将返回到目标工作表中。
范围将始终保持相同大小。将源值加载到第一个变体数组后,LBound and UBound 函数将用于从 top-left 角的单元格扩展的目标范围的所有进一步维度。