为可见计数和多个条件创建UDF

时间:2019-05-16 12:06:20

标签: excel vba

当前,我正在处理一个具有多个过滤器栏的数据集,可以选择这些过滤器栏并帮助搜索数据并提供满足其要求的数量。例如。通过选择经理和合作伙伴名称,它会在数据表中的这些行中查找。 我已经做到了,所以它将文本公式的字符串发布到框中,然后将其连接起来,并使用UDF Eval强制执行(由于有很多If和Else语句,因此需要对其进行大量分解。

问题是,作业完成后,不会将其删除,而是将其隐藏。

我如何允许此数据表仅查看可见数据来进行“计数是否”搜索?大概是UDF吗?

范围是6:1000

下面是我所拥有的代码的细分。我需要找到一个函数来使此代码仅在可见的情况下起作用。

我这样做了,因此将文本公式的字符串发布到框中,然后将其连接起来,并使用UDF Eval进行了强制(由于有很多If和Else语句,因此需要对其进行大量分解。

问题是,作业完成后,不会将其删除,而是将其隐藏。

我如何允许此数据表仅查看可见数据来进行“计数是否”搜索?大概是UDF吗?

范围是6:1000

下面是我所拥有的代码的细分。我需要找到一个函数来使此代码仅在可见的情况下起作用。

Sub SetCriteria()

If Sheet8.Range("E6").Value = 1 Then
'The 1 is displayed if there is a value placed in the filter part of the dashboard. If not this value remains 0.

 Sheet8.Range("F6") = "Tank!G6:G1000,Dashboard!C6,"
 'If there is a value in the filter, then the writing for the CountIf formaul is displayed, linking to the criteria.

Else: Sheet8.Range("F6") = "Tank!G6:G1000,""*"","
'If there isn't anything placed in the critieria then a wild card is selected to ensure all option for that catergory are chosen.
End If

If Sheet8.Range("E7").Value = 1 Then
'Same as above, though this time for Task Manager.
    Sheet8.Range("F7") = "Tank!I6:I1000,Dashboard!C7,"
Else: Sheet8.Range("F7") = "Tank!I6:I1000,""*"","
'The two different printed formulas, depending on criteria inclusion
End If


If Sheet8.Range("E8").Value = 1 Then
'Procedure for TAS Consultant
    Sheet8.Range("F8") = "Tank!J6:J1000,Dashboard!C8,"
Else: Sheet8.Range("F8") = "Tank!J6:J1000,""*"","
End If

If Sheet8.Range("E9").Value = 1 Then
'Procedure for Pillar
    Sheet8.Range("F9") = "Tank!H6:H1000,Dashboard!C9)"
Else: Sheet8.Range("F9") = "Tank!H6:H1000,""*"")"
End If

End Sub

编辑:这是我的评估功能

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function

1 个答案:

答案 0 :(得分:0)

在要放入单元格的数组公式下面,(代号Sheet8是我假设的Sheetname Sheet8) 使用Ctrl + Shift + Enter将其关闭

=SUM(SUBTOTAL(3,OFFSET(Tank!G6:G1000,ROW(Tank!G6:G1000)-MIN(ROW(Tank!G6:G1000)),,1))*(IF(Sheet8!E6=1,Tank!G6:G1000=Dashboard!C6,1))*(IF(Sheet8!E9=1,Tank!H6:H1000=Dashboard!C9,1))*(IF(Sheet8!E7=1,Tank!I6:I1000=Dashboard!C7,1))*(IF(Sheet8!E8=1,Tank!J6:J1000=Dashboard!C8)))

此公式代替了Sub setcriteria和Eval函数, 您也可以像以前一样分解它,并将其放入eval函数中。 (不可见的行必须过滤)

但是,当您使用VBA路线时,请看一下循环范围(仅可见行),检查条件并计数是否满足。