Tag: 数组

粘贴vba数组

我有这个代码将填充一个数组 Sub rangearray() Dim arr() As Variant Dim Rng As Range Dim myCell As Range Dim i As Integer Set Rng = ActiveSheet.Range("G10:G14") For Each myCell In Rng ReDim Preserve arr(i) arr(i) = myCell i = i + 1 Next myCell ActiveSheet.Range("H10:H14") = arr() End Sub 在这里您可以看到监视窗口中的值是已经加载的值 除了将数组添加回工作簿时,它只粘贴数组的第一个元素。 是否有可能将整个数组粘贴到工作表而不必循环访问数组? 更新看了从Sorceri的链接后,我已经修改了代码使用.Transpose函数,所以我修改后的代码现在看起来像这样: Sub rangearray() Dim arr() As […]

Excel for Mac 2011:UBound()不起作用

我正在为Excel 2011 for Mac 2011制作现有的启用macros的电子表格function。 我有一个函数( 源 )search数组指定的值: Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function 它适用于Excel 2013,但在Excel 2011 for Mac 2011中,我收到错误消息: Runtime error '9': Subscript out of range 我把它弄坏了,发现UBound调用是导致错误的原因。 我想尽可能less地改变可维护性。 我怎样才能解决这个错误的Mac版本? 在此先感谢您的答复! 编辑: @Siddharth Rout的解决scheme是现货,但由于我在一个循环内search数组,我不得不修改循环重置每次迭代之间的数组如下(以防其他人遇到相同的问题!): ' — START Reset Array for OS X — Dim […]

Excel VBA – 分配数组更改LBound和UBound

我在Excel中有一些非常大的数据集,我需要parsing – 在数组中执行比在工作表中循环数据更快。 将所有数据加载到数组中导致内存问题(数据集ARE很大),所以我打算将数据的子集加载到数组中,处理该数据,然后加载另一个子集。 我希望使用定义LBound和UBound的数组“function”来帮助我跟踪工作表中的位置。 但是我发现将工作表值分配给数组会改变界限。 下面的代码演示了这个问题… Sub myTest3() Dim myRange As Range Dim myArray As Variant Dim myOffset As Long myOffset = 10 Set myRange = Worksheets("RawData").Range("A1").CurrentRegion ReDim myArray(myOffset To myRange.Rows.Count, myRange.Columns.Count) MsgBox LBound(myArray, 1) & " to " & UBound(myArray) Set myRange = myRange.Offset(myOffset, 0).Resize(myRange.Rows.Count – myOffset, myRange.Columns.Count) myArray = myRange.Value2 MsgBox LBound(myArray, […]

Excel不正确的数组公式用法说明

这是我的数据 Region Value East 9800 East 5592 East 6966 West 5418 当我做 =AVERAGE(IF(A2:A5="East",B2:B5)) CTRL+SHIFT+ENTER 我明白了 7452.667 这是正确的答案。 但是当我这样做 =AVERAGE(IF(A2:A5="East",B2:B5)) ENTER 我没有得到一个错误。 我明白了 6944 如果我只是键入 =IF(A2:A5="East",B2:B5) ENTER 我明白了 9800 所以6944不是9800的平均值。Excel在这里做什么? 当我做 =IF(A2:A5="West",B2:B5) ENTER 我明白了 FALSE 所以它看起来像IF正在读第一行..但是然后奇怪发生平均(如果()) 我有一个/两个问题和一个祈祷: 问题:到达6944的最佳做法是什么? 为什么我没有得到一个错误,当我做了而不是CTRL + SHIFT + ENTER,有没有什么办法提醒excel告诉我在处理数组时做正确的事情? 祷告:我只希望在过去的几个星期里,我没有产生大量的垃圾,当时我忽略了CTRL-SHIFT-ENTER,错误地完成了回车,没有得到任何的错误,并用我所得到的来运行。

VBA – UDF处理数组的方式不同

这个代码是我正在工作的一小部分。 我已经把问题缩小到了下面的内容。 我有这个UDF SampleFunction,我需要传递一个数组{3; 4}作为唯一的参数。 Function SampleFunction(InputVar As Variant) As Integer SampleFunction = InputVar(LBound(InputVar)) End Function 我以两种不同的方式调用这个UDF。 首先,通过VBA 情况1: Sub testSF() MsgBox SampleFunction(Array(3, 4)) End Sub 其次,通过我的Excel工作表 案例2: ={SampleFunction(ROW(3:4))} – >即作为数组函数。 问题: UDF适用于案例1,即通过VBA进行的调用,当我通过excel工作表调用时,它给出了案例2的#VALUE错误。 我在Lbound(InputVar)情况下使用了F8的functionLbound(InputVar)计算结果为1(与从案例1中的sub调用的不同,它的计算结果为0),而InputVar(Lbound(InputVar))显示“超出范围“错误的情况2。 我只想知道如何从工作表中调用SampleFunction函数 ,即Case 2,以便它具有与上面的Case 1相同的行为。 作为奖励,如果有人可以解释为什么在上述情况下, Lbound(InputVar)评估方式不同,那将会很不错。 其他一些细节: 我正在构build一个UDF来执行一些正则expression式操作。 上面的InputVar参数将是一个数组{x; y; z; …},指定xth,yth,zth …的出现次数。 InputVar的数据types保持为Variant,因为我希望能够将数字(作为一个长度数组),数组或范围(取入并转换为数组)传递给该函数。 提前致谢!!

在Excel VBA中过滤2D数组

使用Excel和VBA,我想了解如何最好地过滤数组中的数据(采用与数据透视表相同的方式),严格使用VBA。 我正在创build一个用户窗体,它将根据当前存在的数据做出一些数据决定。 我可以想象如何做到这一点,但不熟悉VBA编程。 这是一个例子 ABC bob 12 Small sam 16 Large sally 1346 Large sam 13 Small sally 65 Medium bob 1 Medium 要获取数组中的数据,我可以使用 Dim my_array As Variant my_array = Range("A1").CurrentRegion 现在,我熟悉循环2D数组,但我想知道: 什么是最有效的方法来过滤二维数组数据 (不循环数组一次又一次)? 例如,我怎么会得到这样的数据: data_for_sally As Variant 'rows with sally as name in ColA data_for_sally_less_than_ten As Variant ' all rows with sally's name in […]

Excel – 数组公式跳过空单元格

我有一个数组公式来填充单元格,当它包含文本,但我希望它忽略单元格,如果它的空白,并转到下一个。 我遇到的问题是,它没有按照我的例子来做: 范围是 -A -(BLANK CELL) -(BLANK CELL) -D -E -F -(BLANK CELL) -H -(BLANK CELL) 从公式得出结果 -A -E -F -H 它正在跳过包含字母的单元格。 有人可以帮忙? 式: {=IF(ISERROR(SMALL(IF(B4:$B$12<>"",ROW(B4:$B$12)),ROW(B4:$B$12)-3)),"",INDEX(B4:$B$12,MATCH(SMALL(IF(B4:$B$12<>"",ROW(B4:$B$12)),ROW(B4:$B$12)-3),IF(B4:$B$12<>"",ROW(B4:$B$12)),0)))}

数组大小限制在VBA中传递数组参数

Excel-VBA 2007似乎对作为parameter passing的数组大小有64k的限制。 有谁知道一个修复或解决? 代码如下: Public Function funA(n) Dim ar() ReDim ar(n) funA = ar End Function Public Function funB(x) funB = UBound(x) End Function 从Excel: =funB(funA(2^16-1)) '65536 as expected =funB(funA(2^16)) 'Gives a #VALUE 在里面,funA()工作正常,但传递给funB,参数x是一个错误2015年。

在VBA中,如何使用函数返回数组/或写入单元格?

使用这个非常简单的function: Function WriteArray() as Variant Dim array(0 To 2) array(0) = "A" array(1) = "B" array(2) = "C" WriteArray = array End Function 我期待在Excel电子表格中看到整个数组的结果,但事实并非如此:我只得到第一个string。 我知道有一种方法可以在电子表格中显示整个数组(通过使用公式+ F2 + CTRL + SHIFT + ENTERselect一系列单元格),但我更喜欢VBA来处理这一切。 我也尝试使用Application.Callervariables直接写入“调用者”范围,但代码中断。 非常感谢你的帮助! 编辑:这是我尝试使用的另一个代码: Function WriteArray() As Variant Dim arr(0 To 2) arr(0) = "A" arr(1) = "B" arr(2) = "C" WriteArray = arr […]

奇怪的行为时分配一个Excel范围的公式的VBA数组

这是奇怪的…有人有一些知识或可以找出为什么发生这种情况? 在过去,我能够给Excel范围分配一组公式数组( 范例 Range("A1:A1000") = ArrayOfFormulas )。 这是工作正常和快速 ( 非常 快 )相比,分配逐个单元格( 例如单元格: Range("A" & i).Formula=ArrayOfFormula(i)在一个循环内,慢! )。 现在我正在使用Excel 2013,当试图将存储在string数组中的公式存储到Excel范围时,它不起作用(Excel中显示的是公式,而不是下面图片的左侧部分)不幸的是我不能检索旧的代码进行比较。 例如,以下代码在范围A1到A1000中显示“= 1 + 2”而不是“3”。 Sub AssignFormulas_1() Dim i as Long Dim FORML_ARRAY(1 To 1000, 1 To 1) As String For i = 1 To 1000 FORML_ARRAY(i, 1) = "=1+2" Next i Range("A1:A1000").Formula = FORML_ARRAY '<- Don't […]