【问题标题】:VBA Conditional Copy and Paste In Excel; Large Data SolutionVBA条件复制和粘贴在Excel中;大数据解决方案
【发布时间】:2012-12-17 06:38:52
【问题描述】:

我们每个月都会进行大量数据转储,其中包含大约 14,000 行数据,大约 12 列宽(每个月的条目)。在所有数据的左侧,我添加了一个列,该列使用 LEFT() 函数来获取一个属性代码,该代码标识该行对应的属性(每个属性大约 150 行,大约 100 个属性,因此 15,000 行)。

我们为每个属性都有一个工作表。我们每个月都会使用此数据转储对其进行更新,然后将其发送给经理,以便他们根据我们刚刚添加的数据月份对今年剩余时间进行预测。

我一直在努力寻找一种解决方案来创建比我的前任更高效的模型。他在每张涉及这个巨大数据转储的工作表上进行了 v-lookups 和索引。您可以猜到,该文件的运行速度很慢。

我想到的解决方案可能是一个宏,它从该主工作表复制和粘贴每个属性的数据行,并将其粘贴到各个工作表上(然后删除那里的数据以节省文件空间)。

这样,v-lookups 将是每个工作表的本地文件,并且文件可能会更顺畅地运行(除了运行宏的第一个序列,这可能会占用一些压缩空间)。

我希望对此有所了解,如果解决方案是有效的解决方案,也许会提出有关编码以实现此目标的建议。

非常感谢!

【问题讨论】:

    标签: excel finance vba


    【解决方案1】:

    我发现加快工作簿速度的一件事是透视我的数据,然后查询透视表,而不是使用 vlookups。

    在您的情况下,您可以使用属性 ID/Name 为行标签创建一个数据透视,为列标签创建月份,然后在数据部分中使用您的数据。

    那么您的公式将如下所示:

    =GETPIVOTDATA("value",Sheet1!$B$4,"Property","propertyName","Month","monthName")
    

    这有助于我在 60k 行上使用大量 vlookup。 这确实意味着每次数据更新时都要额外更新数据透视表,但我认为工作簿的速度应该会从中受益。

    显然将数据直接存储在工作表上会更好,但为此编写脚本可能非常乏味且耗时。

    【讨论】:

    • 谢谢 Rick,不幸的是,我不擅长使用数据透视表,但我正在尝试我们的 Occupancy 表,因为它似乎适用。再次非常感谢!
    【解决方案2】:

    我需要电子表格的更多细节来建议大重构,但可以快速完成的事情是使用 VLOOKUP 的多列属性:

    =VLOOKUP(Lookup_value, Table_array, {1, 2, 3}, 0)
    

    上面将返回数组中的第 1、2 和 3 列。您需要将其作为数组公式 CTRL SHIFT ENTER 跨 3 个单元格输入,但如果您有多个使用相同的查找值但返回不同列的查找,则性能会有很大提升。

    【讨论】:

    • 感谢 Phillip,非常酷的解决方案!我不知道这件事。
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    相关资源
    最近更新 更多