Excel公式/VBA代码,该代码将仅对包含值的单元格求和(跳过任何包含公式的单元格)?
是否存在只对包含值的单元格求和的公式(而不是带公式的单元格)?例如,在电子表格的A列中,输入的值和返回值的公式混合在一起。如果我在最后使用一个求和公式,它将自然地对所选数组中的所有数字求和,而不管它们是输入值还是由公式生成的值。(可能是某种SUMIF&VBA代码组合…)如果我的描述不清楚,这里是一个假设的电子表格设置,我需要以下公式:Excel公式/VBA代码,该代码将仅对包含值的单元格求和(跳过任何包含公式的单元格)?,excel,conditional,sum,excel-formula,vba,Excel,Conditional,Sum,Excel Formula,Vba,是否存在只对包含值的单元格求和的公式(而不是带公式的单元格)?例如,在电子表格的A列中,输入的值和返回值的公式混合在一起。如果我在最后使用一个求和公式,它将自然地对所选数组中的所有数字求和,而不管它们是输入值还是由公式生成的值。(可能是某种SUMIF&VBA代码组合…)如果我的描述不清楚,这里是一个假设的电子表格设置,我需要以下公式: A 1| 400 2| =SUM(B1:B3) 3| =AVERAGE(B1:B3) 4| 200 5| 100 6| =COUNT(B1
A
1| 400
2| =SUM(B1:B3)
3| =AVERAGE(B1:B3)
4| 200
5| 100
6| =COUNT(B1:B3)
7| I want the sum Formula in this cell (A7) to return the value 700 (the sum of the values above).
有一种方法,你可以和SUMIF结合起来做你想做的事。有一种方法,你可以和SUMIF结合起来做你想做的事。这会管用的,尽管感觉有些马虎,肯定有更好的方法。通过一点额外的工作,您可以将其制作成UDF
Sub SumNumbersOnly()
Dim sumAllCells As Long
Dim sumFormulaCells As Long
Dim sumNumberCells As Long
sumAllCells = Application.Sum(Selection)
sumFormulaCells = Application.Sum(Selection.Cells.SpecialCells(xlCellTypeFormulas))
sumNumberCells = sumAllCells - sumFormulaCells
Debug.Print sumNumberCells //Returns 700 (400 + 200 + 100 as in your example)
End Sub
这会起作用的,尽管不知何故它感觉有些草率,而且肯定有更好的方法。通过一点额外的工作,您可以将其制作成UDF
Sub SumNumbersOnly()
Dim sumAllCells As Long
Dim sumFormulaCells As Long
Dim sumNumberCells As Long
sumAllCells = Application.Sum(Selection)
sumFormulaCells = Application.Sum(Selection.Cells.SpecialCells(xlCellTypeFormulas))
sumNumberCells = sumAllCells - sumFormulaCells
Debug.Print sumNumberCells //Returns 700 (400 + 200 + 100 as in your example)
End Sub
澄清马丁的回答 无法知道单元格是否包含使用Excel公式的公式 您必须定义一个UDF(用户定义函数)。 在本教程中:
Public Function isformula(rng As Range) As Variant()
Dim aryIn() As Variant
Dim a As Variant
Dim i As Integer, j As Integer
Dim temp() As Variant
aryIn = rng.Value
ReDim temp(LBound(aryIn) To UBound(aryIn), _
LBound(aryIn, 2) To UBound(aryIn, 2))
For i = LBound(aryIn) To UBound(aryIn)
For j = LBound(aryIn, 2) To UBound(aryIn, 2)
If (Left(rng(i, j).Formula, 1) = "=") Then
temp(i, j) = True
Else
temp(i, j) = False
End If
Next j
Next i
isformula = temp()
End Function
{=SUM(IF(NOT(isformula(A1:A6)),A1:A6,0))}
然后您可以在代码中使用它。比如:
Public Function isformula(rng As Range) As Variant()
Dim aryIn() As Variant
Dim a As Variant
Dim i As Integer, j As Integer
Dim temp() As Variant
aryIn = rng.Value
ReDim temp(LBound(aryIn) To UBound(aryIn), _
LBound(aryIn, 2) To UBound(aryIn, 2))
For i = LBound(aryIn) To UBound(aryIn)
For j = LBound(aryIn, 2) To UBound(aryIn, 2)
If (Left(rng(i, j).Formula, 1) = "=") Then
temp(i, j) = True
Else
temp(i, j) = False
End If
Next j
Next i
isformula = temp()
End Function
{=SUM(IF(NOT(isformula(A1:A6)),A1:A6,0))}
其中大括号{}表示数组公式(通过Ctrl-Shift-Enter输入)
嗯 来澄清马丁的答案 无法知道单元格是否包含使用Excel公式的公式 您必须定义一个UDF(用户定义函数)。 在本教程中:
Public Function isformula(rng As Range) As Variant()
Dim aryIn() As Variant
Dim a As Variant
Dim i As Integer, j As Integer
Dim temp() As Variant
aryIn = rng.Value
ReDim temp(LBound(aryIn) To UBound(aryIn), _
LBound(aryIn, 2) To UBound(aryIn, 2))
For i = LBound(aryIn) To UBound(aryIn)
For j = LBound(aryIn, 2) To UBound(aryIn, 2)
If (Left(rng(i, j).Formula, 1) = "=") Then
temp(i, j) = True
Else
temp(i, j) = False
End If
Next j
Next i
isformula = temp()
End Function
{=SUM(IF(NOT(isformula(A1:A6)),A1:A6,0))}
然后您可以在代码中使用它。比如:
Public Function isformula(rng As Range) As Variant()
Dim aryIn() As Variant
Dim a As Variant
Dim i As Integer, j As Integer
Dim temp() As Variant
aryIn = rng.Value
ReDim temp(LBound(aryIn) To UBound(aryIn), _
LBound(aryIn, 2) To UBound(aryIn, 2))
For i = LBound(aryIn) To UBound(aryIn)
For j = LBound(aryIn, 2) To UBound(aryIn, 2)
If (Left(rng(i, j).Formula, 1) = "=") Then
temp(i, j) = True
Else
temp(i, j) = False
End If
Next j
Next i
isformula = temp()
End Function
{=SUM(IF(NOT(isformula(A1:A6)),A1:A6,0))}
其中大括号{}表示数组公式(通过Ctrl-Shift-Enter输入)
嗯 如果对所有函数都使用小计,则可以这样做。小计将忽略该范围内的任何其他小计函数。在A2中
=SUBTOTAL(9,B1:B3)
在A3中
在A6中
在A7中
A7将是700(我想这就是你的意思)。如果您的公式不是小计中的选项,那么它将不起作用。如果您对所有函数都使用小计,您可以这样做。小计将忽略该范围内的任何其他小计函数。在A2中
=SUBTOTAL(9,B1:B3)
在A3中
在A6中
在A7中
A7将是700(我想这就是你的意思)。如果您的公式不是小计中的选项,那么它将不起作用。您必须创建一个自定义项,然后按照Martin的建议使用它。您必须创建一个自定义项,然后按照Martin的建议使用它。如果其他人正在使用此方法,请确保在创建公式时按Ctrl-Shift-Enter键(而不仅仅是Shift-Enter键)的数组公式也可以使用带范围名称的XLM来执行此操作,这样解决方案就不仅仅是UDF了。谢谢。如果其他人正在使用此方法,请确保在创建公式时按Ctrl-Shift-Enter键的数组公式(而不仅仅是Shift-Enter键)也可以使用带范围名称的XLM来执行此操作,因此解决方案不仅仅是UDF。对,400+100+200等于700。我无法添加。:)对,400+100+200等于700。我无法添加。:)