Excel 将复制的单元格从区域插入到另一区域的空白单元格
描述数据和基础excel文件的图像 问题和我的尝试Excel 将复制的单元格从区域插入到另一区域的空白单元格,excel,vba,insert,range,Excel,Vba,Insert,Range,描述数据和基础excel文件的图像 问题和我的尝试 这里有一个名为RealEnter 2的表,我希望把它插入到表1中的空白区域中,这样在集合中它看起来像范围3。李> 我已经尝试复制范围,然后选择范围1,标记空白区域:HOST->查找和选择->转到特殊->选择空白,然后插入复制的单元格。此操作失败,我收到消息“无法在多个范围选择上执行此操作”。选择单个范围,然后重试“”。我进一步尝试使用录制宏工具尝试VBA,但没有成功。 注意:我有一个更大的集合,类似于范围1,具有完全相同的结构,需要填充
- 这里有一个名为RealEnter 2的表,我希望把它插入到表1中的空白区域中,这样在集合中它看起来像范围3。李>
- 我已经尝试复制范围,然后选择范围1,标记空白区域:HOST->查找和选择->转到特殊->选择空白,然后插入复制的单元格。此操作失败,我收到消息“无法在多个范围选择上执行此操作”。选择单个范围,然后重试“”。我进一步尝试使用录制宏工具尝试VBA,但没有成功。
- 注意:我有一个更大的集合,类似于范围1,具有完全相同的结构,需要填充空白单元格,否则我当然会手动完成
- 将范围1和范围2放在单独的图纸上
- 删除其各自工作表中范围1和范围2中的所有空行
- 然后复制范围1,然后复制范围2以进行聚合 (这不会填补空白,但会将它们聚合在一起,然后您可以轻松地筛选或透视表数据) 如果你想以一种复杂的方式进行,你必须
- 循环查看Range 1数据并记录所有空行
- 循环范围2数据并记录有多少条记录
- 循环范围2,剪切每行并粘贴范围1中记录的空行
- 如果范围2中有更多的数据行,请将多余的数据放在范围1之下
- 如果范围2中的数据行较少,则抛出错误或删除范围1中的其他空行 (这需要比方法1多一点思考和逻辑,但它会像您最初要求的那样填补空白)
- 有两种方法可以实现您的目标。如果必须重复执行,则可以使用VBA执行这两项操作
以下是一些让您开始学习的内容:
Application.ScreenUpdating = False
'set range limits
endRange1 = 17
endRange2 = 5
Dim rowArray() As Variant
'step 1
For i = 3 To endRange1
If Cells(i, 2).Value = "" Then
range1EmptyRow = range1EmptyRow + 1
ReDim Preserve rowArray(1 To UBound(rowArray) + 1) As Variant
rowArray(UBound(rowArray)) = i
End If
Next i
'step 2
For i = 3 To endRange2
If Cells(i, 7).Value <> "" Then range2Rows = range2Rows + 1
Next i
Application.ScreenUpdate=False
'设置范围限制
endRange1=17
endRange2=5
Dim rowArray()作为变量
"第一步,
对于i=3到endRange1
如果单元格(i,2).Value=”“则
range1EmptyRow=range1EmptyRow+1
ReDim将rowArray(1到UBound(rowArray)+1)保留为变量
行数组(UBound(rowArray))=i
如果结束
接下来我
"第二步,
对于i=3到endRange2
如果单元格(i,7).Value为“”,则range2Rows=range2Rows+1
接下来我
子DoIt()
调光r1为量程,r2为量程,r3为量程,cel为量程
使用工作表(“Sheet1”)时,效果非常好!
Sub DoIt()
Dim r1 As Range, r2 As Range, r3 As Range, cel As Range
With Worksheets("Sheet1") ' <-- your own sheet name here
Set r1 = .Range("B3", .Cells(.Rows.Count, "B").End(xlUp))
Set r2 = .Range("G3", .Cells(.Rows.Count, "J").End(xlUp))
Set r3 = .Cells(.Rows.Count, "L").End(xlUp).Offset(1)
For Each cel In r1
If Not IsEmpty(cel) Then
r3.Resize(1, 4).value = cel.Resize(1, 4).value
Set r3 = r3.Offset(1)
Else
r3.Resize(r2.Rows.Count, r2.Columns.Count).value = r2.value
Set r3 = r3.Offset(r2.Rows.Count)
End If
Next
End With
End Sub