Tag: 性能

从工作表中删除命令button和行很慢

这个子工具将删除在工作表上以编程方式创build的所有命令button及其关联的行。 删除60个命令button和行需要大约20秒的时间。 我已经通过了它,可以发现没有问题。 Sub ResetForm_Click() Dim Contr Dim controlname As String Dim WS As Worksheet Set WS = ActiveSheet For Each Contr In WS.OLEObjects controlname = Mid(Contr.Name, 1, 2) If controlname = "CB" Then Contr.TopLeftCell.Rows.EntireRow.Delete Contr.Delete End If Next End Sub

Excel UDF查找具有给定值的范围中的第一个和最后一个单元格 – 运行缓慢

我正在写一个函数,它需要一个列的范围,并find该列中的第一个和最后一个单元格有一定的价值。 这给出了第一个行号和最后一个行号,然后用于返回另一列中相应的子范围。 这个想法是使用这个函数,我可以将Excel函数应用到一个范围的(连续的)子部分。 例如,假设我有一个苹果和香蕉价格不同的表,所以苹果的所有价格都是先来的,然后是香蕉。 我想find苹果的最低价格和香蕉的最低限度,但select整个范围,而不改变最小化的范围。 我将使用我所需的function来提供范围到Excel的MINfunction,其中只包括苹果,或只是香蕉,而不必手动select这些子范围。 一个MINIF,如果你愿意的话 – 就像SUMIF的一个弱版本,但是对于MIN(可能还有许多其他function)。 我find了一个办法,但是运行速度非常慢。 我认为这可能与for循环有关,但是我不太了解Excel / VBA的效率以了解如何改进它。 我在Excel表上使用这个代码,所以我传递的列是一个表对象的命名列。 我在Windows 7 Enterprise上使用Excel 2010。 感谢任何帮助。 即使是有条件地将函数应用于与此相背离的范围的解决scheme也是受到欢迎的。 码: ' ParentRange and CriterionRange are columns of the same table. 'I want to extract a reference to the part of ParentRange which corresponds 'by rows to the part of CriterionRange that contains cells with […]

使用嵌套for循环和数组比较提高效率

我有一个macros循环两张纸,比较每个单元格中的单词。 代码工作正常,但有没有办法来提高效率或速度呢? 我手动使用for循环来比较string数组,因为我没有find任何VBA函数来做到这一点。 我确实有ScreenUpdating,这似乎有所帮助。 For i = 2 To maxMn 'loop 1 Sheets("Sh1").Select Cells(i, 2).Select mnStr = Cells(i, 2).Value mnArr = Split(mnStr, " ") x = 2 For x = 2 To maxNm 'loop 2 numTotal = 0 numMatches = 0 Sheets("Sh2").Select Cells(x, 6).Select nameStr = Cells(x, 6).Value nameArr = Split(nameStr, " ") For Each […]

VBA:有效的方法来build立一个没有重复的表

我需要读取包含多个条目的文件,并build立一个包含文件摘要的表格。 在读文件中,可能有多个条目的值,在总结中只需要单个条目,并且它们必须被sorting。 我已经实现了两种方法: 我用一个循环来检查输出表是否已经包含了这个值,如果不加上的话。 循环遍历整个列表(未sorting) “优化”为1:在每次插入一个新值之后,表格被sorting,并且当find一个值时循环被中止。 两种方法都做了他们的工作,但花了很长时间。 有没有更有效的方法来做到这一点? 编辑 为了更好的理解:我的文件看起来像这样 a d b c a 和我的列表/表应该是这样的: a b c d

如何测量Excel计算时间

例如,我怎么能find什么公式更快? =SUMPRODUCT((Data!D:D="RC Corp")*(Data!AD:AD="Expected Allowances / Provisions")) VS =COUNTIFS(Data!D:D,"RC Corp",Data!AD:AD,"Expected Allowances / Provisions") VS把这两个领域重新build立一个新的专栏, Z1 = D1&AD1 =Countif(Data!Z:Z,"RC CorpExpected Allowances / Provisions") Vs VBA Dim i as integer Dim Total as integer Total = 0 i=0 While i < 1000 IF Range("D"&i).Value = "RC Corp" AND Range("AD"&i).Value = "Expected Allowances / Provisions" Then Total = Total […]

提高VBA的循环效率

我有一个For循环,通过整数1到9循环,只是find对应于该整数(即1,1,1,2,3,4,5将find第三个“1”条目)最底部的条目,并插入一排空白。 我将这个数字和一个string“FN”连接起来,这个string恰好与这个代码的应用程序相对应。 无论如何,它运作良好,但它只有贯穿9个整数才有点滞后。 我希望有人能够帮助我debugging,以提高这个代码的速度。 谢谢! 如果有人可以通过一个很好的方式来填充插入的空白行,使用横跨(“A1:L1”)的页面标题的格式化副本,则可以获得奖励积分。 我试过的代码在Next i之前被注释掉了。 Sub test() Dim i As Integer, Line As String, Cards As Range Dim Head As Range, LR2 As Long For i = 1 To 9 Line = "FN" & CStr(i) Set Cards = Sheets(1).Cells.Find(Line, after:=Cells(1, 1), searchdirection:=xlPrevious) Cards.Rows.Offset(1).EntireRow.Insert Cards.Offset(1).EntireRow.Select ' Range("A" & (ActiveCell.Row), "K" & (ActiveCell.Row)) = […]

加速使用string填充单元格的代码

下面是一些非常简单的代码,用string填充单元格,并沿着方向打印到状态栏,给用户一些反馈。 无论如何,我可以更快地做到这一点吗? 像screenupdating的东西已经被禁用。 我的想法是将string发送到一个数组,然后从数组中填充单元格,但我不确定将完成这样的任务的代码。 让我知道我能做什么! Sub SheetNames() DoEvents Application.StatusBar = "Populating array (0)" Range("O1") = "ASRS" Range("O2") = "Base Coat Line" Range("O3") = "Base Coat Line 2" Range("O4") = "Body Shop Feed" Range("O5") = "Cavity Wax Manual" Application.StatusBar = "Populating array (5)" Range("O6") = "Cavity Wax Masking" Range("O7") = "Cavity Wax Oven" Range("O8") = "Cavity […]

从C#编写excel的有效方法

我想用c#生成excel以下是它的代码片段 Microsoft.Office.Interop.Excel; . . . foreach (string[] rowContents in lstOutputFileContent) { for(int i = 0; i < rowContents.Length; i++) { sheet.Cells[currRow, i + 1] = rowContents[i]; } } 但问题是,当lstOutputFileContent包含超过50K线,然后它需要太长的时间写(4-5分钟)。 有没有更好/更快的方式来编写excel在这种情况下,即我已经列出的string数组,我想写这个excel。 我尝试使用OleDb,但在前几行包含更less的单元格的情况下,然后当我尝试插入额外的单元格的行它给错误。 任何帮助将不胜感激。

macros没有响应的macros

我有一个连续循环运行的macros。 电脑有时会冻结,但在Excel代码中没有错误。 该代码使用以下为了有效地运行: DoEvents Application.DisplayAlerts = False Application.ScreenUpdating = False Application.Calculation = xlCalculationManual startagain: 'code 'calculations, alerts, and screen are updated GoTo startagain 我也正在使用我认为是一种有效的复制和粘贴方法(大部分代码是粘贴值和公式): Length = Range("C1").Value Set rng = Sheets("Linked Data").Range("A2:AA" & Length) Range("A2").Value = rng.Value 我已经把计算机上的处理器优先级改为EXCEL.exe的“高”,我将计算机性能设置为最高性能,我禁用了所有不必要的加载项,并closures了自动恢复保存。 尽pipe如此,计算机有时会冻结,变得无法响应。 有没有人知道可以做什么来提高可靠性?

C#加载xlsx文件的性能不好

我有一个关于在C#中加载Excel(Xlsx)文件的问题。 我已经用NPOI 2.0实现了Excel加载,但性能非常差(加载时间为15到25秒,10000行和60列)(运行在Win7上,带有Intel(R)Core TM i5-3210M CPU @ 2.50GHz(4 CPU),〜2.5GHz))。 我以为这是因为NPOI 2.0还在testing阶段,所以我尝试了另外一个名为EPPlus的库,并且加载Excel文件的时间也相当长。 以下是我如何使用EPPlus加载它: var existingFile = new FileInfo(path); var excelData = new ExcelViewModel(path); // Open and read the XlSX file. using (var package = new ExcelPackage(existingFile)) { // Get the work book in the file ExcelWorkbook workBook = package.Workbook; if (workBook != null) { // Here […]