表Excel VBA中

时间:2019-11-15 09:41:25

标签: excel vba

我正在尝试编写代码,该代码从下表中的H列(相关工作流)中获取经过过滤的标准,然后根据C列(出站/入站)和I列(求和)对G列(Celkovávýševýnosuv EUR)求和。 ),然后按(Spustit)按钮将最终号码放入单元格K3。 我认为它应该像这样工作,我在H列中选择了Criterium,例如Jade&Fountain,它将仅显示包含Jade&Fountain的行,我将按下按钮,并且如果存在,则将仅对那些在I +列中具有Yes的行求和。 I在C列中,它将从总数中减去,如果有O,它将在总数中相加。然后它将在单元格K3中显示总数。 我添加了我编写的代码,它应该可以工作,但是我不确定Do While Cells(i,2).SpecialCells(xlCellTypeVisible).Value <> ""部分中的代码。感谢您的答复。

Sub While_loop()

Dim i As Integer
Dim x As Integer
    i = 3
    x = 0

Do While Cells(i, 2).SpecialCells(xlCellTypeVisible).Value <> ""

    If Cells(i, 9).Value = "Yes" Then

           If Cells(i, 3).Value = "O" Then
           x = x + Cells(i, 7).Value
           End If

           If Cells(i, 3).Value = "I" Then
           x = x - Cells(i, 7).Value
           End If

    End If
    i = i + 1

Loop

Cells(2, 12).Value = x

End Sub

我要参考的表

enter image description here

1 个答案:

答案 0 :(得分:0)

如果需要,您可以在没有VBA的情况下执行此操作,请遵循本教程https://exceljet.net/formula/count-visible-rows-only-with-criteria

尝试使用此功能(假设第3-15行中的数据),关键是SUBTOTAL功能:

=SUMPRODUCT((C3:C15="O")*(I3:I15="Yes")*(SUBTOTAL(109,OFFSET(G3:G15,ROW(G3:G15)-MIN(ROW(G3:G15)),0,1))))

使用您的2条条件得出所有可见行的总和。如果要扣除I:

=SUMPRODUCT((C3:C15="O")*(I3:I15="Yes")*(SUBTOTAL(109,OFFSET(G3:G15,ROW(G3:G15)-MIN(ROW(G3:G15)),0,1))))-SUMPRODUCT((C3:C15="I")*(I3:I15="Yes")*(SUBTOTAL(109,OFFSET(G3:G15,ROW(G3:G15)-MIN(ROW(G3:G15)),0,1))))
相关问题