Tag: 性能

Excel 2007中的字体格式化性能

我有macros设置整个范围的字体大小9: Range("A1:Z20000").Font.Size = 9 当我在Excel 2010或2013上运行它时,大约需要1秒的时间(范围上几乎没有格式化)。 但是,当我在Excel 2007上运行它时,需要15秒以上来处理这一行代码。 我找不到任何关于这个的文章,但显然MS修复它在较新版本的Office(Excel)。 有没有办法在Office 2007中为大范围(500,000 +个单元格)设置字体大小而不会导致性能下降?

Excel VBA隐藏3000行优化

我的第一个问题:) 在每次激活工作表时,都需要检查并隐藏3000行的工作表。 通常只有100行是可见的,但我必须确保它总是足够的线。 (以防万一)。 我有这个代码运行良好,但有点慢。 提示加速会很好。 Private Sub Worksheet_Activate() On Error GoTo ExitHandling Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False 'Hide Operations columns if no values If Worksheets("BasicData").Range("CheckOperationsZero").Value = "Yes" Then Columns("I:J").EntireColumn.Hidden = True Else Columns("I:J").EntireColumn.Hidden = False End If 'Hide empty rows, dont hide if row belowe is not empty, autofit for […]

为什么这个访问查询需要这么久?

我写了一个访问客户端来比较两个excel文件。 它将正在比较的两个excel文件加载到临时表中,并根据下面显示的两个查询对它们进行评估。 有两个查询,因为有时Excel文件中只有一个名称列。 基本上用户input被比较的列的名称,我们改变基于这个的查询。 第一个查询, cQueryFull ,完美,非常快速(超过10万logging在几秒钟内)。 第二个查询cQueryPart按照预期工作(按照比较),但从未在超过5,000个logging的表上完成。 结果挂了几个小时,我被迫closures了这个程序。 我不明白为什么一个查询比另一个查询快得多,我希望有人能够帮我弄清楚,并可能修复第二个查询。 我创build查询的访问客户端部分如下: If chkOneColumn.Value = 0 Then ' Construct Comparison Query qString = "SELECT OriginalFile." & txtOriginalFirst.Value & " as OriginalFirstName, OriginalFile." & txtOriginalMiddle.Value & " as OriginalMiddleName, OriginalFile." & txtOriginalLast.Value & " as OriginalLastName, WorkingFile." & txtWorkingFirst.Value & " as WorkingFirstName, WorkingFile." & txtWorkingMiddle.Value & […]

需要帮助优化vba显示function

我已经做了一些数据库工作与Excel中作为数据库和数据库驱动程序通过与VBA的macros。 我构build了一个函数,该函数应该通过带有testID字段的数据库logging列表进行parsing。 我想基于它的testID来显示每个testing一次,但数据库的设置方式意味着我必须消除重复的testID。 我通过遍历logging集并在列表中显示之前检查当前testing与前一个testing。 我遇到的问题是这个function太慢了。 对于数据库中只有12个testing,大约需要3秒钟将其显示在视图电子表格中。 我很想听听关于如何优化运行时间的一些想法。 这个function: Public Function showAllTests() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim cstring, sql As String Dim r, c As Integer Dim testsAr As Variant Dim inAr As Boolean cstring = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source=I:\DBtrials.xlsx; Extended Properties=""Excel 12.0 Xml; HDR=YES;ReadOnly=False"";" sql = "SELECT [TestID], [Status], [PFIBox], […]

如果在大型数据集上使用Excel VBA循环执行速度非常慢,然后崩溃

我不是一名开发人员,但我在这里和那里读了一些能够理解它的一些。 这可能是我面对的一个简单的问题,但我似乎无法弄清楚。 所以谢谢你帮助我! 我在Google的帮助下写了一个简短的脚本,该脚本可以将CSV导出转换为可读格式。 它应该做更多的事情,但我已经面临性能问题,只是为了使一些条目可读。 以下是我到目前为止: Sub MagicButton_Click() 'Find the last non-empty cell in column A Dim LastRow As Long LastRow = Range("A" & Rows.Count).End(xlUp).Row 'Set Variables to work with the cell content Dim CellContent As String Dim CellContentArr As Variant 'Set looping variables Dim i, j As Integer Dim FirstRow As Integer Dim FirstCol […]

Excel获取和转换(电力查询)M代码风格和性能

我创build了一些相当复杂的M查询,并开始遇到一些严重的性能问题。 我想知道如果我有时如何组织我的代码。 我遇到的问题是: 1)Power Query不断地使用所有的几个CPU核心,计算一些东西 ,即使我不等待一个结果。 2)在任务pipe理器中,我有时可以看到Power Query线程(“Microsoft.mashup.Container.NetFX40.exe”)几乎是空闲的,而Excel.exe使用一个核心的100%几十分钟 – 即使在大多数情况下,我正在看几个参数表中的值不包含超过几十个单元格。 3)即使涉及的操作是微不足道的,但有些步骤计算时间非常长。 例如,我有一个从Excel表中取得的10个文本值的列表。 当我“预览”它时,这个列表显示为我的查询步骤之一。 然后我想删除一个值,所以下一步= List.RemoveItems(myList,{“val”})。 它在30分钟后没有计算,即使我可以看到列表在上一步中正确加载。 4)改变代码后的几分钟,UI有时会变得没有响应。 仍然可以右键单击左侧的查询进入高级编辑器,然后单击右上angular的红色X并select保留更改,但其余的都没有响应。 不灰色,只是没有反应。 无论如何,我只是想问问是否有人有类似的麻烦,如果有人知道是什么触发PQ特别糟糕的performance。 我经常使用类似下面的模式来保持查询的总数,同时仍然能够轻松地检查单个步骤: let ThisWB = Excel.CurrentWorkbook(), CfgTbl = ThisWB{[Name="myCfgTbl"]}[Content], x = aFn(CfgTbl), y = bFn(CfgTbl), output = [ThisWB=ThisWB, CfgTbl=CfgTbl, x=x, y=y] in output 这是否有可能导致任何问题? 只是认为这可能是因为在一个简单的函数结果等待了很长时间后,我创build了一个新的查询= Excel.CurrentWorkbook(){[Name =“myCfgTbl”]} [Content] ,我的结果立即计算出来。 不知道为什么。

VBA卓越,提高性能没有循环

我有两个相同的工作表,我想采取的行,是相同的多个列(工作表总是63列和504行和增加),我使用两个for循环增加一个行,然后比较所有另一行中的行再次增加行,并将另一行的所有行与该行等进行比较。 直到最后一行,然后if循环,看看它们是否符合我的条件。 问题是,它花费了太多的时间(大约8分钟),我试图使用查找function,但它失败了,因为它只能采取一个值。 我添加了错误的屏幕更新,计算和enableevents,甚至改变状态栏为非常基本的东西,以提高性能,但他们没有给我我想要的结果。 我怎样才能以任何方式提高性能,一个新的function或任何东西? PS某些时候,某些条件并不重要,这取决于某些单元格的真实值。 For Row_S = 2 To MAX_Row_S SourceMonth = Worksheets(NBG_SourceRegionDataWorksheetName).Cells(Row_S, SOP).Value SourceMonth = DatePart("m", SourceMonth) SourceYear = Worksheets(NBG_SourceRegionDataWorksheetName).Cells(Row_S, SOP).Value SourceYear = DatePart("yyyy", SourceYear) SourceCarmaker = Worksheets(NBG_SourceRegionDataWorksheetName).Cells(Row_S, carmaker).Value SourceProject = Worksheets(NBG_SourceRegionDataWorksheetName).Cells(Row_S, Project).Value SourceFamily = Worksheets(NBG_SourceRegionDataWorksheetName).Cells(Row_S, Family).Value SourceStatus = Worksheets(NBG_SourceRegionDataWorksheetName).Cells(Row_S, Status).Value SourceShare = Worksheets(NBG_SourceRegionDataWorksheetName).Cells(Row_S, Share).Value SourceCst = Worksheets(NBG_SourceRegionDataWorksheetName).Cells(Row_S, "A").Value SourcePID = Worksheets(NBG_SourceRegionDataWorksheetName).Cells(Row_S, […]

为什么从Excel中删除格式会增加MATLAB可读取的速度?

我有一个有大约400行和10列数据的电子表格。 我有它build立在MATLAB导入此表使用可读表(因为数据不是本土的,我发现这是最简单的方法,通过xlsread)。 问题是,Excel文件中的格式导致readtablefunction超慢。 数字格式(小数位)和条件格式都会影响到这一点。 % With formatting: 35 seconds % Without formatting: 1 second 我希望能够保持Excel文件格式为可视化的目的,但它似乎是造成问题。 任何方式来解决这个问题,而不必摆脱格式?

Excel VBA – 如何更有效地做countif?

我正在为一个电子表格Excel Excel VBA代码工作。 以下代码的目的是计算此行中凭证号码出现在整个列G中的次数。由于原始数据有超过60,000行,以下代码将花费超过2分钟时间来完成。 Worksheets("Raw Data").Range("AP2:AP" & lastrow).Formula = "=IF(AO2=""MATCHED"",""MATCHED"",IF((COUNTIF(AQ_u,G2))>0,""MATCHED"",""NOT MATCHED""))" 我也尝试了一种方法,它基本上也是一个CountIF函数: Dim cel, rng As Range Set rng = Worksheets("Raw Data").Range("AQ2:AQ" & lastrow) For Each cel In Worksheets("Raw Data").Range("AQ2:AQ" & lastrow) If Application.WorksheetFunction.CountIf(rng, cel.Offset(0, -36).Value) > 0 Then cel.Offset(0, -1).Value = 1 End If Next cel 上面的代码需要很长时间才能完成,所以我想知道是否有办法让代码更有效率? 非常感谢。

c#Microsoft.Office.Interop.Excel导出

我正在编写一个程序,我正在使用C#语言, DataSet等。我有大约200 000个值,我想要导出到.xlsx文档。 我的代码: using Excel = Microsoft.Office.Interop.Excel; … Excel.Application excelApp = new Excel.Application(); Excel.Workbook excelworkbook = excelApp.Workbooks.Open(/location/); Excel._Worksheet excelworkSheet = (Excel.Worksheet)excelApp.ActiveSheet; … excelApp.visible = true; … for (int i = 0; i < /value/; i++) for (int j = 0; j < /value/; j++) excelworkSheet.Cells[i, j] = /value/; 它运作良好,但速度太慢(至less5-10分钟)。 你有什么build议吗?