【问题标题】:Copy and Paste Row and Columns(with formulas) and Paste down to the last row in VBA复制并粘贴行和列(使用公式)并粘贴到 VBA 中的最后一行
【发布时间】:2016-05-20 08:42:58
【问题描述】:

首先,我有多个带有值和公式的工作表。我使用 VBA 来提取干净的数据,效果很好。例如“Sheet1”,从第 3 行到第 100 行和第 H 列到 K 是我有值的地方。现在,我在第 3 行和 B 到 F 列有一个公式,该公式与 H 到 K 列上的值相关联。我在复制第 3 行并将公式粘贴到工作表的最后一行时遇到问题。

其次,我有 12 个工作表。它们具有与“表 1”不同的值和公式。但我希望将相同的操作应用于所有 12 张表格,例如“表格 1”。

这是我用来复制和粘贴值的代码(但它只复制一行。我希望它转到工作表底部):

Sub formula_format (data_sheet As String, row_num_start As Integer, column_num_start As Integer, row_num_end As Integer, column_num_end As Integer)

Sheets(data_sheet).Select

 For Row = row_num_start To row_num_end

    If Cells(Row, column_num_start).Value2 = "" Then

       Range(Cells(Row - 1, column_num_start), Cells(Row - 1, column_num_end)).Copy
       ActiveSheet.Cells(Row, column_num_start).Select
       ActiveCell.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
       ActiveCell.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

       Exit For

    End If

Next Row

End Sub

此代码复制第一行并将其粘贴到下一行。我需要继续到最后一行。

提前致谢。对不起,很长的帖子。这是我的第一篇文章!

【问题讨论】:

  • Exit For 块内使用 Exit For 代码将在第一次行和列 = "" 时退出 For 循环,从而停止代码。所以,我的第一个建议是删除Exit For
  • 谢谢斯科特!我已经按照你的建议做了。它有效(这让我很高兴,因为我已经研究这个问题 2 天了)!!

标签: vba excel


【解决方案1】:

除了我上面的评论之外,我还想提供一种替代方法,如果我正确理解您要执行的操作,该方法更简单、更快且更易于维护(在给定长度的列中复制公式)行)。

Sub formula_format(data_sheet As String, row_num_start As Integer, column_num_start As Integer, row_num_end As Integer, column_num_end As Integer)

With Sheets(data_sheet)

    .Range(.Cells(row_num_start, column_num_start), .Cells(row_num_start, column_num_end)).AutoFill _
        Destination:=.Range(.Cells(row_num_start, column_num_start), .Cells(row_num_end, column_num_end))

End With


End Sub

【讨论】:

  • 你是对的!通过删除我的 IF 语句中的“退出”。它可以工作,但速度很慢。所以,我尝试了你的新代码。但由于某种原因,什么也没发生。
  • @JamesJordan 你确定你传递了列和行的右端和开始数字吗?以及正确的工作表名称?
  • 右端和开始的数字是固定的,因为我将使用这个模块来处理所有其他的工作表。也许它没有调用有问题的工作表。但如果是这样的话,你的第一个解决方案也不会奏效。
  • @JamesJordan - 很难说。我对其进行了测试,效果很好。你是对的,你需要确保正确的工作表通过。如果您逐行执行,您可以看到分配给哪些变量以避免填充,您可以使用.Select 语句等进行测试,以确保识别的范围是正确的。
  • @ScottHoltzmann 你简直就是明星!!你又是对的。出于某种原因,必须复制前 2 行才能使代码正常工作。它粘贴了从第 5 行开始的所有其他行。杰出的!有没有我可以去的来源。我想改进我的 VBA Excel。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多