Tag: 性能

excel vba worksheetfunction.sum

我有一个函数应该计算一个单元格数组的总和。 这个函数在另一个子程序中经常被调用,因此必须真正快速。 首先,我使用了for循环来获取数字,但它太慢了。 然后,我想使用工作表function,但这不工作原因未知。 这里是函数的代码: Function CalcMD(rownumbers, colnumber) Dim MMDRow As Integer Dim SearchRange As String Dim FirstAddress As Boolean MMDRow = MMDRow() FirstAddress = False SearchRange = "" 'building the search range For i = 0 To UBound(rownumbers) If rownumbers(i) > 0 And rownumbers(i) < MMDRow Then If FirstAddress = False Then SearchRange = […]

在excel vba中格式化需要很长时间

我有一个Excel(2010)工作表,我从数据库中加载数据,然后基于每行中的特定单元格格式化每一行。 格式化代码需要相当长的时间。 约150行15列约4分钟。 这是一段代码。 基本上它是一个循环,检查row_type的值,并相应地设置每一行的字体颜色,背景颜色等。 有没有比使用循环更好的方式吗? 任何其他的改进,我可以做,如果循环是答案。 J = 1 While J <= iNumRows row_type = Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, -1).Cells(1, 1) If row_type = "main_row" Then With Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, 0).EntireRow.Font .Bold = False .ColorIndex = RGB(0, 0, 0) End With 'yellow Description columns With Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, 0).Resize(1, 5).Interior .Color = RGB(204, 255, 204) End With 'grey amount columns With […]

两种条件去除行的最有效的方法

我想要做的是删除我的电子表格中两个单独的列中值为0的行,因为这表明该行中没有有用的数据。 尽pipe可以在If/Then条件下使用For loop ,但是我发现这是不可思议的慢,因为我的数据集有大约51,000行,并且如果不是几天,它会花费几个小时来运行。 经过一番search,我遇到了一种替代方法,我相信更快,目前正在使用: Public Sub deleteRows() ' source: http://www.ozgrid.com/forum/showthread.php?t=64364 Dim lastRow As Long Dim n As Long Dim RT As Date RT = Time With ActiveSheet lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row End With For n = lastRow To 2 Step -1 If (Trim(ActiveSheet.Cells(n, 3).Value) = 0) And (Trim(ActiveSheet.Cells(n, 6).Value) = 0) Then ActiveSheet.Cells(n, 1).EntireRow.Delete […]

使用VBA复制和粘贴格式很慢。 我怎样才能加快速度?

下面的代码是一个有效的function。 这只是慢,我不知道如何加快速度。 它需要一个excel行号和它的headerval(string)的值,并find相同的headerval在不同的工作表上,然后复制格式并将其应用到我们的新工作表。 真正的错误是因为源表格有两个不同的格式选项。 它在行中传递,使用23或24. ZROW是一个公共variables,设置与ROW开始寻找。 srccolbyname函数从具有相同标题的源表中获取一个列号 Function formatrow(roww As Long, header As Boolean) Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Dim headerval As String Dim sht As Worksheet Set sht = ThisWorkbook.Sheets("DEALSHEET") Dim sht2 As Worksheet Set sht2 = ThisWorkbook.Sheets("Sheet1") If header = True Then: srcrow = 23: Else: srcrow = 24 LastColumn = sht.Cells(ZROW […]

一个正则expression式replace可以运行在一个范围,而不是循环在Excel中的单元格?

我需要做一些正则expression式replace(目前〜100,但列表将增长)在一定范围的单元格(可变,但最多4或5位数的单元格数)。 目前,我的工作草案是循环遍历每个模式的所有单元格,但显然这是很多循环。 理想情况下,我会打电话(伪代码): Sheet.Range("A1:G1000").RegexReplace(pattern, replacement) 然而,最接近的是Range.Replace ,它只提到“你想要Microsoft Excelsearch的string” 。 Regex.Replace超载列表没有提及与单元格或范围有关的任何内容。 因此,由于Range.RegexReplace似乎已经不存在了, 是否有更有效的方法来replace许多单元格中的许多模式,而不是遍历每个模式,行和列?

MS Excel:我怎样才能使Max()更有效率?

我有一组如下所示的数据: ID Value MaxByID 0 32 80 0 80 80 0 4 80 0 68 80 0 6 80 1 32 68 1 54 68 1 56 68 1 68 68 1 44 68 2 54 92 2 52 92 2 92 92 4 68 68 4 52 68 5 74 74 5 22 74 […]

加快删除工作表上隐藏的行的代码

下面我有一些我写的代码。 这是非常有效的,没有任何错误。 然而,这是非常非常缓慢的。 子接受一张给定的工作表,并检查隐藏的行。 如果所有行都隐藏,则删除该表单。 如果不是,则删除所有隐藏的行。 这是运行在另一个子,所有的东西,如screenupdating和事件都被禁用。 我研究了加速代码的常用方法(这里: 如何提高VBAmacros代码的速度? ,这里: http : //www.databison.com/how-to-speed-up-calculation-and-improve-performance -of-excel-and-vba / ,在这里: http : //www.ozgrid.com/VBA/SpeedingUpVBACode.htm ),但还没有能够申请太多。 请看一下,让我知道你认为我可以做些什么来加快速度。 如果还有其他的编码错误,请让我知道。 谢谢! Sub RhidRow(ByVal count4 As Double) 'count 4 is the total number of possible rows Dim count6, count1, count9 As Double 'counters to be used count6 = 2 'begin on row two count1 […]

性能优化

我的代码占用了90%的运行时间。 大约有8000行,信息存储在列A中。这一行代码将这些信息分解到其他列中。 运行大约需要15分钟(:O)。 有关如何提高性能的任何build议? For i = 2 To Row_Number ' Loop for each row If InStr(Cells(i, 1), "//") = 0 Then ' This means that if // appears somewhere in the text we delete all the rows (including this one) (see Else 🙂 and stop the loop j = 1 Do Until Mid(Cells(i, 1), […]

VBA计算性能

我知道它非常简单,但我不知道我要去哪里错 – 请帮助 设置场景: 我目前在工作簿中有3个工作表 Sheet1 – 由原始数据组成,将根据比赛的固定date而移动 Sheet2 – 由从表单1复制的原始数据组成 查看 – 来自sheet2的数据视图 该过程是 – 用户将手动拖放工作表1中的灯具,然后剪下一个macros启用的button,将需要一个灯具的副本,并添加额外的列与工作表2中的数据 然后点击一个最终button,在“查看”表中创build这个数据的视图。 所有的查看表正在调用一个名为VnthLookup的已定义模块来填充每个单元格的相对值。 问题 目前每个工作表的VBA和公式工作正常,并创build视图时,如果我手动提示计算,通过单击单元格,然后单击键盘上的返回button更新并正常工作。 然而,当我尝试重新计算整个查看表时,它会超时并且需要永久性地完成calc(长达30小时,8个列标题长达一个小时) vthlookup模块的编码是 Public Function VlookupNth(MyVal As Variant, MyRange As Range, Optional ColRef As Long, Optional Nth As Long = 1) Dim Count, i As Long Dim MySheet As Worksheet Count = 0 Set MySheet […]

Excel VBAvariables使用:使用多个variables还是一个数组来存储信息更好一些

我已经使用VBA了大约一个月了,这个论坛已经成为我第一个“编程”语言的一个很好的资源。 当我开始对VBA数组更加熟悉的时候,我开始想知道存储variables的最好方法是什么,而且我确信这里有人知道可能是一个编程新问题的答案: 有10个彼此独立使用的Stringvariables或独立使用的Stringvariables数组(独立,我的意思是他们在数组中的位置无关紧要,在程序中使用)之间有任何区别。 有些代码我使用的地方可能有9个公共variables。 尽pipe事实上我不需要保持彼此之间的顺序,那么将它们设置为一个数组还有什么好处吗? 比如我可以拥有 Public x As String Public y As String Public v As String Public w As String 要么 Public arr(1 to 4) As String arr(1) = x arr(2) = y arr(3) = v arr(4) = w 就我需要做的代码而言,这两个版本在function上是等价的。 但是有没有理由使用一个而不是另一个呢? 连接到这个,我可以转置一个数组到Excel字段中,并使用xlUp和xlDown来移动数组中的各个值。 但是,我也可以通过类似的方式在数组中移动数组,通过在“抽象地”保存的数组中查找具有特定值或位置的元素。*有时候,我们发现一旦将数组值转换为工作表,使用xlUp和xlDown 。 除了必须有专门的工作表空间来做到这一点,这是比通过“抽象”*数组循环(如果Applications.ScreenUpdating = False )更糟糕(时间,处理能力,可靠性等)? *这可能意味着一些技术的math家/严肃的程序员 – 我想说一个数组,不使用工作表网格的可视化显示。 编辑: 谢谢你的有趣答案。 […]