Excel 将复制的单元格从区域插入到另一区域的空白单元格

Excel 将复制的单元格从区域插入到另一区域的空白单元格,excel,vba,insert,range,Excel,Vba,Insert,Range,描述数据和基础excel文件的图像 问题和我的尝试 这里有一个名为RealEnter 2的表,我希望把它插入到表1中的空白区域中,这样在集合中它看起来像范围3。李> 我已经尝试复制范围,然后选择范围1,标记空白区域:HOST->查找和选择->转到特殊->选择空白,然后插入复制的单元格。此操作失败,我收到消息“无法在多个范围选择上执行此操作”。选择单个范围,然后重试“”。我进一步尝试使用录制宏工具尝试VBA,但没有成功。 注意:我有一个更大的集合,类似于范围1,具有完全相同的结构,需要填充

描述数据和基础excel文件的图像

问题和我的尝试

  • 这里有一个名为RealEnter 2的表,我希望把它插入到表1中的空白区域中,这样在集合中它看起来像范围3。李>
  • 我已经尝试复制范围,然后选择范围1,标记空白区域:HOST->查找和选择->转到特殊->选择空白,然后插入复制的单元格。此操作失败,我收到消息“无法在多个范围选择上执行此操作”。选择单个范围,然后重试“”。我进一步尝试使用录制宏工具尝试VBA,但没有成功。
    • 注意:我有一个更大的集合,类似于范围1,具有完全相同的结构,需要填充空白单元格,否则我当然会手动完成

    • 有两种方法可以实现您的目标。如果必须重复执行,则可以使用VBA执行这两项操作

    • 将范围1和范围2放在单独的图纸上
    • 删除其各自工作表中范围1和范围2中的所有空行
    • 然后复制范围1,然后复制范围2以进行聚合
    • (这不会填补空白,但会将它们聚合在一起,然后您可以轻松地筛选或透视表数据)

      如果你想以一种复杂的方式进行,你必须

    • 循环查看Range 1数据并记录所有空行
    • 循环范围2数据并记录有多少条记录
    • 循环范围2,剪切每行并粘贴范围1中记录的空行
    • 如果范围2中有更多的数据行,请将多余的数据放在范围1之下
    • 如果范围2中的数据行较少,则抛出错误或删除范围1中的其他空行
    • (这需要比方法1多一点思考和逻辑,但它会像您最初要求的那样填补空白)

      以下是一些让您开始学习的内容:

      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