我有一本工作簿要做“聪明”--关于我的开支的图表。它已经运行了一年,现在有很多图表和费用。Excel现在每当我更改任何东西或打开工作簿时都会抛出一个资源不足的错误。问题是,我有很多资源,而且几乎不使用其中任何一种资源。
Win8 64bit w/ 8 core CPU and 32GB of ram
Office 2013 64bit
我有两张纸,第一张叫做费用,有三栏日期,描述,金额和大约1500行的数据。第二张纸有很多公式(大约500个),它们都是相同的,目的是“在描述匹配-some穿针的日期X和Y之间进行所有费用之和”。我的公式是:
=
ABS(
SUMPRODUCT(
--(Expenses!A:A >= DATE(2011,12,1)),
--(Expenses!A:A < DATE(2012,1,1)),
--(ISNUMBER(FIND(C50,Expenses!B:B))),
Expenses!C:C
)
)
我能给Excel提供更多的资源吗?(我很高兴它使用了我所有的内存,并且占用了我的CPU几分钟)。
有更有效的方法我可以做这个公式吗?
我知道这个公式正在创建一个大网格,并用它掩蔽我的费用列表,并且每个公式都必须创建这个网格。我应该创建一个宏来更有效地完成这个任务吗?如果我有一个宏,我想从一个单元格调用它,就像
=sumExpenses(<startDate>, <endDate>, <needle>)
这有可能吗?
谢谢。
发布于 2013-03-11 01:44:01
我尝试创建一个函数,希望它能够复制VBA中当前公式的功能,但有一些不同之处。由于我不知道您的第二个工作表的具体内容,缓存可能根本没有帮助。
如果您的第二个工作表对所有对sumExpenses
的调用使用相同的日期范围,那么它应该会更快一些,因为它预先计算了第一次传递中的所有内容,如果您的日期范围在整个过程中都发生了变化,那么它只是做了大量的工作而毫无意义。
Public Cache As Object
Public CacheKey As String
Public Function sumExpenses(ByVal dS As Date, ByVal dE As Date, ByVal sN As String) As Variant
Dim Key As String
Key = Day(dS) & "-" & Month(dS) & "-" & Year(dS) & "_" & Day(dE) & "-" & Month(dE) & "-" & Year(dE)
If CacheKey = Key Then
If Not Cache Is Nothing Then
If Cache.Exists(sN) Then
sumExpenses = Cache(sN)
Exit Function
End If
Set Cache = Nothing
End If
End If
CacheKey = Key
Set Cache = CreateObject("Scripting.Dictionary")
Dim Expenses As Worksheet
Dim Row As Integer
Dim Item As String
Set Expenses = ThisWorkbook.Worksheets("Expenses")
Row = 1
While (Not Expenses.Cells(Row, 1) = "")
If Expenses.Cells(Row, 1).Value > dS And Expenses.Cells(Row, 1).Value < dE Then
Item = Expenses.Cells(Row, 2).Value
If Cache.Exists(Item) Then
Cache(Item) = Cache(Item) + Expenses.Cells(Row, 3).Value
Else
Cache.Add Item, Expenses.Cells(Row, 3).Value
End If
End If
Row = Row + 1
Wend
If Cache.Exists(sN) Then
sumExpenses = Cache(sN)
Else
sumExpenses = CVErr(xlErrNA)
End If
End Function
Public Sub resetCache()
Set Cache = Nothing
CacheKey = ""
End Sub
发布于 2015-07-22 20:50:57
我也遇到了一个类似的问题,有几个数组公式下降了大约150行,我得到了这个错误,这让我很困惑,因为真的没有那么多的公式需要计算。我联系了我们的IT人员,他解释了以下内容,其中一些我理解,但大多数我不理解:
通常情况下,当计算机试图处理大量数据时,它使用多线程计算,其中它使用计算机欺骗自己认为自己拥有的所有8个处理器。当关闭多线程计算时,计算机不会抛出“Excel耗尽资源.”错误。
要关闭多线程计算,请进入Excel工作簿中的“File”选项卡并选择“Options”。在显示的框的右侧,选择“高级”并向下滚动到“公式”标题。在这个标题下有一个复选框,上面写着“启用多线程计算”。取消它,然后选择'OK‘并重新计算您的公式。
发布于 2016-07-17 05:55:02
这可能有很多原因。我只希望Excel能告诉我们,在这段时间里,哪一个(或更多的)“普通嫌疑犯”犯了占用内存的罪行。
也要找
..。按这个顺序
当你在那里的时候,检查一下
https://stackoverflow.com/questions/15329199
复制相似问题