Tag: 优化

在vba中创build一个全局variables数组数组,并转换为一个表

正在寻找解决scheme,但无法find一个很好的解释。 我目前有代码,每次迭代返回一个电子表格的行数组。 在最后一次迭代中,将所有行数据复制并粘贴到另一个表单中。 我知道,如果我可以制作一个庞大的arrays,每个项目是一组数据,然后转置它,而不需要复制和粘贴/操作单元格,那么速度会快一百万倍。 我怎样才能做到这一点? 对我来说更大的问题是,每个主要迭代都是基于全局variables,而不是子本身内的循环。 这是因为用于为每个迭代创build数组的表单数据需要时间加载到表单中。 这是我的子代码。 到目前为止,你可以看到,在每一个写入数据的范围(“A”和POS),然后增加了工作表本身的计数器。 一旦子完成,全局variables迭代,并再次假设…所以简而言之,数组或数组将需要是一个全局variables * 在任何人看起来和说F之前,我没有看所有的代码,唯一重要的部分是真的像最后10行…其他一切只是为了清晰起见。 Sub find_patternRevised() Application.ScreenUpdating = False Sheets("SingleEquityHistoryHedge").Activate Range("A47:M47").Clear Dim strt_pt() As Long Dim end_pt() As Long Dim i As Long Dim j As Long Dim k As Long Dim y As Long Dim pos As Long pos = Range("F1").value k = 0 For j […]

复制粘贴macros是超慢| 需要优化

下面是我的VBA代码是超慢(需要大约3分钟复制和粘贴三个新行!)。 数据库本身包含大约10,000行,我不确定是否会导致性能下降,或者代码本身是否有效。 这当然与硬件钻机无关。 Sub AutomateUserResearch() Dim rowlast As Long 'letzte benutze Zeile Dim rowlastexport As Long 'letzte benutze Zeile auf "database" + 1 addieren Dim rowlastexportfinal As Long 'letzte benutze Zeile auf "database" nach Hinzufügen neuer Zeilen finden Dim NewRecords As String Dim i As Integer Application.ScreenUpdating = False Calculate NewRecords = ThisWorkbook.Worksheets("checklist").Range("NewRecordsCheck").Value With Sheets("csv_import") […]

优化SUMIFS公式

我基本上有一个超长的公式,我需要缩小。 所以基本上我有一个数据透视表,允许一个经理select两个工作地点或两个工作地点和一到十二个月。 这是公式的外观。 唯一的变化是细胞I和J->K 我需要将其设置为数组吗? = SUMIFS('owssvr(1)'!C:C,'owssvr(1)'!$ IR:$ IR,$ I $ 3,'owssvr(1)'!$ IQ:$ IQ,'Summary KPI'!$ (1)'$ IQ:$ IQ,'总结KPI(1)'SUMIFS('owssvr(1)'!C:C,'owssvr(1)'!$ IR:$ IR,$ I $ 4,'owssvr '!$Ĵ$ 2)+ SUMIFS(' owssvr(1) 'C:C,' owssvr(1) '$ IR:!$ IR,$ 5 I $,' owssvr(1)'$ IQ:$!IQ, '$摘要KPI'$ J $ 2)+ SUMIFS('owssvr(1)'!C:C,'owssvr(1)'!$ IR:$ IR,$ I $ 6,'owssvr(1)'!$ IQ: $ IQ,'Summary KPI'!$ J $ 2)+ SUMIFS('owssvr(1)'!C:C,'owssvr(1)'!$ […]

在Excel VBA中优化一行格式的代码

美好的一天! 现在,这更像是VBA的语法问题,特别是在连续调用多个列时。 我的代码被用来在每次迭代时给一个新行一个格式。 这些迭代逐渐变慢。 我已经研究了一下,find加快速度的方法,我find并实现了一个方法,即Application.ScreenUpdating = False函数,它可以阻止Excel使用相当多的开销。 不过,我认为还有另外一个领域可以进行优化。 下面的代码是相当重复的,并单独调用单独的丑陋和缓慢。 现在,我的问题是,我不知道如何使用Range函数,当我在我的循环中有variables我会减less代码量…? 作为一个新手,我想我只是没有意识到使用范围的正确方法,因为我不断收到错误。 有问题的代码: Dim i As Long Dim EndRow As Long EndRow = ThisWorkbook.Worksheets("Flags").Cells(Rows.Count, 1).End(xlUp).Row For i = 19 To EndRow + 1 Step 1 ThisWorkbook.Worksheets("Flags").Rows(i).RowHeight = 45 ThisWorkbook.Worksheets("Flags").Cells(i, 1).Borders.LineStyle = xlContinuous ThisWorkbook.Worksheets("Flags").Cells(i, 1).Borders.Weight = xlMedium ThisWorkbook.Worksheets("Flags").Cells(i, 2).Borders.LineStyle = xlContinuous ThisWorkbook.Worksheets("Flags").Cells(i, 2).Borders.Weight = xlMedium ThisWorkbook.Worksheets("Flags").Cells(i, 3).Borders.LineStyle […]

代码太慢,无法对250行进行分类和复制

我已经实施了所提出的改变,现在有一个工作表,这个工作表需要3倍的时间。 也不再形成我的漂亮的4分段工作表,但混乱和混乱。 请帮助。 Private Sub ReportMakeReady_Click() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False Unload Me Dim FRow As Long Dim LRow As Long Dim ColAPLast1 As Long Dim ColAPLast2 As Long Dim APValues As Variant Dim MRValues As Variant Dim AP As Worksheet Dim MR As Worksheet […]

在Excel中优化这个VBA查找循环

我想优化下面的代码,因为它非常慢。 我正在使用这个答案中find的代码: https : //stackoverflow.com/a/27108055/1042624 但是,在循环+ 10k行时,速度非常慢。 有没有可能优化我的代码在下面? 我试图修改它,但它似乎并没有工作。 Sub DeleteCopy2() Dim LastRow As Long Dim CurRow As Long Dim DestLast As Long Dim strSheetName As String Dim arrVal() As Long Application.ScreenUpdating = False Application.Calculation = xlManual strSheetName = "Week " & ISOWeekNum(Format(Date)) – 1 LastRow = Sheets("MatchData").Range("A" & Rows.Count).End(xlUp).Row DestLast = Sheets(strSheetName).Range("A" & Rows.Count).End(xlUp).Row […]

最有效的方法来添加格式化Excel – VBA

我有一个macros,将数百行数据添加到Excel电子表格。 我从插入每行数据的循环中调用一个过程。 每次插入数据时,我一直在应用该行的格式。 然而,在我的testing过程中,我发现当我不是一次一行地应用格式化的时候,我可以插入所有的数据大约3/4秒(3.3秒vs. 4.11秒)。 我试图克服的问题是不是每行都有相同的格式。 然而,有一个可预测的模式。 两行一格式和一行不同格式。 有没有循环的方式来应用这两种不同的格式,使我能够保持我得到的性能增益(用户希望看到一个2秒的回应,这可能是一个巨大的收益)。 我目前使用下面的代码(应用程序设置,如screenupdating,计算和事件都在这个过程中closures) Private Sub BuildTerminalSummary(ByRef terminals, ByVal timeFrame) Dim terminal As clsTerminal Dim curSheet As Worksheet Dim breakLoop As Boolean Dim terminalCode As String Dim rowNumber As Long Set terminal = New clsTerminal Set curSheet = Sheets("Terminal Summary") rowNumber = 7 'Remove all content, borders, and tint […]

从Excel中查询SQL数据库的最快方法?

我将从Excel中添加一些可以让用户从Excel执行临时报告的function。 显而易见的方法是通过对ODBC数据源的SQL语句,但是恐怕不能很好地对比一个巨大的表(即:对包含50千兆字节数据的表进行SUM或COUNT操作会导致性能问题) 我一直在考虑使用某种caching技术,基本上在RAM数据中查询: http : //www.yellowfinbi.com/wp_inmemory.pdf这可能是昂贵的内存,我不太确定有多难执行尚未。 我的约束如下: 我应该能够从Excel中查询任何types的数据源(SQL Server,MySql) 临时报告将从Excel中执行(通过我的加载项) 查询结果应该尽快发送回Excel单元格 我不想构buildDatawarehouse或Olap多维数据集,而是查询数据源 任何有关algorithm,实现技术(In-Ram报告?)的build议,都可以从Excel中进行特别查询的最优化方法? (在优化的SQL代码旁边!)

如何优化具有非常大的数据的COUNTIFS

我想创build一个如下图所示的报告。 我的数据有大约500,000个单元格(它将继续增长) 现在,我使用excel中的countifs函数,但计算需要很长时间。 (不能closures自动计算) 主要价值是收集date和date的范围约3年,所以我必须把很多公式,以涵盖所有范围的价值。 结果 下面的图片是最重要的一个不能改变的数据源。 ,而底部是我自己创造的(可以改变)。 我使用weeknum将date更改为星期数。 数据 有没有更好的公式或任何方式来使这个文件更快? 欢迎各种build议! 我正在考虑使用数据透视表,但是我不知道如何从这种数据源创build数据透视表。 PS。 VBA是最后的select。 你可以在这里下载示例文件: https : //www.mediafire.com/?t21s8ngn9mlme2d

使用variables优化Excel中的列表

我有一个153名高尔夫球员的名单与相关的工资和平均分数。 我想find6个高尔夫球手的组合,优化平均分,并保持低于$ 50,000的薪水。 我尝试过使用Solver,但我卡住了! 任何人都可以帮忙吗? 🙂