Tag: 数组

将VBA数组传递给公式

我有两行数据看起来像这样: 我正在尝试返回数组中每个ID的所有位置编号。 我努力了 ={IF(A2:A562=E2,B2:B562)} 但是,只要我search的ID不是列A中的第一个,就会失败。(我的确尝试对列A进行sorting,但没有运气)。 所以我想出了这个解决方法:相反,我会使用这个公式 ={INDEX(B2:B562,positions(E2))} 其中positions是一个VBA函数,返回与指定ID相匹配的行数组。 functionpositions被编码,以便返回一个Variant 。 但是,似乎VBA数组没有通过Excel中的公式。 当我评估公式时, positions(E2)等于0.(我在VBA中检查过,而且我的数组已正确填充)。 那么如何让我的公式正确解释VBA数组呢? 更新:这是我的代码: Function positions(idrange As Range) As Variant Dim V As Variant Dim l, nb As Integer Dim id As Double nb = 4 ReDim V(nb) As Variant id = idrange.Value Set cible = Sheet2.Range("B1") For l = 1 To nb Set […]

Excel vba和arrayformula

我试图从一个数组公式到VBA中的值。 简单的例子:我有一个单元格(比方说D1),其中有一个数组公式 = A1:A10 * B1:B10当我在电子表格上突出显示,然后按F9我会得到一个10个数字的数组,例如= {5; 12; 15; 24; 25; 24; 42; 40; 54; 70} 我想能够将这些值存储在VBA数组中:a(0)= 5,a(1)= 12,a(3)= 15等; 你明白了。 试图寻找这个答案,但即使在MSFT上也找不到任何相关的东西。 关于如何从VBA转到工作表范围(我知道这一点)的很多答案,但不是这样。 看着试图通过一个ParamArray(元素的数量不会被固定),通过直接分配给一个未经调整的数组,并通过EVALUATE(范围),但我不能得到任何这些工作。 我觉得我必须失去一些明显的东西。

将数组值赋给VBA中的variables会导致我的UDF退出

我似乎无法弄清楚为什么这个UDF正在currentInput = inputArray(i)上退出。 这是相关的代码: Function OrderRange(inputRange As Range) As Variant Dim length As Integer inputHeight = inputRange.Count Dim inputArray As Variant inputArray = inputRange Dim strippedArray() As Variant ReDim strippedArray(0 To (inputHeight – 1)) Dim currentInput As String Dim i As Integer For i = 0 To (inputHeight – 1) currentInput = inputArray(i) '…computations on […]

使用VBA获取VBA中使用的唯一值?

我现在会用Range,Cells或者类似的东西,用很多不同的方式来做同样的基本原理。 Range("A1", Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=Range("IV1"), Unique:=True Dim myArr as Variant myArr = Range("IV1", Range("IV1").End(xlDown)) Columns("IV").Delete 有没有办法直接加载这些唯一的值到任何types的对象在VBA中,而不需要复制到另一个位置?

我怎样才能sortingdate在VBA数组?

嗨,我是编程新手,刚开始学习Excel的VBA。 我有一个关于数组sorting的查询。 如何sorting包含date的数组? 例如,如果我有一个包含date(“23-jul-13”,“11-jan-10”,“1-may-09”,“3-feb-04”)的数组,我该如何sorting这个数组。 我已经search了所有的互联网上的答案,但只能find代码sorting数字。 这两天我一直在绞尽脑汁,但似乎无法得到它。 谢谢 我有下面的代码所需的date从选定的列,但我遇到一个错误,每当我运行它。 我一直在试图找出2天内有什么问题。 我之前没有提到这个代码,但是它不必要地增加了混淆。 子GetUniqueAndCount工作正常,但它是sorting子是这个问题,因为它不接受传递给它作为参数的数组。 Sub GetUniqueAndCount() Dim d As Object, c As Range, k, tmp As String Set d = CreateObject("scripting.dictionary") 'I will select the column of dates For Each c In Selection tmp = Trim(c.Value) If Len(tmp) > 0 Then If Year(DateValue(Format(tmp, "dd-mmm-yy"))) = 2013 Then d(tmp) […]

ReDim现有的数组与第二维?

我在我的VBA函数中声明了一个具有dynamic大小的数组。 因为我不能ReDim二维或更multidimensional array的第一维,我可以添加第二维到一个数组? 这是我如何dynamic地设置我的数组的大小。 Dim nameArray() As String Dim arrayCount As Long For i = 1 To 100 ReDim Preserve nameArray(1 to arrayCount) nameArray(arrayCount) = "Hello World" arrayCount = arrayCount + 1 Next i 现在我想添加第二个维度。 ReDim Preserve nameArray(1 To arrayCount, 1 To 5) 不起作用。 有没有解决方法?

在数组中重复N次

使用Excel VBA。 我试图创build一个像这样的重复模式的数组: a = Array(1,1,1,1,1,2,2,2,2,2,2) 有没有一个整洁的解决scheme(没有经过一个循环)来做到这一点? 在几乎所有其他统计语言中,这都是通过重复函数来完成的。 例如R中的“rep”函数或者Matlab中的“repmat”函数: a = [repmat(1,1,5),repmat(2,1,6)] 首先不硬编码的原因是因为实际的数组具有不同的长度,取决于其他一些variables。

将范围传递给Excel用户定义函数并将其分配给数组

我在尝试着 将两个范围( 多行单列)传递给Excel 2007中的用户定义函数, 然后将其分配给一个数组进行处理。 任何人都可以告诉我如何将这样的范围分配给一个数组? 范围不是常量,因为我在不同的单元格中使用UDF来处理不同的数据,所以我不能使用e,g, Range("A1:A10") 当我使用Data1.Rows.Cells(i, 1)而不是数组时,代码正在工作。 但是我认为使用一维数组来提高效率更好。 这是我目前的代码 Function Sample(Data1 As Range, Data2 As Range) As Double 'Size of Data1 and Data2 Dim rows As Integer rows = Data1.Rows.Count 'Declaring two one dimensional arrays Dim data1Array(rows) As Double — Getting error here Dim data2Array(rows) As Double — Getting error here Dim […]

如何返回数组中的array()函数在单元格中使用数组公式(matricial公式):用于在多单元格中分割texte

我正在写一个函数在VBA中在Excel公式中使用,没关系,如果我的函数返回一个单一的值: =MYVALUE(A1) 现在我写了另一个函数返回一个数组(1,2,3,4,…),我用数组公式replace我的Excel公式: {=MYARRAY(A1)} 但是当我拉伸公式时,所有的单元格显示我的数组的第一个值 。 为什么? 这是我的VBA源代码(complement.xlam): Function MYVALUE(x as integer) MYVALUE = 123 End Eunction Function MYARRAY(x as integer) MYARRAY = Array(10,20,30) End Eunction

数组公式到VBA

我有一个名为“城市”和“数据”的Excel工作表。 “数据”页面包含108264行数据,列一直向上到列AT。 在“城市工作表”下,我列出了从B4到B214行的210个城市。 在它旁边(C列)列出了每个城市使用的代码数(即该城市使用了多less代码)。 接下来的20列(D列到W列)应显示每个城市最常用的代码序列(即最不常用的最常用代码)。 我用样本伪数据集附上图像,以提供我所指的内容的graphics表示。 如果你看城市“1”例如(第4行“城市”),你会发现它有5个计数,最常用的代码是5,然后是4,然后是3,然后是2,最后是1。如果你参考“数据”图像,你可以看到相关性。 我用于这个样本集的数组公式如下: 在“城市”的D4中, {=IFERROR((MODE(IF(ISNUMBER(SEARCH(B4,Data!$B2:$B6)),IF(ISNUMBER(Data!$K2:$AT6),Data!$K2:$AT6)))),"")} 在“城市”的E4中, {=IFERROR(MODE(IFERROR(SMALL(IF(ISNUMBER(SEARCH($B$4, Data!$B2:$B6))*ISNUMBER(1/Data!$K2:$AT6)*ISNA(MATCH(Data!$K2:$AT6,$D4:D4,0)),Data!$K2:$AT6,""),ROW(INDEX($A:$A,1):INDEX($A:$A,COUNT(Data!$K2:$AT6)))),"")),"")} 然后从E4开始拖动公式,并根据前一列的数据自动计算常用代码的频率。 目的是这样的:对于“城市”工作表中提到的每个城市,我想通过从“数据”工作表中search列B和列K到AT来返回这20个最常用的代码。 所以它会查看B列中的城市,然后查看列K到AT中常用的代码。 我有两个数组公式,我用这个(即计数最常用的代码,比取决于前一列的值,返回下一个最常用的代码)。 问题是,由于如此庞大的数据集,为每个单元格创build一个数组公式会耗费大量时间,并会显着降低Excel电子表格的速度。 所以,这是我迄今为止所尝试的: 数组公式(请参阅附表) 在VBAs之下。 第一个返回运行时错误“1004”无法设置范围类的FormulaArray属性 ,而第二个什么都不做。 任何build议或帮助加快arrays公式,或相应地修改VBA将不胜感激。 如果你有一个备用的VBA,那也是值得赞赏的。 谢谢。 Sub Option1() Dim r As Long For r = 4 To 214 Sheet2.Cells(r, 210).FormulaArray = _ "=IFERROR((MODE(IF(ISNUMBER(SEARCH(C" & CStr(r) & ", Data!$B$2:$B$108264)),IF(ISNUMBER(Data!$K2:$AT108264),Data!$K2:$AT108264)))),"")" Next r End Sub Sub Option2() Sheet1.Range("C4").FormulaArray […]