【问题标题】:Copy values to a sheet containing formulas without formulas being removed将值复制到包含公式的工作表而不删除公式
【发布时间】:2018-05-30 06:25:19
【问题描述】:

我有两个工作表:Sheet1 和 Sheet2。 Sheet1 有原始数据(没有任何公式),Sheet2 在某些单元格中有公式。是否可以在不从 Sheet2 中删除公式的情况下将值从 Sheet1 复制到 Sheet2?

我正在使用以下代码将值从 sheet1 复制到 sheet2。复制值后,Sheet2 中的公式将被删除。

i = 2

With Sheets(1)
   'loop column A 
   For Each Cell In .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
      .Rows(Cell.Row).Copy Destination:=Sheets(2).Range("A" & i)
      i = i + 1
   Next Cell
End With

【问题讨论】:

  • 公式应该不是问题。覆盖似乎是个问题。如果您不想用公式覆盖单元格,请添加一个测试,表明正在写入的单元格没有带有 HasFormula 或 Left(cell.value,1) = "=" 的公式
  • 您还复制了一整行,所以您是否希望测试目标行中的任何单元格是否有公式?
  • Sheet2 总是空的,只包含一堆公式。它应该像计算器一样工作。它获取输入并产生输出,然后为新的值集进行清理。我希望公式留在那里。但是代码删除了公式。
  • 1) 工作表 2 因此不是空的(很抱歉是迂腐的)2) 为什么不简单地选择输出到没有公式的不同范围?
  • 1) 抱歉,我的意思是其中没有值,只有公式。 2)如果它跳到某个随机的地方,它看起来就不是很专业。 ;-) 我希望一切都到位。但如果没有办法……我应该接受你的建议。

标签: vba excel


【解决方案1】:

此代码不会复制粘贴整行,而是会遍历原始数据行中的每个单元格,并且仅在另一张表的同一单元格中不存在公式时复制粘贴值:

Sub TestForFormula()

Dim X As Long
Dim CL As Range, RNG As Range

For X = 2 To Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
    Set RNG = ActiveSheet.Range(Cells(X, 1), Cells(X, ActiveSheet.Cells(X, Columns.Count).End(xlToLeft).Column))
    For Each CL In RNG
        If Sheets(2).Cells(X, CL.Column).HasFormula = False Then
            Sheets(2).Cells(X, CL.Column).Value = Sheets(1).Cells(X, CL.Column).Value
        End If
    Next CL
Next X

End Sub

【讨论】:

  • 谢谢。我可能会结合您的代码和@QHarr 建议。这应该让我找到解决方案的正确方向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多