【问题标题】:Replace formula value and blank in cells of a column with zero用零替换列单元格中的公式值和空白
【发布时间】:2020-10-10 02:40:54
【问题描述】:

我想要一个 vba 代码,它会提示输入列名,在提供列名后,它将替换列中具有任何公式或空白为零的所有单元格,并保留其余单元格列原样。

【问题讨论】:

  • vba 新手,所以试图通过从这里和那里查找代码来解决,但没有用。所以我这里没什么。
  • @gautam 您必须发布您尝试过的代码,以便为那些关注此问题的人轻松建议/提供解决方案。请阅读本文档:stackoverflow.com/help/how-to-ask

标签: excel vba


【解决方案1】:

这是最新版本。

  1. 它只在FirstRowLastRow之间运行
  2. 如果公式包含DATE()TODAY(),则不归零。

代码:

    Sub PatchColumn_3()
        Dim FirstRow As String, LastRow As String
        Dim rng As Range, Cell As Range, v As String
        Dim s As String, FormulaCells As Range, BlankCells As Range
        
        FirstRow = "2"
        LastRow = "636"
        
        s = Application.InputBox(prompt:="enter column ID:", Type:=2)
        Set rng = Range(s & FirstRow & ":" & s & LastRow)
        
        On Error Resume Next
            Set FormulaCells = rng.Cells.SpecialCells(xlCellTypeFormulas)
            Set BlankCells = rng.Cells.SpecialCells(xlCellTypeBlanks)
        On Error GoTo 0
        
        If Not FormulaCells Is Nothing Then
            For Each Cell In FormulaCells
                v = Cell.Formula
                If InStr(v, "TODAY") = 0 And InStr(v, "DATE") = 0 Then Cell.Value = 0
            Next Cell
        End If
        
        If Not BlankCells Is Nothing Then BlankCells.Value = 0
     End Sub

【讨论】:

  • 非常感谢您的支持。刚刚有两个想法 1)如果我可以提供行范围,以便它将对工作表的某些需要部分而不是整个工作表执行操作,它将节省时间。 2)它不会用零替换单元格值,而是删除该行。还有一个错误 13 类型不匹配
  • @gautam - 要删除整行,只需将r.Value = 0 替换为r.EntireRow.Delete。但是您必须从底部循环,否则代码将跳过行。如果您使用AutoFilter 并删除可见数据,可能会更快。
  • 感谢 Gmalc。在我的工作表中观察到了更多的东西。如果单元格中有除日期公式以外的任何其他公式,我可以这样做吗,删除该行或用零替换。感谢大家的支持
  • @gautam 要提高宏的速度,请参阅我的EDIT#1
  • 非常感谢,工作非常快。在某些单元格中,有需要保留原样的日期公式。还有一个选项可以强制 vba 在某些行号之间运行,例如在第 2 行到第 636 行之间。再次感谢
猜你喜欢
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多