Tag: 优化

在Excel中使用VBA循环遍历

我有一段代码花了太长的时间来处理一些文件。 更小的文件(更less的数据行)工作正常,但一旦我达到约150-300,它开始变慢,(有时我认为整个过程实际上只是挂起),我必须有时运行这个文件与最多6000。 我想为.FormulaR1C1中的一些单元插入VLookup()函数。 我知道我可以使用.Range("J2:J" & MaxRow)一次设置整个范围。 但是,我正在循环一个单元格块来检查这些单元格的值。 如果他们是空的, 那么我想申请的公式。 如果这些单元格已经有了值,那么我不想改变它们,所以我不认为整个范围选项对我来说是合适的(至less我没有把它弄清楚)。 Private Sub PullMIAFinalizedData(NewMIARep As Worksheet, MaxRow As Long, wkbFinalized As Workbook) Dim wksFinalized As Worksheet Dim lCount As Long Dim sVLookupJBlock As String Dim sVLookupKBlock As String Application.Calculation = xlCalculationManual sVLookupJBlock = "=IF(ISERROR(" & _ "VLOOKUP(RC1,'[" & wkbFinalized.Name & "]" & wksFinalized.Name & "'!C1:C13,13,FALSE))," & […]

优化超过100,000行的循环代码

我有一个超过10万行和几列的数据集。 我试图实现的是在另一个范围内查找值,如果它匹配,把它放在旁边的列。 如果有多个匹配的值,则插入另一行并放入。 然而,代码需要永久加载和我的Excel最终崩溃…帮助! Sub Splitter_Step1a() Dim RefSheet As Worksheet Set RefSheet = ActiveWorkbook.Worksheets("RefList") Dim ProdSheet As Worksheet Set ProdSheet = ActiveWorkbook.Worksheets("Products") Dim Brand, LastBrand, BrandList As Range Set LastBrand = RefSheet.Range("A1").End(xlDown) Set BrandList = RefSheet.Range(RefSheet.Range("A1"), LastBrand) Dim Reference, ReferenceList, LastReference As Range Set LastReference = ProdSheet.Range("C2").End(xlDown) Set ReferenceList = ProdSheet.Range(ProdSheet.Range("C2"), LastReference) Dim BrandInList As […]

有没有办法来防止在VBAdynamic数组中的额外元素?

正如标题所述,有没有办法阻止额外的元素显示在VBAdynamic数组中,当他们是非零基础? 例如,使用类似于以下的代码时: While Cells(ndx, 1).Value <> vbNullString ReDim Preserve data(1 To (UBound(data) + 1)) ndx = ndx + 1 Wend 处理结束时,您有一个额外的空数组元素。 虽然这可以通过以下方式消除: ReDim Preserve data(1 To (UBound(data) – 1)) 这似乎不是解决这个问题的最好方法。 因此,是否有办法防止多余的元素被创build呢? 最好是在循环内部不需要额外的逻辑。

在R中,如何find最优variables来最大化或最小化两个数据集之间的相关性

我可以在Excel中轻松完成这个任务,但是我的数据集太大了。 在Excel中,我会使用求解器。 Column A,B = random numbers Column C = random number (which I want to maximize the correlation to) Column D = A*x+B*y where x,y are coefficients resulted from solver 在一个单独的单元格中,我将有相关(C,D) 在求解器中,通过改变variablesx,y和设置一定的约束条件(比如x,y都必须是正数),将correl(C,D)的目标设置为max。 我怎样才能做到这一点在R? 谢谢您的帮助。

我需要Java解算器库作为Excel求解器工具的优化工作

我刚刚开始使用Java构build模型,对PV模块进行一些分析。 我目前正在为一个光伏组件,一个二极pipe模型写一个类。 我需要使用“f(电stream)=电压”等几点数据才能find方程中的所有因子。 Excel确实有这个function,叫做“使用Excel解算器工具进行优化”。 强烈推荐这个function有什么好的库吗? 我尝试过“巧克力解算器”,但是它不支持许多math函数的约束。 例如,当a或b是双精度时,它不允许使用a / b。 如果有人能帮我一个忙,我会很感激。

在VBA中需要帮助优化SUMIFS

我几个月来一直在使用这个网站,以帮助我开始我的早期编程生涯,这是我在这里的第一篇文章。 我很抱歉,如果我昨天在search论坛时错过了这个问题。 我有一个电子表格,大约有6000个活动的Sumif引用一个500,000行以上的表格。 你可以想像,这花了一些时间来计算。 我已经将它们写入VBA,所以它们只在用户select时才计算。 但是,如此多的代码,代码需要大约3-5分钟才能完成。 我正在寻找方法来加快这一点,以获得更好的最终用户体验。 我会发布如何执行下面的sumifs。 只是在某些情况下,这是在同一组用户上执行两次总和,但有一个不同的标准。 如果我遗漏了任何有关的信息,请告诉我。 For i = 1 To 12 Range("Emp_Utility").Offset(1, i).Activate Do Until Cells(ActiveCell.Row, 2) = "" ActiveCell.Value = Application.WorksheetFunction.SumIfs(Hrs, Emp, Cells(ActiveCell.Row, 2), Y, Cells(4, ActiveCell.Column), M, Cells(3, ActiveCell.Column)) ActiveCell.Offset(1, 0).Activate Loop Next i For a = 1 To 12 Range("Emp_Billable").Offset(1, a).Activate Do Until Cells(ActiveCell.Row, 30) = "" […]

重复使用公式驱动的结果在Excel中的if语句

= IFERROR(IF((INDEX(named range1,MATCH(named range2&A1,named range3,0)))<>“”,INDEX(命名为range1,MATCH(命名为range2&A1,命名为range3,0),“ – ”), “”) 在这个公式中我试图垂直查找一个值使用索引匹配,并检查它在一个if语句中的空白值。如果它不是空白,我使用非空值设置它在给定的单元格中。 我怎样才能优化我的公式,以减less在Excel中的性能开销。 我不想通过将结果存储在variables中来使用vba

优化计算产品的数组函数

我有以下数组公式计算特定股票在特定年份的收益: =IF(AND(NOT(E2=E3),H2=H3),PRODUCT(IF($E$2:E2=E1,$O$2:O2,""))-1,"") 但是,因为我有500,000行条目,当我打到行50,000时,我从Excel中得到一个错误,说明我的机器没有足够的资源来计算值。 我应该如何优化function,使其实际工作? E栏是指一个计数器来检查股票的年份和股票价值。 如果年份与以前的值不同,函数将输出1 。 当股票名称改变时,它也会输出1 。 例如,你可能有1993年的价值,下一个价值是1993年,但是股票的名字是不同的,所以显然应该重新计算回报,我用1作为表示。 然后我有另外一列累计1秒。 当遇到前一列中的新的1时,我在运行总数中加1 ,并保持打印相同的数字,直到我观察到新数字。 这使得可能使用数组函数,如果包含运行总值(E列)的列有一个不同于以前的我使用我的捻在SUMIF但带有PRODUCT IF的值。 这将返回所有相应的正在运行的总E列值的乘积。

优化algorithm(嵌套For … Next循环)

我写了下面这个程序,它从XYZ点列表(相应的列2 3和4)中提取给定距离和给定高程差的点对。 问题是它包含一个嵌套for循环,我相信会造成太多的迭代,因此对于大量的点(> 1000),例程会花费不合理的时间来完成。 我能做些什么来优化这个algorithm? 问候, 胺 Sub Test1() Columns("H:K").Select Selection.ClearContents c3 = 2 For c2 = 2 To 10 For c1 = c2 + 1 To 10 If Sqr((Cells(c2, 2) – Cells(c1, 2)) ^ 2 + (Cells(c2, 3) – Cells(c1, 3)) ^ 2) = 1 Then If Abs(Cells(c1, 4) – Cells(c2, 4)) = 10 […]

优化/精简Excel VBA以删除空列

我一直在使用下面的代码从jonhaus.hubpages.com删除我有空的列。 'Delete empty columns Dim c As Integer c = ActiveSheet.Cells.SpecialCells(xlLastCell).Column Do Until c = 0 If WorksheetFunction.CountA(Columns(c)) = 0 Then Columns(c).Delete End If c = c – 1 Loop 然而,正如我一直在写VBA,它变得有点臃肿和缓慢…我试图通过消除循环,复制/粘贴等优化和简化我的代码。 你们是否对代码做了相同的build议(删除整个静态列)而不需要循环“Do Until / If / End If / Loop”语句? 参考资料: http : //jonhaus.hubpages.com/hub/Excel-VBA-Delete-Blank-Blank-Columns http://www.ozgrid.com/VBA/SpeedingUpVBACode.htm