Tag: 数组

确定数组中的元素的数量

我意识到,标题提供了一个简单的答案。 不过,请阅读。 在我的本科学习中,我学习了一门叫做计算math和数值分析的课程,在那里我学习了C ++。 现在我开始在VBA编码 – 只是为了好玩。 我试着做一个程序,可以计算一个多项式的根。 来回之后,我设法写下了所有的代码。 我想要做的最后一件事是在Excel中打印所有的根。 为此,我使用了一个名为“arroot”的数组。 下面的Sub是我的Main: Sub Main() Dim fx As Double, Dim dffx As Double, Dim n As Integer Dim x As Double, Dim root As Double, Dim arroot() Dim a(15) As Long, Dim i As Integer Sheet1.Cells.ClearContents Call PolyCoef(n, a) i = 0 Do Call Table(n, a, […]

最快的方式来loggingmacros的变化

一些背景: 我有一个Excel加载项,执行17个子例程,并想知道什么是最简单,最有效,最快的方法来 loggingmacros所做的特定更改 显示所有更改(在新的电子表格中)以及为什么更改(或标记/突出显示)每个单元格的列表 提供每个错误的单元格地址作为可点击的链接,将用户带到另一个工作表中的特定单元格(在同一工作簿中) 我到目前为止收集到的: 我已经阅读了一些如何实现这一目标的方法,最重要的是从这里 , 在这里 , 在这里 ,最重要的是在这里 。 这些build议的方法如 将UsedRange转储到数组中,然后在所有UsedRange完成之后,将UsedRange到第二个数组中。 比较两个数组,并找出差异的方式。 使用worksheet_change事件logging更改。 Marktastic网站的最后一个链接提供了最有说服力的方法,结合了前两种方法。 然而,即使他每次检查数组的方法都会触发worksheet_change事件,耗时0.06秒,这似乎会加起来很多开销。 我面临的一些特殊问题包括: 处理大文件(15000行,150列) 我的一些潜艇进行了一些不需要注意的改变,例如只重新安排某些细胞的值,否则就不会改变它们 我的macros的构build工作是快速(<1分钟),并完成它的扫描我们的大文件,所以我想这将消除使用Worksheet_Change事件,并写入每个错误后,立即写入单独的工作表。 就像马克build议的那样,既使用两种方法,似乎也会造成太多的滞后。 比较两个数组看起来对于像我一样大的文件来说也是相当慢的,因为这意味着迭代通过15000(行)×150(列)= 2,250,000个单元格 由于我通过macros进行所有的更改, worksheet_change事件不会触发。 所以,这基本上消除了我遇到的所有选项。 我能想到的唯一的其他选项是只有一个数组,用它来logging单元/位置和错误代码正在执行的位置,然后将整个数组完整的转储到新的工作表。 这真的是我最好的select,但? 所以,考虑到以上所有的事实和研究 现在,对于我的问题: 在我的情况下,最有效的方式是logging更改,并显示在我的macros完成之后对文件做了哪些(必须注意的)更改? 无论我是否列出,请随时分享一种您认为最适合这种情况的方法。 你能提供一个简单的示例代码来说明如何实现你所build议的方法吗?

用户定义types并将数组传递给函数

我有麻烦传递从用户定义的types的数组函数: 定义types(在标准模块中): Public Type JPrinters Available() As String Default As String End Type function列出所有可用的打印机(标准模块): Function ListPrinters() As JPrinters Dim GetPrinters As Object: Set GetPrinters = CreateObject("WScript.Network").EnumPrinterConnections Dim i As Integer Dim j() As String 'Array of Printer Names ReDim j(0 To GetPrinters.Count \ 2 – 1) For i = 0 To UBound(j) 'Load this array […]

dynamic地维度/填充二维数组

我有一个有趣的问题。 我需要用数据填充二维数组,但是我不知道有多less个数据点存在,直到数组被填充。 Dim finalArray(0 to 500000, 0 to 3) R=0 For Each index in someDictionary If Not someDictionary.item(index)(1) = 0 finalArray(R,0) = someDictionary.item(index)(1) finalArray(R,1) = someDictionary.item(index)(2) finalArray(R,2) = someDictionary.item(index)(3) R = R + 1 End If Next index 问题是我不知道词典中有多less项目,也不知道有多less项目是非零的。 我知道的唯一方法是在我运行循环并计数R之后 目前我正在将整个500k行数组打印到Excel中,这通常是100-400k行的数据,其余的空白。 这是不明智的,我想重新维度数组是正确的大小。 我不能使用ReDim因为我不能删除数据,我不能使用ReDim Preserve因为它是二维的,我需要减less行数,而不是列数。

在Excel VBA中dynamic地标注多个工作表中的数组?

我有6个工作表,每个工作表都有一个数据子类别(重要的是他们在不同的工作表中)。 我将数据加载到数组中,因为有成千上万的行,然后以特定的格式将其打印到.txt文件中。 Sub ExcelToXML() Dim headers(), data(), attributes1(), attributes2(), attr$, r&, c& Dim rowCount As Long Dim columnCount As Long Dim FF As Worksheet Dim FOPR As Worksheet Dim R1 As Long Dim C1 As Long Set FF = Worksheets("Fairy") Set FOPR = Worksheets("Opera") rowCount = (FF.Range("A1048576").End(xlUp).Row) 'Only one defined as rowCount should be consistent […]

VBA数组函数 – 从没有空白的范围返回数组

我在VBA的一个基本问题挣扎,并希望得到一些帮助。 我想定义一个函数,它返回一个没有空格的范围的数组,如下所示: 所以当我在欧洲选项单元中调用函数时,函数应该返回一个没有任何空格的数组,就像在右边一样。 这是迄今为止的代码: Function portfolioX(N) Dim MyArray(3) Dim i As Integer counter = 1 For i = 1 To N If IsEmpty(i) Then Next i Else portfolio = MyArray MyArray (counter) counter = counter + 1 Next i End If End Function 我是VBA的新手,所以这可能是完全错误的。 谢谢!

Excel – IF函数列表中的模态值

我想在列表中find最常见的值,并按名称匹配最常见的结果。 我知道它围绕着一个带有模式和匹配function的索引,其中有一个IF函数。 但不能把它弄下来。 原始数据 USER NAME Items James Ile Flat White James Ile Flat White Michael Pane Latte Lily Wilk Iced Drinks Louise Coset Millionaire Shortbread Louise Wyli Flat White Louise Wyli Millionaire Shortbread Louise Wyli English Breakfast Louise Cosett Cheese Toastie Louise Wyli Flat White Louise Cosett Pineapple Sunset James Court Espresso 期望的结果 USER […]

使用VBA中的缺省数组来填充Excel WBS和大纲

我有一个WBS (工作分解结构),有多行(组纲要的顶级),每个顶级行都是一个活动。 直接参与的活动是涉及的angular色。 根据顶层活动(例如“计划”)的值,根据其在另一个工作表(“默认值”选项卡)上的相关表格中的值,填充以下级别中的单元格。 目前,活动(对应于angular色)下的行正在进行丑陋的索引/匹配查找,乘以25个angular色,可能导致电子表格停顿。 我认为可以解决这个问题的方法是将angular色默认值表放到一个持久数组中,并在用户放入顶级活动时反复使用数组中的值。 我只是不知道如何使数组持久化(所以VBA不重新填充它永远不会改变一个单元格的用户)。 如果“angular色默认值”表中的值发生更改,我可以使用工作表OnChange来处理该值,所以这不是问题。 第3行“活动1”是“活动行”在组合大纲已折叠时的样子。 第4-9行是“活动行”的外观,展开了组大纲,显示了基本angular色。 对于每个angular色,这是另一个选项卡上的表格,用于查找WBS选项卡上相应的活动/angular色单元格中的值。

excel公式总结数组

我不知道为什么总结数组公式不会返回正确的结果。 公式是: =SUM(INDEX($C$4:$C$12,TRANSPOSE(OFFSET(K17,0,0,1,COUNT(K17:S17))))) 我想要做的是根据K17:S17值从$C$4:$C$12select多个值,然后对其进行求和。 在行K17:S17中可能有1到9个正整数(从1到9),这决定了从C4:C12select哪一行。 当我只使用INDEX($C$4:$C$12,TRANSPOSE(OFFSET(K17,0,0,1,COUNT(K17:S17))))作为数组函数时,它返回我想要正确设置的值。 但在frot中添加总和只会返回这个集合中的第一个值。

如果在列表中找不到类别,则Excel总计值(更好的编码方法)

我有一个数组的forms下面的代码,我想知道是否有一个更清洁,更dynamic的方式来编码。 (我已经删除了$,以方便阅读) SUMPRODUCT(IF((A1:A10 <> D1)*(A1:A10 <> D2),B1:B10)) 列A有一个名称列表 B列有一个值列表 D列有一个不包含在计算中的名字列表 这个公式的问题在于,对于DI列中的每个新项目,都必须附加另一个*,这将开始形成一个庞大的公式。 我尝试了SUMPRODUCT(IF((A1:A10 <> D1:D2),B1:B10))但它没有工作。 有没有人有任何想法? PS您必须按CTRL + SHIFT + ENTER使单元格数组,公式将无法正常工作。 编辑:我不能有D1:DX是与其他范围相同的大小,因为我需要X为我的具体情况dynamic