假设我有 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