Tag: 性能

如何提高excel VBA中用户表单的存储速度

这是我创build的用户表单。 然后,它被用作input平台。有一些不同的表,例如2016年,2017年….这个保存button的逻辑是search年(date),用户input和位置正确的工作表。 然后,它会find该工作表的最后一行。 例如,最后一行是行1000.用户窗体的第一行将保存在行1001上。用户窗体的第二行将保存在行1002 …. 题 但是,当我在真正的excel文件中testing时,保存速度太慢。真正的excel文件很大(每个工作表中大约有1XXXX行)。它使用8秒为userform保存一行,13秒保存两行。 显然,节约的速度是不可接受的。 任何方法都可以改进呢? If ComboBox3.Value = "2016" Then Worksheets("2016").Activate j = WorksheetFunction.CountA(Worksheets("2016").Range("A:A")) + 1 End If If ComboBox3.Value = "2017" Then Worksheets("2017").Activate j = WorksheetFunction.CountA(Worksheets("2017").Range("A:A")) + 1 End If '1st If ComboBox4.Value = "" Then Else Cells(j, 1) = ComboBox434.Value Cells(j, 5) = ComboBox1.Value Cells(j, 4) = ComboBox2.Value Cells(j, […]

EXCEL公式,PIVOT TABLE和VBA代码之间还有什么更好的performance?

我有一个(增长的)40000行和20列的数据表。 我需要将这些数据(按月份和星期)分组,并在行/列之间执行一些简单的操作(+&/)。 我必须能够改变有问题的时期和一些特定的行来总结。 我知道如何macros/枢轴/公式,但我还没有开始,我想重新计算过程是最快的可能,而不是我点击一个button,然后一切冻结了几分钟。 你有什么想法什么可能是最有效的解决scheme? 谢谢

慢Excel VBA代码

我试图编写一个代码,它将查看从第4行到R2000的B2中的单元格,如果内容为零,则隐藏该行。 我的问题是,代码运行速度非常慢,经常停止响应。 如果你能帮助我,那是什么导致它运行缓慢,我可以自己修复它,但我不知道什么是更有效的方法。 正如你所看到的,我已经尝试过closures屏幕更新,但没有多大帮助。 代码如下 Sub HideRows() BeginRow = 4 EndRow = 2059 ChkCol = 2 Application.ScreenUpdating = False Rows("1:2059").EntireRow.Hidden = False For RowCnt = BeginRow To EndRow If Cells(RowCnt, ChkCol).Value = 0 Then Cells(RowCnt, ChkCol).EntireRow.Hidden = True End If Next RowCnt Application.ScreenUpdating = True End Sub

我怎样才能使这个脚本读取一个Excel,然后find并复制文件运行速度更快?

我的脚本读取Excel表格并获取一个范围,范围包含不同媒体文件的名称,我将其添加到一个大的列表中。 我使用列表中的名称来search目录,如果它们存在于给定的文件目录中,那么它们将被添加到“existsAlready”列表中。 如果它们不存在于copyFiles目录中的给定文件位置BUT中,那么它们被复制到给定的目录并被添加到“existsAdded”列表中。 如果在任一目录中都找不到,则将这些文件添加到“existsNegative”列表中。 所有3个列表打印到单独的列表框。 这一切工作,但是我发现它运行有点慢: 1)虽然Excel应用程序不可见,但它仍然启动一秒钟,然后closures,减慢进程。 2)如果文件夹中存在所有文件或者文件需要复制,应用程序运行良好/快速,但是如果在目录中找不到许多文件并且无法复制,则运行速度非常慢,我怎样才能做到这一点更快? 我想这与它必须要search整个目录,而不是find任何东西。 Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook excelWorkbook = excelApp.Workbooks.Open("@Excelfile"); Excel.Worksheet xlWorkSheet = (Excel.Worksheet)excelWorkbook.Sheets[1]; excelApp.Visible = false; excelApp.ScreenUpdating = false; excelApp.DisplayAlerts = false; Excel.Range range = xlWorkSheet.get_Range(B1:G1); List<string> listFBX = new List<string>(); foreach (Excel.Range s in range) { listFiles.Add(s.Text()); } List<string> existsAlready = new List<string>(); List<string> existsAdded […]

当我运行我的vba代码时,Excel进入“无响应”模式。 这个可以吗? 有没有办法消除这个?

当我点击button来运行我的代码,我得到了蓝色的加载循环,如果我等待大约150s我的代码将运行,有时进入“无响应”模式,并且一切都输出正确。 但是,如果我点击button来启动我的代码,然后等待10秒,然后单击窗口,强制进入“无响应”模式,我的代码将在大约30秒内完成所有正确的输出。 Option Explicit Option Base 1 Private Sub CommandButton1_Click() Dim loadtypemax As Single, column As Single, row As Single Dim loadtype As String, number As String Dim loadcombosmax As Single Application.ScreenUpdating = False Application.Calculation = xlCalculationManual loadtypemax = ((Cells(Rows.count, "L").End(xlUp).row)) loadcombosmax = ((Cells(Rows.count, "E").End(xlUp).row)) column = 6 For row = 2 To loadcombosmax If […]

相同的macros速度差异

我有两个工作簿包含相同的macros。 在一个工作簿中,macros运行速度超快,不到一秒钟。 另一个需要将近30秒的时间。 我正在使用Excel 2003.分页符在两个工作簿中都closures。 我不知道什么可能导致一个比另一个慢。 有任何想法吗? Sub viewFirst() Dim dataSheet As Worksheet, inputSheet As Worksheet, projectID As Long Dim projectRow As Long, lLastRec As Long, inputLastRow As Long, dataLastRow As Long, x As Long, sh As Shape Worksheets("Input").Select ActiveSheet.Protect "", UserInterfaceOnly:=True Range("a1").Select ActiveSheet.Pictures.Insert ("working.jpg") Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False Set […]

Excel ETA计算器。 随着转折

使用Excel,我试图计算从出发date和时间字段以及距离字段计算的预计到达时间(ETA)。 速度是艰难的部分,因为它取决于一天中的时间而变化。 现在,让我们假设根据一天中的小时只有两种速度可能性。 在上午8点到晚上7点之间,速度等于16.晚上7点到早上8点,速度等于8.实际的数字可能会大不相同,所以不要假设夜间速度是半速。 我想在一个date和时间下降,并有公式计算ETA利用的距离和适当的速度根据一天中的时间。 例如,从1月1日下午6点开始的500英里行程将导致1Hr @ 16,13Hr @ 8,11Hr @ 16,13Hr @ 8,6.25Hr @ 16。 1月3日下午2点15分到达,共计44.25小时 date加44.25小时是愚蠢的简单,但是,计算在一定的时间内开始时间和速度可能的时间已经躲过了我。 哇,你付出了很多努力,我真的很感谢这个努力。 但是,它并没有做我想做的事情。 我试图把起始date和时间,以及到目的地的距离作为input。 然后它必须使用白天变化的速度来计算ETA。 平均值将不会完成。 每次旅行都有一个精确的ETA,根据开始时间的不同,固定距离的旅行时间也会有很大差异。

使用双循环在VBA excelmacros中加快运行时间

我实际上有一些工作代码,虽然我有大量的数据和编写代码的方式,但运行需要一个多小时,而且我仍然需要添加相当多的代码才能真正分析数据。 我正在使用一个双循环,并且在我添加screenupdating = false之前,它似乎嵌套在内部的循环是什么花了这么长时间。 这是我有: Sub LReview() Dim SecX As Workbook, LipR As Workbook Dim ws As Worksheet, Xws As Worksheet, Fsheet As Worksheet Dim i As Long, XwsRows As Long Path = ThisWorkbook.Path & "\" Set LipR = ThisWorkbook Set SecX = Application.Workbooks.Open(Path & "SecurityXtract_Mnthly.csv") Windows("SecurityXtract_Mnthly.CSV").Activate Set Xws = Sheets("SecurityXtract_Mnthly") With Xws XwsRows = […]

加快匹配值处理(如果… = …然后…)

所以我现在有这样的代码:我基本上是要检查,如果一个工作表的列B可以在另一个工作表的列C中find,那么我会在其他工作表的行中findB值, H列值并将其复制到当前工作表的AI列中。 B列中的每一行都将重复此过程。 我遇到的问题是,它的运行速度太慢,即使closuresscreenupdates等。这是有道理的,因为有超过50000值,它必须循​​环与所有值查找。 我真的很感激,如果有人可以看看它,并提出可能的方法,我可以加快这一进程。 谢谢。 Sub Calculation() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False Dim i As Long, LastRow As Long LastRow = Range("A" & Rows.Count).End(xlUp).Row For i = 5 To LastRow Set wb1 = ThisWorkbook Dim anyRow As Long For anyRow = 4 To 500 […]

加快65,000个查询的Excel公式中的索引/匹配

我试图运行65,000个单元格的索引/匹配查询,作为Excel中商店库存计算的一部分。 我们的数据库中有65,000个独特的项目。 无论如何,这里是公式我粘贴一个单列65000行。 显然,它运行速度极慢。 我可以改变什么来加快速度? =INDEX(SAQTY!H:H, MATCH(A2&"GRA", SAQTY!C:C&SAQTY!F:F, 0)) 在附注中,索引/匹配是跨多张纸进行交叉检查,这与性能有什么关系?