我应该使用什么 VBA 代码将 Excel 工作表中 A 列到 F 列的数据复制到另一个减去空白单元格的工作表中?

我应该使用什么 VBA 代码将 Excel 工作表中 A 列到 F 列的数据复制到另一个减去空白单元格的工作表中?

我想将报告中的数据复制到新工作表中,并按我想要的方式排列单元格(不幸的是,原始报告无法格式化!)。

我已经将其格式化,但是它会创建数据为 0 的行。

我希望 VBA 代码将单元格从 A:F 列复制到另一个工作表。我看过如何制作单列的示例,但我太菜鸟了,无法为其他列重新创建代码(我希望它看起来漂亮又整洁!)

Sub copynoblanksA()
'
'

'
Dim sh1 As Worksheet, s2 As Worksheet, i As Long
Dim j As Long, N As Long, r1 As Range

    Set sh1 = Sheets("List1")
    Set sh2 = Sheets("Sheet4")

N = sh1.Cells(Rows.Count, "A").End(xlUp).Row
    j = 1

For i = 1 To N
        Set r1 = sh1.Cells(i, "A")
        If r1.Value <> "" Then
            r1.Copy sh2.Cells(j, "A")
            j = j + 1
        End If
    Next i


End Sub

答案1

对于大多数这些简单问题,最佳做法是:

  • 转到“开发人员”选项卡,然后单击“记录宏”(为宏命名)
  • 选择要复制的列,复制到要复制的选项卡
  • 转到“开发人员”选项卡,然后单击“停止录制”
  • 转到编辑器,查看脚本,将其插入到您的代码中,并最终使用您的变量对其进行调整。

要粘贴单元格但不粘贴空单元格,您可以使用以下代码:

Range("A1:A20").SpecialCells(xlCellTypeConstants).Copy Destination:=Sheets("newsheet").Range("A1")

答案2

现在,一个非 VBA 解决方案:

=IFERROR(INDEX($A$1:$A$8,SMALL(IF($B$1:$B$8="0",ROW($B$1:$B$8),999999),ROW(A1))),"")

第一个 Index(A1:A8) 是要移动的数据范围。If 中的 B1:B8 是条件范围。(也就是要设置为 0 的列)。ROW 命令需要为 1:N,其中 N 是总共有多少行。最后一个 ROW 需要是数据所在的位置,并且需要在向下拖动时进行更改。这是一个数组公式,因此您需要按 ctr+shift+enter

相关内容