Excel VBA-如何在满足某些条件时清除行的值但保留行中的公式?

Excel VBA-如何在满足某些条件时清除行的值但保留行中的公式?

假设我有 10 组数据集。

我想比较第 1 组数据集的“E”和“G”单元格值。如果“E”单元格值=“G”单元格值,我想清除整行内容,但不清除该行的公式。我想使用同一个文件来计算第 2-10 组数字数据集的结果。

我遇到的问题是,我的代码会清除内容和公式。因此,我无法重新使用第 2 组数据集的文件,格式将永久保留。

应该有一种方法,以便我可以在每次运行宏后保留公式,以便当我输入新的数据集时,我可以计算结果。

总而言之,我需要一个 VBA 代码,这样,如果两个单元格值匹配,整行内容将被清除,但公式将存在,以便对于下一组数据,我可以使用相同的 excel 模板

我使用的代码如下:

Sub ClearAllButFormulas() 工作表("计算").Activate Dim N As Long, i As Long N = Cells(Rows.Count, "E").End(xlUp).Row For i = N To 2 Step -1 如果 Cells(i, "E").Value = Cells(i, "G").Value Then Cells(i, "E").EntireRow. ClearContents End If Next i End Sub

格式化之前 格式化后

答案1

使用表格。

考虑以下表格

Fruit   Color
Bananas Yellow
Apples  Red

突出显示所有六个单元格,然后单击功能区中的“插入 - 表格”。

然后在颜色后的列中,您可以添加一个公式

[@Fruit] & " are " & LOWER([@Color]) & "."

只要整列都是相同的公式(例如,您没有编辑该列以手动添加值,而是更改公式),那么公式将自动复制到整列。在内部,无论表中有多少行,公式都将每列存储一次!

基于表格的公式备忘单:

  • [列] 指该列中的所有数据单元格。
  • [[列标题]] 是相同的,只不过出于某种原因,列标题中的空格需要额外的方括号。别担心……只需单击,Excel 就会找出答案。
  • [@Column] 指的是“Column”列中的单元格值对于当前行

因此,如果您的表格中有一列“成本”,那么在另一列中您可以有一个“此行的成本是否高于平均值”列,其公式为:

=[@Cost]>AVERAGE([Cost])

要从上一行或下一行获取值,您不能使用单元格引用,除非解除“一个公式适用于整个列”的魔力。相反,请使用OFFSET()。查看某列的成本是否大于前一列的成本将类似于:

=IFERROR([@Cost]>OFFSET([@Cost],-1,0), "")

现在只要你不删除全部表格中的行,您可以删除其中的任何行,如果您添加任何行,公式将自动复制下来。

答案2

您可以根据行数进行迭代,并根据条件检查值。

代码适用于 Excel 2016 VBA - 例如

For counter = 1 To 10


    If Range("E" & counter).Value = Range("G" & counter).Value Then
                    
                        Rows(counter & ":" & counter).Clearcontents
                        
                        
                    End If

Next counter

相关内容