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

时间:2017-10-25 09:22:02

标签: arrays excel vba excel-vba combobox

上下文

在同一位置有两个excel.workbooks:数据库和仪表板。虽然database.workbook拥有与我管理的客户端一样多的选项卡,但dashboard.workbook包含的报表数量与报表一样多。

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

在每个标签/报告中,有第二个组合框,允许您选择客户端,使用所选客户端的数据填充报告。

报告

数据库中的信息如下所示: 日期|设备|集团|分组| metric1 | metric2 | metric3 |。等

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

问题

1)目前该组显示如下:

props

  • 组合框将其值打印到范围(“C8”)。通过嵌套的ifs结构,公式标识客户端,然后从所选客户端选项卡(从database.workbook)中提取唯一的组列表。
  • 一个问题是它非常混乱且难以升级(我获得的客户越多,其复杂性呈指数级增长)。我打赌有最简单的方法(也许是VBA?)。
  • 它可能会非常慢,我们获得的“群组”越多,数据库中记录的天数越多,速度就越慢。

2)拉取数据 大多数数据都可以通过像这样的数组公式来完成:

=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))))),"")

  • 它将的所有Metric1与C20,C21,22,23相加(在c20:xx范围内,我们有第一个公式拉动组列表。
  • 我还没有添加嵌套的ifs。在另外5列中进行此操作会很麻烦。再次非常难以升级。
  • 这可能非常慢。更改客户端意味着等待2或3分钟来处理阵列。

结论

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

0 个答案:

没有答案