Excel可伸缩性和速度问题(VBA,数组和combobox)

上下文

在同一位置有两个Excel工作簿:数据库和仪表板。 尽pipedatabase.workbook具有与我pipe理的客户端一样多的选项卡,但dashboard.workbook具有与报告所需的一样多的选项卡。

在报告(dashboard.worksheets)中导航非常简单。 每个报告都有一个combobox,其中包含每个dashboard.worksheets的名称。 select该combobox上的任何报表隐藏当前工作表/报表并打开所需的报表。

在每个标签/报告中都有第二个combobox,可以让您select一个客户端,用所选客户端的数据填充报告。

那个报告

数据库中的信息如下所示:Date | Device | Group | Subgroup | metric1 | metric2 | metric3 |等。

报告中显示的信息(在我遇到的问题中)如下所示:Group | metric1 | 2 | 3 | …

问题

1)目前该组显示如下:

=IFERROR(LOOKUP(2,1/(COUNTIF($C$17:C18,IF($C$8="Goldsmiths",Client1_GroupName,IF($C$8="Client2",Client2_GroupName,IF($C$8="Client3",Client3_GroupName,IF($C$8="Client4",Client4_GroupName)))))=0),IF($C$8="Client1",Client1_GroupName,IF($C$8="Client2",Client2_GroupName,IF($C$8="Client3",Z2,Client3_GroupName($C$8="Client4",Client4_GroupName))))),"") 

  • combobox将其值input范围(“C8”)。 通过嵌套的ifs结构,公式标识客户端,然后从选定的客户端选项卡(从database.workbook)中提取唯一的组列表。
  • 一个问题是,它非常混乱,难以升级(我得到的客户越多,其复杂性成倍增长)。 我敢打赌,有最简单的方法来做到这一点(也许是VBA?)。
  • 它可能会很慢,我们得到的“团队”越多,logging到数据库中的天数越多,得到的速度就越慢。

2)拉数据大部分拉数据可以通过这样的数组公式完成:

 ={SUM((Client1_GroupName=C20)*Metric1)} 

  • 它将匹配C20,C21,22,23的组的所有Metric1相加(在c20:xx范围内,我们有第一个拉动组列表的列表。
  • 我还没有添加嵌套的ifs。 跨越5个列来完成这将是一件痛苦的事情。 再次很难升级。
  • 这可能非常慢。 这意味着更改客户端意味着等待2到3分钟来处理数组。

结论

我想我正在寻求的是如何面对这个问题的一些build议,其本质是:可扩展性和速度。