【问题标题】:Applying formula to range of cells, then pasting values将公式应用于单元格范围,然后粘贴值
【发布时间】:2019-05-28 17:45:39
【问题描述】:

我需要将公式/函数(DOLLAR 函数)应用于一系列单元格,然后仅剪切和粘贴值。

我有一个标题行,并使用 Find 找到我需要的列。然后对于下面的所有单元格,我想应用 DOLLAR 公式。但是,我的宏末尾的结果需要是这些单元格现在只包含应用公式后的值,而不是公式本身(这是因为我将使用工作表来运行邮件合并,所以它不能有公式)。

我尝试过运行 Do While 和其他剪切/粘贴方法。我只是没有完成它的技能:(

Sub ProjectSummaryAdjustment()

   Workbooks("Project Summary").Activate

   Range("A1",Range("A1").End(xlToRight)).Find("TD Budget Effort").Select

这是我对代码的了解。现在对于下面的所有单元格,我想应用 DOLLAR 公式,然后将值粘贴在那里。我不介意它是否必须剪切并粘贴到第一个空列,然后剪切并粘贴回原始列。

【问题讨论】:

  • 您可以在 VBA 中执行计算,也可以在输入计算后执行Columns(1).value = Columns(1).value
  • 还有与代码相关的非常重要的评论...avoid select/activate wherever possible!
  • 您是要返回一个实际的文本字符串还是将数字格式化为“货币”?
  • @ScottCraner 我正在尝试返回一个实际的文本字符串,但格式看起来像货币

标签: excel vba


【解决方案1】:

首先确保您应该避免选择并激活。然后你可以简单地使用评估来进行转换。您确实需要先将字段设置为文本:

With Workbooks("Project Summary").Worksheets("Sheet1") 'Change to your sheet name
    Dim rng As Range
    Set rng = .Range("A1", .Range("A1").End(xlToRight)).Find("TD Budget Effort")
    'Test to make sure the header was found
    If Not rng Is Nothing Then
        With .Range(.Cells(2, rng.Column), .Cells(.Rows.Count, rng.Column).End(xlUp))
            .NumberFormat = "@"
            .Value = .Parent.Evaluate("index(DOLLAR(" & .Address & "),)")
        End With
    End If
End With

【讨论】:

  • 非常感谢,斯科特。那工作得很好。就一个问题。如何去掉小数点后两位?
  • .Value = .Parent.Evaluate("index(DOLLAR(" & .Address & ",0),)")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2021-03-18
相关资源
最近更新 更多