Excel 使用VBA检查下面的单元格是否为空

Excel 使用VBA检查下面的单元格是否为空,excel,vba,Excel,Vba,如何在Excel中使用VBA检查下面的单元格是否为空? 我想对特定范围内的所有值求和,但仅当下面的单元格不为空时 VBA或其他方式是否可能实现这一点 例如: 4 2 3 2 1 2 3 1 总和为:4+3+2=9。我推荐一个公式 公式 =SUMPRODUCT((A1:E1)*(A2:E2<>"")) Option Explicit Sub Sample() Dim rng As Range Dim Cl As Range Dim tot As Lon

如何在Excel中使用VBA检查下面的单元格是否为空? 我想对特定范围内的所有值求和,但仅当下面的单元格不为空时

VBA或其他方式是否可能实现这一点

例如:

4 2 3 2 1
2   3 1

总和为:4+3+2=9。

我推荐一个公式

公式

=SUMPRODUCT((A1:E1)*(A2:E2<>""))
Option Explicit

Sub Sample()
    Dim rng As Range
    Dim Cl As Range
    Dim tot As Long

    Set rng = Range("A1:F1")

    For Each Cl In rng
        If Len(Trim(Cl.Offset(1))) <> 0 Then tot = tot + Cl.Value
    Next

    Debug.Print tot
End Sub
=SUMPRODUCT((A1:E1)*(A2:E2“”)
快照

如果你还想要VBA的话

VBA

=SUMPRODUCT((A1:E1)*(A2:E2<>""))
Option Explicit

Sub Sample()
    Dim rng As Range
    Dim Cl As Range
    Dim tot As Long

    Set rng = Range("A1:F1")

    For Each Cl In rng
        If Len(Trim(Cl.Offset(1))) <> 0 Then tot = tot + Cl.Value
    Next

    Debug.Print tot
End Sub
选项显式
子样本()
变暗rng As范围
Dim Cl As范围
昏昏欲睡
设置rng=范围(“A1:F1”)
对于rng中的每个Cl
如果Len(修剪(Cl.Offset(1))为0,则tot=tot+Cl.值
下一个
调试。打印tot
端接头
事实上,在VBA中可以有许多版本。您也可以计算上述公式。比如说

Option Explicit

Sub Sample()
    Debug.Print Evaluate("=SUMPRODUCT((A1:E1)*(A2:E2<>""""))")
End Sub
选项显式
子样本()
Debug.Print Evaluate(“=SUMPRODUCT((A1:E1)*(A2:E2)”)
端接头
试试这个简单的代码

If IsEmpty(ActiveCell.Offset(1, 0)) Then
'your code here
End If

当数据从其他数据库导出时,我在使用“IsEmpty”时遇到了一些问题。这是我开发的功能:

Function IsVacant(TheVar As Variant) As Boolean
  'LeandraG 2010

  IsVacant = False

  If IsEmpty(TheVar) Then IsVacant = True
  If Trim(TheVar) = "" Then IsVacant = True
  If Trim(TheVar) = "'" Then IsVacant = True


End Function

@Siddarth Rout,非常好的方法。@Cherrun:“代表
不等于
。所以我只是简单地考虑了A2:E2范围内不为空的单元格。@Siddharth Rout我同意,SumProduct的巧妙使用,但我认为你误解了cherrun关于“”的问题<代码>A2:E2”“
为每列返回True或False。然后使用
True
False
作为整数。Excel将True视为1,将False视为0。因此,SumProduct是
4*True+2*False+3*True+2*True+1*False
=
4*1+2*0+3*1+2*1+1*0
=
9
。聪明但是,除非你知道布尔数是隐式转换成整数的,否则你是无法理解的。@TonyDallimore:啊!在这种情况下,我误解了这个问题:)@Siddharth Rout。我认为你的回答很漂亮,你展示了我永远不会渴望的知识深度,你在哪里找到时间回答这么多问题,但有时我怀疑你忘记了你比我们其他人领先了多少。然而,即使我对cherrun的真实问题是正确的,也要继续做好工作;你的答案读起来很愉快。