Tag: 性能

高分辨率定时器/代码运行时间 – >开销?

我试图find我的代码运行时间使用高分辨率计时器,我注意到,计时器有不一致的结果,我想知道为什么这是。 我发现这篇文章如何testingVBA代码的运行时间? 并已经实现了最高的答案,我试着用它来查找几个函数的运行时间,并注意到结果变化相当剧烈。 看看这是否是定时器的错误,我做了一个function,我刚刚开始和停止计时器。 Public Sub test_ctimer() Dim results(0 To 4) As Double Dim t As CTimer: Set t = New CTimer Dim i As Integer 'Removes msg box overhead MsgBox "about to start" For i = 0 To 4 t.StartCounter results(i) = t.TimeElapsed Next i For i = 0 To 4 MsgBox results(i) Next […]

INDIRECT的替代品

我正在使用INDIRECT函数从另一个表格中获取数据。 直接的方式是“sheetname!A5”。 我需要它的dynamic,所以sheetname也是表的一部分,使用间接“间接(”'“&G $ 1&”'!A5“),而G1包含sheetname工作正常。 INDIRECT速度非常慢,超过我的项目,因为我需要大量的提取。 有没有更强大/更高性能的function来从可变表中获取数据?

Excel VBA高效的比较两个二维数组的方法

我有两个二维数组(我们称之为A和B),它们都包含元素0处的序列号和元素1处的date.A中的许多序列号都在B中find(大约60%)。 如果有匹配,我需要检查数组B中的相应date是否小于数组A中的date,如果是,则将A中的date设置为null。 目前我正在循环中使用循环: For x = 0 To UBound(arrayA) For y = 0 To UBound(arrayB) If arrayB(y, 0) = arrayA(x, 0) Then ' the serial numbers match If arrayB(y, 1) < arrayA(x, 1) Then ' test the dates arrayA(x, 1) = Null End If Exit For End If Next y Next x 这工作正常,但很慢(约30 – 40秒),所以我一直在试图devise其他方法,其中一些非常古怪,如 […]

循环内的Excel VBA Copy操作非常慢

下面的子程序在其循环中有一个复制语句,需要2秒钟才能在Excel 2013中执行。因此,20次迭代的时间将超过40秒。 我已经尝试了所有常见的优化,如禁用事件和屏幕更新。 有没有人有同样的问题? Sub TEST_SUB(surface) Application.ScreenUpdating = False Application.EnableEvents = False Application.Calculation = xlCalculationManual Worksheets("Sheet3").Activate ActiveSheet.DisplayPageBreaks = False Sheets("Sheet3").Range("A4:Z400").ClearContents y = 4 'y is the row on sheet3 where we want to paste For x = 4 To 20 'x is the current row from which we want to copy ' Decide if to […]

用C#在excel文件中添加多个超链接的优化方法

我想问问是否有一些实际的方法在Excel工作表中添加多个超链接与C#..? 我想要生成一个网站列表和定位到他们的超链接,所以用户可以点击这样的超链接,并到达该网站。 到目前为止,我已经使用了简单的嵌套for语句,循环遍历给定excel范围中的每个单元格,并向该单元格添加超链接: for (int i = 0; i < _range.Rows.Count; i++) { Microsoft.Office.Interop.Excel.Range row = _range.Rows[i]; for (int j = 0; j < row.Cells.Count; j++) { Microsoft.Office.Interop.Excel.Range cell = row.Cells[j]; cell.Hyperlinks.Add(cell, adresses[i, j], _optionalValue, _optionalValue, _optionalValue); } } 代码正常工作,但由于数千个Hyperlinks.Add方法的调用,代码非常慢。 有趣的是,Office.Interop.Excel中的set_Value方法可以通过一个简单的调用添加数千个string,但是没有类似的方法来添加超链接(Hyperlinks.Add只能添加一个超链接)。 所以我的问题是,有什么办法来优化添加超链接到Excel文件在C#中,当你需要添加大量的超链接…? 任何帮助将是apreciated。

Excel VBAsearchw /大型数组

所以我find并修改了一个适合我需求的macros,但是有一个限制。 我正在构build一个macros查找医疗支付数据的特定诊断代码和程序代码。 在我目前正在进行的项目中,只有14个诊断代码,所以我可以直接把它放到VBA中。 但是,有超过800个程序代码是我无法装入VBA的。 我能够做一个单独的VBA步骤,把这个数据带进一个表格,但我似乎不能让它设置在桌子上search。 但是,这是说,什么是运行这样的大量项目的VBAsearch的最佳方式是什么? Sub PROCEDURE_1_search() Dim FirstAddress As String Dim MySearch As Variant Dim myColor As Variant Dim Rng As range Dim I As Long MySearch = Array("412", "4100", "4101", "4102", "4103",…) <– have over 800 With Sheets("All Claims by Date of Service").range("G5:G55000") For I = LBound(MySearch) To UBound(MySearch) Set Rng = […]

如果find子string,如何加快此代码查找和删除行

下面的代码工作效果很好,唯一的缺点是它的速度慢,因为我正在使用它来search子string的所有实例,并删除整个行,如果在整个工作簿的任何单元格中find。 目标很简单,只要在任何单元格string中findinput的string,就删除整行 Dim wo As Worksheet, ws As Worksheet Dim I As Long, j As Long, m As Long Dim toFind As String, testStr As String Dim pos As Long Dim lstRow As Long, cutRow As Long Dim WS_Count As Integer Dim Cell As Range Option Compare Text Option Explicit Sub SearchDelete() toFind = InputBox("Enter […]

我怎样才能导出非常大量的数据来优化

我目前正在使用EPPlus将数据导出为ex​​cel。 它适用于less量的数据。 但是它会消耗大量的内存来输出大量的数据。 我简要介绍一下OOXML和/或Microsoft Open XML SDK 2.5。 我不确定我可以使用它来将数据导出到Excel? 还有第三方提供程序库。 我想知道什么解决scheme可以很好地完成出口大量数据的工作,而且不会占用太多的空间(理想情况下小于输出数据量的3倍)? 更新:一些额外的要求…我需要能够导出“颜色”信息(不包括CSV),我希望像EPPlus库(不包括XML格式本身)易于pipe理的东西。 我发现另一个线程,他们推荐Aspose或SpreadsheetGear,我正在尝试。 我把第一个答案确定。 谢谢大家。 更新2016-02-16就像信息…我们现在使用SpreadSheetGear,我们喜欢它。 我们需要支持一次,这是真棒。 谢谢

Excel VBA Application.screenupdating与Application.visible

我有一个VBA代码,从另一个Excel表复制某些单元格到活动的Excel表单。 在这里,用户不需要看到处理,甚至是Excel应用程序窗口,直到工作完成,我希望工作更快。 我通过互联网阅读了一些博客,指出将Application.screenupdating设置为false会加快任务的速度。 所以,在这里我的问题是 – 我应该将Application.screenupdating / Application.visible中的哪一个(/两者)设置为false? 我的理解是,两个属性可以增加vba任务的输出量,尽pipe当用户应该查看应用程序时使用screenupdating属性,而不是在需要时才使用更新,但是当用户不需要查看时使用可见属性窗户。 我相信设置一个属性为false可能不需要设置另一个为false。 请提供您的答案的理由。

macros观运行时间越来越长

我的代码工作正常,但问题在于运行时间越来越长,每次使用macros时都需要花费更多时间来完成计算。 我已经尝试了各种各样的变化和修改,但是由于我对VBA很新,所以我没有取得很大的进展。 这里是我正在运行的代码(注意,它作为子集运行,并且ScreenUpdate = False ): Public Sub deleteRows() Dim lastRow As Long Dim rng As Range With ActiveSheet .AutoFilterMode = False lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row '~~> Set the range of interest, no need to include the entire data range With .Range("B2:F" & lastRow) .AutoFilter Field:=2, Criteria1:="=0.000", Operator:=xlFilterValues .AutoFilter Field:=5, Criteria1:="=0.000", Operator:=xlFilterValues End With .Range("B1:F" […]