Tag: 优化

具有行和列约束的matrix

我需要解决的焦虑(n通常<12)matrix受到一些限制: 预定的行和列总和被满足。 2.行号大于列号的matrix中的每个元素必须为零(因此基本上唯一的非零元素必须在右上部分)。 3.对于给定的行,右边第一个非零元素的多于三列的每个元素也必须为零。 所以,一个4×4的matrix可能看起来像这样(在实践中,行和列约束将会大得多,通常约为1-3百万): |3 2 1 0| = 6 |0 2 1 1| = 4 |0 0 2 1| = 3 |0 0 0 4| = 4 3 4 4 6 我一直在尝试使用一些求解器方法来做到这一点在Excel中,也尝试了一些基于R的优化包,但迄今为止是如此不成功。 任何build议,我怎么可能会接近这个将不胜感激。 谢谢!

使用xlrd / xlwt和循环迭代优化Excel数据收集/减less

我刚刚开始使用Python进行编码,并且有很多东西需要学习。 我的代码的目标是从单元格拉string,检查其字符长度,并用特定的缩写replace单词。 然后,我将新的string写入一个不同的Excel表,并保存一次所有的数据已经减less。 我终于想出了如何让它工作,但这确实需要很长时间。 我正在使用10000个以上的string单元格,我的循环迭代可能远没有优化。 如果你有任何信息,这将是很好的。 import xlwt import xlrd book = xlrd.open_workbook() # opens excel file for data input reduc = xlwt.Workbook() # creates the workbook that the reduced data will be saved in # Calls the sheets I will be working with Data = book.sheet_by_index(3) Table = book.sheet_by_index(5) sheet1 = reduc.add_sheet("sheet 1") # […]

使用Excel解算器生成多个最佳解决scheme

有什么办法来获得所有的最佳解决scheme,当你解决Excel解算器(单纯LP方法)的一些问题? 如果不是的话,Excel中解决这个问题的最好的方法/插件是什么,并将现有的VBA代码转换为使用这种新的方式?

如何处理UDF中的全列范围?

我使用Excel DNA为Excel开发了一个插件。 我声明了一个接受范围作为input的UDF,将ExcelReference转换为Range并使用GetEnumerator的枚举器收集List所有单元格值,以便进一步处理,然后将输出写入另一个范围。 作为一个testing,我试着将整列传递给函数( A:A ),并且所有东西都冻结了,因为枚举器在最后一个值之后继续枚举空单元格。 有没有更快的方法来检测一个全列的范围,并得到所有它不是空的单元格? 现在我正在使用这个代码,但是在上述情况下它是非常慢的。 Dim ue = inputRange.GetEnumerator Dim L As New List(Of String) Do If ue.MoveNext Then Dim c As Range = ue.Current Dim V As String = c.FormulaLocal If String.IsNullOrWhiteSpace(V) Then Continue Do L.Add(V) Else Exit Do End If Loop 我将使用以下解决方法,但我想防止在根。 Dim ue = inputRange.GetEnumerator Dim counter as integer=0 […]

使VBA脚本运行得更快

我第一次在Excel VBA中工作,在我的数据集中查找包含与群集中另一个条目相同的地址的行。 这些条目必须合并,然后行被删除。 我已经提出了以下内容,这是有效的(就我从testing中所做的小样本中可以看出): Sub Merge_Orders() Application.ScreenUpdating = False Application.DisplayStatusBar = False Dim lastrow As Long lastrow = Cells(Rows.Count, "A").End(xlUp).Row Dim y As Long Dim x As Long Dim j As Long Dim k As Long For i = 2 To lastrow //for each row, starting below header row j = 1 y = (Cells(i, […]

针对隐藏行的Excel VBA优化

我有一个遍历一些行的macros,以更新相关图表中数据点的着色。 行可以被用户隐藏,所以它检查隐藏的值,即 Do While wsGraph.Cells(RowCounter, 1) <> "" If wsGraph.Rows(RowCounter).Hidden = False Then 'code here End If RowCounter = RowCounter + 1 Loop 这段代码需要69秒才能运行。 如果我对隐藏行进行testing,则需要1秒的时间才能运行。 有没有更好的方法来做这个testing,否则我将不得不告诉用户他们不能使用隐藏function(或处理69秒的延迟)。 谢谢 这是完整的代码,按要求。 该graphics是一个条形图,我根据这些值在特定范围内着色,例如:超过75%=绿色,超过50%=黄色,超过25%=橙色,否则为红色。 在窗体上有一个button来重新着色图表,它执行这个代码。 如果有人过滤数据表,那么发生的情况是:前20行超过75%,最初是绿色的。 过滤表格后,只说前5个是超过75%。 该图仍然显示前20个为绿色。 所以这个button与macros重新着色吧。 ' — set the colour of the items Dim iPoint As Long Dim RowCounter As Integer, iPointCounter As Integer Dim wsGraph […]

当一个约束在开始时不满意时,Excel解算器将不起作用

我有这个: ABC 2 3 A1+B1 4 5 A2+B2 constraint_1: A1 + A2 = 5 constraint_2: B1 + B2 <= 4 目标单元格:C3,它是sum(C1,C2) ,它应该是0。 当我从上面的状态开始时, A1+A2 = 6,求解器将无法工作,因为约束_1首先被破坏(A1 + A2 = 6)。 有没有解决方法?

使用数组VBA优化Excel数据透视表filter

我有一个用户表单,其中用户将检查所有项目,他们希望一组数据透视表过滤。 问题是我有大约40个数据透视表和超过250个选项,用户可以过滤。 理想情况下,我计划将数据透视表filter设置为一个值的数组,但我找不到一个解决scheme,避免循环数组和filter选项。 请在下面find我的代码。 任何优化build议非常感谢。 谢谢! Private Sub Filter_btn_Click() Dim i As Integer Dim n As Integer Dim filter_num As Integer Dim pivot_num As Integer Dim MyArray() As String Dim pt As PivotTable Application.ScreenUpdating = False Set dashboard = Sheets("Dashboard") 'Adding all selected items to array n = 0 For i = 0 To Supplier_Listbox.ListCount […]

由于缺乏VBA优化,Excel 2013溢出

我希望将数据从统一表单(DATA)导出到多个关于条件的表单中。 我总共有13个标准,每个标准都必须在其专用表中输出。 我试图优化这个macros(这里只有2个标准),因为它滞后 Sub copy() Application.ScreenUpdating = False Dim i As Long Dim j As Long Dim sh As Worksheet Dim feuillePrincipale As Worksheet Dim S01Sheet As Worksheet Dim S02Sheet As Worksheet Set feuillePrincipale = ThisWorkbook.Sheets("DATA") Set S01Sheet = ThisWorkbook.Sheets("S01") Set S02Sheet = ThisWorkbook.Sheets("S02") For Each sh In ThisWorkbook.Worksheets If sh.Name = "S01" Then i […]

优化Excel数组

我有一个非常大的数据集(60万行)的数据结构如下格式: 1)有大约60个产品。 一个是美国总数,另外一个是制造商,标注为KMF。 也有一些标签为PCKGs(但与这个问题不相关) 2)每个产品分布在60个不同的市场 3)每个市场有20个不同的地点 4)我有12个指标,我需要按以下方式计算数据:每个指标的总美金数量总和(KMF) 我已经为此写了vba代码,但运行时间太长(大约20分钟),我需要在至less20个工作表上运行类似的代码。 我已经尝试了各种方法,如设置screenUpdating等虚假。 这是我的代码。 我是vba编码的新手,所以我可能会漏掉一些明显的东西。 请让我知道任何不清楚。 请帮忙! Sub beforeRunningCode() Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.Calculation = xlCalculationManual Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False End Sub Sub returnToOriginal() Application.ScreenUpdating = screenUpdateState Application.DisplayStatusBar = statusBarState Application.Calculation = calcState Application.EnableEvents = eventsState ActiveSheet.DisplayPageBreaks = displayPageBreaksState End Sub Function LastRowFunc(Sheet) As Long […]