Tag: 数组

Excel VBA如何用多个Excel范围的值填充多维(3d)数组?

我想从Excel工作表中存储的数据填充一个3d数组。 我希望我只是不知道语法,但是可能无法像使用2D数组一样将值分配给3D数组。 如… Dim 2DArray() As Variant 2DArray = Range(A1:C10) 这是干净而高效的,我希望有相当的东西,而不是使用3个嵌套for-next循环来一次填充数据的一个值。 为了背景,这是查找/内插气体压缩因子Z,其取决于比重,压力和温度。 我有6个表(实际上只是命名范围)为6个不同的比重值。 每张表的压力和温度与Z因子交叉列表作为数据点。 这是我有的代码(这是行不通的): Sub Array3DTest() Dim ZTables() As Variant ReDim ZTables(1 to 6, 1 to 15, 1 to 9) '6 specific gravity tables, '15 pressure indices, 9 temp indices 'Here is my feeble attempt to guess the syntax… 'ZTables = ("tblZFactorSG1", "tblZFactorSG2", "tblZFactorSG3", […]

ReDim在Excel VBA中用multidimensional array保存

我可以得到这个工作,但不知道这是否是正确的或最有效的方式做到这一点。 详细信息:遍历151行,然后将这些行的列A和B仅分配给基于列C条件的二维数组。 根据标准,在arrays中只需要151行中的114个。 我知道,使用ReDim Preserve,您只能调整最后一个数组维度,并且不能更改维数。 所以我已经使用LRowvariables调整了数组中的行的总数为151行,但是我只需要在数组中的实际行数在variablesValidRow所以看起来(151-114)= 37多余的行在数组中作为ReDim保留线的结果。 我想使arrays只有它所需要的那么大,这是114行不是151,但不知道这是可能的,看下面的代码和任何帮助非常赞赏,因为我是新的arrays,花了两个最好的部分天看着这个。 注意:列是一个常量没有问题,但行不同。 Sub FillArray2() Dim Data() As Variant Dim ValidRow, r, LRow As Integer Sheets("Contract_BR_CONMaster").Select LRow = Range("A1").End(xlDown).Row '151 total rows Erase Data() For r = 2 To LRow If Cells(r, 3).Value <> "Bridge From" And Cells(r, 3).Value <> "Bridge To" Then ValidRow = ValidRow + 1 ReDim […]

查找一个string是否在二维VBA Excel数组中

我有一个伟大的function,我所有的时间用于检查一个string是否在一个数组中的一维Excel VBA数组: Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = (UBound(Filter(arr(), stringToBeFound)) > -1) End Function 不幸的是,它使用它来检查一个2维数组,如我在这里不工作: Sub new_idea_filter() home_sheet = ActiveSheet.Name c = 1 Dim myfilters(1 To 4, 1 To 5000) myfilters(1, 4) = "Test" If IsInArray("Test", myfilters()) = True Then killer = True End If End Sub Function IsInArray(stringToBeFound As […]

索引/匹配三个标准

我search了search和search,我只能用两个标准find索引/匹配的解决scheme。 有没有人有三个标准的索引/匹配的解决scheme? 作为我实际数据的一个样本,我想索引/匹配年份,types和名称以查找月份列中的数据

我怎样才能将值之间的空白空间添加到VBA数组?

我通过循环表单中的单元格(originalWS)在vba中创build一个数组。 我们假设单元格(2,5)到(2,12)具有以下内容: (2,5)Item (3,5)Type (4,5)Nominal Diameter (5,5)Lead . . . (12,5)For Use with End Blocks 因此,当我循环下面的代码,我得到一个数组,看起来像这样: [项目,types,公称直径,导程,…,用于端块]。 不过,我想在我的数组中的每个值之间添加两个空的空格。 所以它看起来像这样: [Item,“”,“”,Type,“”,“”,“公称直径”,“”,“”,“Lead”,“ ReDim propertyArr(1, lastRow) For i = 1 To lastRow propertyArr(1, i) = originalWS.Cells(i + 1, 5).Value Debug.Print propertyArr(1, i) Next 我已经尝试循环到数组的最终总大小,所以(lastRow * 3),并向前走了3.但是,我很难搞清楚我将如何重置我的原始WS.cells(我,5)值,以便它们是连续的。 换句话说,当我循环步进3我的价值观将是: propertyArr(1,1) = originalWS.Cells(2,5).value propertyArr(1,4) = originalWS.cells(5,5).value propertyArr(1,7) = originalWS.cells(8,5).value 我怎样才能循环,以便我每两个地方在我的数组中存储值,而我从表单中的连续列表中获取值。 我可以做到这一点,而无需添加额外的空行的方式来添加两个空的空间之间的原始循环中的每个值,而不必添加额外的空行? […]

我可以在函数参数中使用“If”语句吗?

我想在我的VBA代码中使用一个IF语句,我调用一个函数并传递给它两个参数。 我需要IF语句的原因是因为参数是我传递给函数的数组对象。 以下是包含该问题的代码的缩写: For i = 1 To UBound(FilterArray) For j = LBound(ptsheets, 1) To UBound(ptsheets, 1) Filter_PivotField_Master _ pvtField:=ThisWorkbook.Worksheets(ptsheets(j, 1)).PivotTables(ptsheets(j, 2)).PivotFields(FilterArray(i, 1)), _ FilterTypeArray:= If FilterArray(i, 2) = 1 Then InvCodeArray Else BoardMonthArray End If Next j Next i 正如你所看到的,我正在循环访问ptsheets数组,并为每个条目调用Filter_PivotField_Master函数。 该函数需要两个input(一个pivotfield和一个string数组进行过滤)。 名为“FilterArray”的数组仅包含传递给函数所需的信息。 因为我似乎无法在“FilterArray”中存储string数组(“InvCodeArray”或“BoardMonthArray”),所以我想使用这个IF语句来select基于FilterArray(i,2)是否等于“1”或不。 在这里可以使用“IF”语句选项吗?

如何将过滤的范围复制到数组中? (Excel VBA)

我使用此公式将A列中的唯一logging复制到B列中。 Range("A1", Range("A100").End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B1"), Unique:=True 而不是将其复制到列B如何将过滤的结果放入Excel VBA中的数组?

你可以直接在excel VBA中声明锯齿状的数组吗?

在我的项目中,我工作了很多锯齿状的数组,即元素也是数组的数组。 直到知道我只设法这样定义这些数组: dim subarray(1 to 3) as Integer dim MyArray(1 to 5) as Variant subarray(1) = 40 subarray(2) = 50 subarray(3) = 60 MyArray(1) = subarray 但是我想要做这样的事情: dim MyArray(1 to 5)(1 to 3) as Variant/Integer MyArray(1)(1) = 40 上面的例子不能编译。 有没有类似的,有效的方式来直接声明嵌套数组? 编辑:正确的术语是“锯齿状数组”而不是“嵌套数组”。 编辑2:编辑示例值,以防止索引和值之间的混淆。

Excel / VBA太多的行延续

我在excel / vba中有大量的列标题当我超过24行时,它说太多的行延续。 我真的需要其余的列标题,因为代码必须查找我需要的每一个列标题。 有什么build议么? myHeaders = Array(Array("Account_ID", "Account_ID"), _ Array("Claim_ID", "Claim_ID"), _ Array("Account_Name", "Account_Name"), _ Array("Claim_Type", "Claim_Type"), _ Array("Coverage", "Coverage"), _ Array("Claim_Level", "Claim_Level"), _ Array("Claim_Count", "Claim_Count"), _ Array("File_Date", "File_Date"), _ Array("File_Year", "File_Year"), _ Array("Resolution_Date", "Resolution_Date"), _ Array("Resolution_Year", "Resolution_Year"), _ Array("Claim_Status", "Claim_Status"), _ Array("Indemnity_Paid", "Indemnity_Paid"), _ Array("Disease_Category", "Disease_Category"), _ Array("State_Filed", "State_Filed"), _ Array("First_Exposure_Date", "First_Exposure_Date"), _ […]

数组下标超出范围

我正在创build一个macros,它将从较大的工作簿中select工作表,将这些工作表移动并保存为新的工作簿,然后转到下一个工作簿。 我创build了一个具有开始和结束值的伪“数组”(由图纸索引号指定)。 在完成保存文件的部分之后,但是在将会拉下一组工作表的循环之前,遇到“下标超出范围”错误。 以下是我的代码。 任何帮助,这个错误将不胜感激。 Dim Start As Integer Dim Finish As Integer Dim SR As Integer Dim SC As Integer Dim ER As Integer Dim EC As Integer SR = 2 SC = 5 ER = 2 EC = 6 Start = Sheets("REF").Cells(SR, SC).Value Finish = Sheets("REF").Cells(ER, EC).Value Dim sheetArray() As Double Dim i […]