Tag: multidimensional array

在VBA中重新规划multidimensional array的两个维度(为什么这里的解决scheme将不起作用)

首先,我将指出围绕重新调整multidimensional array的问题已经在这里进行了讨论和回答: Excel VBA – 如何重新生成二维数组? 。 我的问题是,我正在尝试应用这个答案,这不是很顺利! 问题在于调用函数。 如果我在调用函数之前调整数组的大小,Excel只会告诉我它不能分配给数组(可能是因为我没有告诉它要分配哪个元素)。 如果我没有预先确定数组的大小,那么当它正在寻找旧数组的维数时,这个函数就会崩溃,因为它根本没有。 我知道我可以通过颠倒数组的方式来做下面的事情,然后转置它,但是我需要进一步改变数组的两个维度,所以我试图让它在这里工作。 我承认我在这个代码中“失去了生存的意志”,因为我已经和这个代码做了几个星期的斗争,并且是一个非常业余的程序员,所以我意识到这可能是一个非常简单的答案,但我看不到它在这一刻。 任何帮助感激地收到。 这里是我的代码(Sub是从另一个子集调用的,其中定义了所有其他variables) Sub CalculateRank(row, coln, TempSums, TempProducts, Lead_count) Dim Maj As Double Dim CompareCount As Integer Dim CompareArray(1, 1) '**I don't really want to dimension this array before the loop below. Maj = WorksheetFunction.Round(Range("FJudges") / 2, 0) For coln = 1 To […]

读出错误定义的multidimensional array

我有一个数组,我从一个代码分割,然后切片数组。 参考这个问题: 拆分multidimensional array,然后切片 我已经添加了这一行代码: splitted = Application.Transpose(splitted) 现在数组被定义如下: 当我尝试运行下面的代码: For r = LBound(splitted) To UBound(splitted) Debug.Print uniqueValues(splitted(r)) Next r 我得到这个错误: run time error 9 subscript out of range 为了参考原始代码,我收到这个输出: 它适用于我的函数,我只能想象它与数组的定义有什么不同。 函数需要这个input: Function uniqueValues(uniqueArray As Variant) As Integer : Function uniqueValues(uniqueArray As Variant) As Integer Dim arr As New Collection, a Dim i As Long […]

VBA不同纸张上的两个二维数组的总和

我试图在SheetB上添加/减去SheetA上/从matrix的matrix,并在SheetA + B上打印结果。 此代码工作,但是当我使用matrix不是正方形,那么我得到的错误下标超出范围。 任何想法做什么? matrixA和B的大小相同,但大小是用户定义的,始终以A1开头。 Private Sub CommandButton5_Click() '''''''''''''''''''A+B''''''''''''''''''''''''' 'determining matrix size Worksheets("A").Activate Dim a As Integer Dim b As Integer lastcol = ActiveSheet.Range("a1").End(xlToRight).Column lastrow = ActiveSheet.Cells(65536, lastcol).End(xlUp).Row a = lastcol b = lastrow Dim matricaA As Range Dim matricaB As Range With Sheets("A") lastcol = ActiveSheet.Range("a1").End(xlToRight).Column lastrow = ActiveSheet.Cells(65536, lastcol).End(xlUp).Row Set matricaA = […]

将已过滤的Excelsheet复制到VBA中的多个数组中

我已经在这里和那里读了关于SpecialCells(xlCellTypeVisible)的一些信息,但是我没有设法将它join到代码中。 我想复制一个具有多个列和行的过滤的Excel工作表到数组中,而不使用新的工作表来复制它。 目前这是我的代码(未经过滤的工作表): For i = 1 To LastRow For j = 1 To 9 strArray(i, j) = Cells(i, j).Value2 Next j Next i 任何提示或线索如何做到这一点?

读到一个Excel文件

我正在尝试使用C#读取Excel表,并将每行存储到数组中。 我能够打开文件,但我正在使用的代码读取到“2D对象”数组,但我想阅读信息到1Dstring数组。 static void Main(string[] args) { // Reference to Excel Application. Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(Path.GetFullPath("excelpractice1.xlsx")); // Get the first worksheet. Excel.Worksheet xlWorksheet = (Excel.Worksheet)xlWorkbook.Sheets.get_Item(1); // Get the range of cells which has data. Excel.Range xlRange = xlWorksheet.UsedRange; // Get an object array of all of the cells in the […]

Excelrecursion过程来创build一个数组

我有以下数据: 我的目标是做到这一点: recursion子将创build一个填充材料的数组。 每次将材质设置为“精雕细琢”时,该arrays将在同一维度上添加另一个子材质,并添加“.1”。 例如:如果我们看弓,它是精心devise的,所以当完成时数组看起来像这样:Material:array(0,0,0)= Wood,Quantity:array(0,0,1)= 2,Level:array (0,0,2)= 1。 但是,子代会变成:材料:array(0,1,0)=分支,数量:array(0,1,1)= 2,Level:array(0,1,2)= 1.1 并且由于分支是制作的:材料:数组(0,2,0)=树,数量:数组(0,2,1)= 1,级别:数组(0,2,2)= 1.1.1。 然后:材料:数组(0,3,0)=叶,数量:数组(0,3,1)= 9,级别:数组(0,3,2)= 1.2。 然后查找下一个材质“Rope”并继续:Material:array(1,0,0)= Rope,Quantity:array(1,0,1)= 1,Level:array(1,0,2 )= 1,材料:array(1,1,0)= Web,Quantity:array(1,1,1)= 10,Level:array(1,1,2)= 2.1等等。 我的主要问题是我不熟悉recursion代码,我的逻辑似乎是错误的,所以我想我会寻求帮助,并问在这里如何可以做到。 这是我的代码到目前为止,这是部分工作: Sub Look(ByRef arrayMaterials) Dim item With ActiveSheet lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With With ActiveSheet lastColumn = .Cells(j + 2, .Columns.Count).End(xlToLeft).Column End With For i = 0 […]

将string数组插入到Excel表单中

我有一个[,]string数组是40行乘40列项目。 我试图把它们写入Excel表格,但是输出在每列的第一行写入相同的单词。 我究竟做错了什么? public static void writeToFile(this string [,] result) { try { //open instance of excel Microsoft.Office.Interop.Excel.Application app = null; app = new Excel.Application(); app.Workbooks.Add(); Excel._Worksheet sheet = app.ActiveSheet; sheet.Name = "Sheet 1"; int resultCount = result.Length; for (int i = 0; i < 40; i++) { for (int j = 0; j < […]

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

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

如何使用数组公式计算excel 3d数组中的列,然后行,然后列

我正在Excel中构build一个计划工具。 这包括具有开始和结束date的任务列表以及可以分配给每个任务的人员。 为了能够将这些数据输出到我们的预算系统中,我需要能够计算在特定月份内预订的工作人员时间的百分比(总计所有任务)。 我可以使用下面的公式计算一个工作人员在一个特定的任务中可用的时间量: =SUM(INDEX(WorkdayArrayMonCol,MATCH(B2,WorkdayArrayDateCol)):INDEX(WorkdayArrayFriCol,MATCH(C2,WorkdayArrayDateCol))*TRANSPOSE('Staff Profile'!$B$13:$B$17)) 这对于单个任务来说很好,但是我需要一个等效的工作来完成一系列的任务。 我的尝试目前看起来像这样: =IFERROR(MMULT(MMULT(TRANSPOSE(ROW(INDEX(WorkdayArrayMonCol,MATCH(B2:B12,WorkdayArrayDateCol)):INDEX(WorkdayArrayFriCol,MATCH(C2:C12,WorkdayArrayDateCol)))^0),INDEX(WorkdayArrayMonCol,MATCH(B2:B12,WorkdayArrayDateCol)):INDEX(WorkdayArrayFriCol,MATCH(C2:C12,WorkdayArrayDateCol))),'Staff Profile'!$B$13:$B$17),0) + Ctrl + Shift + Enter 公式使用索引/匹配查找B2:B12 (task start date) and C2:C12 (task end date) : 如果任务超出当前月份范围,则使用0 (0/01/1900) 。 这些search表WorkdayArray 具有6列Date,Mon,Tue ….到Fri,然后返回date范围的二维数组,其中包括将每个工作日的多less个值加在范围内的值。 准确地捕捉公众假期是必要的。 这个二维数组然后乘以工作人员的工作可用性,这是在'Staff Profile'!$B$13:$B$17 ,这五个值中的每一个都是0> => 1代表周一到周五。 例如,如果他们星期二工作了半天,但在本周剩下的时间里工作一整天,5个单元看起来就像{1,0.5,1,1,1} 。 使用这里张贴的技术: 如何使用数组公式来在Excel中返回一个和数组我已经设法得到它压缩到一个向量,但我不能得到它总结最后的总和。 使用上面的公式,输出为{8.5;4;2;2;0;0;0;0;0;0;1} ,这是每个任务可用的工作日,但是我试图将这个结果数据连接的MMULT技术, SUMPRODUCT , SUM或SUMIF保持返回相同的数据: {8.5;4;2;2;0;0;0;0;0;0;1} 由于这个计算将在每个财政月份(y)重复进行,因此在每个工作人员(x)中,通过使用(z)表单来执行3D excel表示是不可行的,因为x,y和z中的每一个都不切实际。 我宁愿不使用VBA,我已经足够接近,似乎应该可以使用公式。 非常感谢! 编辑:一个单一的版本重新扎克的请求(相同的公式,调整参考): 单页版本: 。 […]

在Excel VBA中对二维数组进行sorting

美好的一天, 我正在尝试根据第一列的内容对2D数组进行sorting。 我发现这个代码“QuickSortArray”似乎是解决scheme: sortingVBA中的multidimensional array 虽然我不能让它为我的例子工作。 我的例子是: Sub test() Dim TestArray1(1 To 4, 0 To 1) As Variant Dim TestArray2 TestArray1(1, 0) = 108 TestArray1(2, 0) = 109 TestArray1(3, 0) = 106 TestArray1(4, 0) = 110 TestArray1(1, 1) = 10 TestArray1(2, 1) = 5 TestArray1(3, 1) = 15 TestArray1(4, 1) = 2 TestArray2 = QuickSortArray(TestArray1, […]