Tag: 数组

Excel 2013 VBA:将数组写入表“应用程序定义的或对象定义的错误”

我收到以下错误消息: 运行时错误“1004”: 应用程序定义或对象定义的错误 当我试图写一个数组到工作表。 以下是相关的代码片段: 'Write data from arrUniverseData into wsDetails worksheet lngNumRows = UBound(arrUniverseData, 1) – LBound(arrUniverseData, 1) + 1 lngNumColumns = UBound(arrUniverseData, 2) – LBound(arrUniverseData, 2) + 1 Set rngDestination = wsDetails.Range("A" & lngFirstDetailsRow).Resize(lngNumRows, lngNumColumns) rngDestination = arrUniverseData 错误显示在最后一行。 我进行了三重检查:所有这些variables都是在程序中定义和正常工作的。 实际上,大约有50行代码使用这个相同的代码来写入不同的工作表,它工作得很好。 有趣的是,似乎这条线实际上是在尝试工作。 如果我查看wsDetails工作表,我可以看到它写了第6092行。 数组中需要写入总共〜14-15k行(有106列)。 这段代码工作得很好,当我只有104列(没有改变任何东西,除了数组大小,以适应新的数据集)。 这是一个内存/大小的问题? 如果有帮助的话,我会愿意在这里发布整个代码,但是这是相当重要的。 在此先感谢您的任何意见或build议! 编辑:这是整个过程,以防止它的帮助。 我真的在这里看不到任何错误: Option Explicit Sub […]

检查降序与数组公式(空格在范围内) – Excel

我试图确保一个数字列表按降序排列。 数组公式对于没有任何空白单元格的列表非常有用,但当空格出现时会中断。 我的数据在范围R6:R825 。 ={AND('Tab 1'!R6:R824>='Tab 1'!R7:R825)} 是否有可能公式执行相同的降序sorting检查,而忽略空白单元格?

如何创buildExcel VBA中的string数组并将其传递给子?

VBA数组对我来说是新的,似乎有多种方式来创buildstring数组。 我相信我需要创build一个dynamic数组 但我找不到任何示例如何将dynamic数组传递给子例程 我知道有多less项需要在用户范围的数量(所以也许我不需要dynamic数组?)。 我无法将数组传递给另一个子例程。 思考过程如下: 遍历用户名列表 为每个创build一个工作表 在迭代时将每个用户名保存在一个数组中 在另一个子程序中,select我创build的所有图纸并保存为PDF 以下是我的代码。 我得到运行时错误9 – 下标超出范围(引用数组对象) 我感谢任何帮助! 谢谢! Sub CreateAllDashboards(StartDate As Date, EndDate As Date) 'Used to iterate through the list of users and call the Sub to create Dashboards Dim UserNameRangeStart As Range Set UserNameRangeStart = Range("UserName") Dim SheetNames() As String 'Cyle through users For i […]

突出显示变体数组中的单元格

本质上,这段代码从一个工作表中的一个范围中取一堆值,并将它们粘贴到另一个相同范围的工作表中。 但是这更像是一个特殊的粘贴,因为这段代码只粘贴到空的单元格中,而不是已经包含另一个表单中的值的单元格。 这是使用不同的数组(我喜欢@Jeeped帮助我)我的问题是,我需要在运行代码时,在目标工作表中突出显示与源工作表中的值不同的单元格。 这是为了防止我为会计师事务所工作时的欺诈行为。 非常感谢你的帮助! 这是我到目前为止: Sub fill_blanks_from_source() Dim r As Long, c As Long, aSRCs As Variant, aDSTs As Variant With Worksheets("Sheet1") '<~~ source aSRCs = .Range("C6:R371").Value2 End With With Worksheets("Sheet2") '<~~ destination aDSTs = .Range("D9").Resize(UBound(aSRCs, 1), UBound(aSRCs, 2)).Value2 End With For r = LBound(aDSTs, 1) To UBound(aDSTs, 1) For c = LBound(aDSTs, 2) […]

显示数组中的一些值VBA excel

我试图根据第一行和第一列在我的Excel文件中显示多个值。 我已经为我的价值做了一个二维数组。 MyValue是一个InputBoxvariables,我遍历第一列试图findMyValue,我想获得在“ PSC ”,“ BCCH ”等列上的显示值,基本上与基于第一列的filter但只显示其他列的一些值。 我有这个操作的输出是在这个图像中: 然而,136,144和152是PSC值是在我的源Excel文件中的第2,3,4行,我不知道这些零是什么。 我想要将这些值互相叠加,我尝试了无偏移量方法,但如果我不使用它,则不会显示任何值。 Dim1 = wSht.Range("A2", wSht.Range("A1").End(xlDown)).Cells.Count Dim2 = wSht.Range("A1", wSht.Range("A1").End(xlToRight)).Cells.Count For i = 1 To Dim1 For j = 1 To Dim2 If wSht.Cells(i, 1) = MyValue Then If wSht.Cells(1, j) = "PSC" Then ReDim Preserve Matrice(0 To 5, 0 To Matrice_size) Matrice(0, Matrice_size) = wSht.Cells(i, j).value […]

Excel:通过单元格引用将数组parameter passing给公式

代码明智这似乎很简单,但我仍然卡在一个#VALUE。 我做了一个自定义的Excel函数,以一个数组作为参数,这个函数在使用时就像这样工作得很好:= countArray({3,5})会给出2(为了说明,实际的公式是不同的)。 但是,我想用作参数的实际数组包含在另一个单元格中(例如= {3,5})。 因此,我想调用函数= countArray(A1),使用包含我想用作参数的数组的单元格的引用,而不是直接包含数组,所以我可以使用一个和相同的公式。 有没有办法做到这一点? Cell formulas: A1: ={3,5} B1: =countArray({3,5}) B2: =countArray(A1) Function countArray(arr()) As Integer countArr = UBound(arr) End Function B1中的公式适用,B2中的公式不适用。 至于A1的内容,像这样放入Excel时,只显示3个单元格的值 – 因此我假设单元格实际上包含一个数组。 那么情况不是这样吗? 单元格是否可以包含数组作为它们的值(或从其他单元格引用这些数据)而不将其存储为分隔string并将其转换为数组? 编辑 :这已经过了几年了,所以也许我可以在我发布这个问题后尝试的道路上发表评论。 最初我尝试着在单元格JSON结构上进行操作,取得了一定的成功。 从那以后,我也发现最近的Power Query(自从Excel 2016本地集成以来)确实支持其“单元”中的列表结构,事实上也支持相关的function 。 我现在不再使用其中的任何一种(现在对Spark更感兴趣),但是希望这可以帮助别人绊倒这个问题。

条件SUM在EXCEL中使用多个表

我有一个表,我试图根据两个参考表的值填充。 我有各种不同的项目“1型”,“2型”等,每个项目运行4个月,并根据其生命周期的时间花费不同的金额。 这些成本计算如Ref Table 1所示。 参考表1 Month | a | b | c | d ——————————— Type 1 | 1 | 2 | 3 | 4 Type 2 | 10 | 20 | 30 | 40 Type 3 | 100 | 200 | 300 | 400 Ref Table 2显示了我未来3个月的项目时间表。 从1月份开始有两个新的,一个是Type 1 ,另一个是Type 2 。 2月份,我会有4个项目,前两个进入他们的第二个月,两个新的开始,但这次是1型和3型。 […]

arrays不一致

我在这里有一些数组代码很麻烦 – 如果我运行这个: Sub ArrayRunner() Dim PipeBArray() As Variant Dim i As Integer PipeBArray = ThisWorkbook.Sheets(1).Range("A1:A6").Value MsgBox Str(UBound(PipeBArray)) & Str(LBound(PipeBArray)) For i = LBound(PipeBArray) To UBound(PipeBArray) MsgBox PipeBArray(i) Next i MsgBox "Done!" End Sub 然后我得到错误9 – 下标超出范围在for循环的行 – 当我看着variables'我'它告诉我的值是一…所以这发生在for循环的第一个实例。 任何人都可以帮我看看我在这里做错了吗? 感谢大家。 乔

Excel VBA:具有variables和时间戳的二维数组

我希望下面的Sub过程将参数和时间戳每次执行时推送到一个二维数组。 Public Dim myArray() As Variant Public Sub mySub(argument) n = n + 1 //other code here ReDim Preserve myArray(1 To n, 1 To 2) myArray(n, 1) = argument myArray(n, 2) = DateTime.Now() End Sub 所以,基本上我想获得一个2列和n行的数组,第一列是过程中使用的参数,第二列是时间戳。 这个过程被一个函数调用,但函数返回#VALUE! 数组是空的。 这段代码有什么问题?

VBA嵌套循环效率

我正在试图find在VBA中执行任务的最快方法。 目前,我把它写成一个嵌套for循环,可以是非常缓慢的。 我循环了一个唯一的数字列表,并将它们与不同列表中的数字进行匹配。 如果我得到一个匹配,我将信息存储在一个multidimensional array中,因为可以有多个匹配,我想跟踪所有这些。 不幸的是,这意味着当使用for循环,如果只有1000个唯一的数字和5000个数字来寻找匹配我的循环可以最终迭代1000 * 5000 = 5000000次。 正如你所看到的,这可能会很快造成问题。 我问是否有更好的方法来处理这个问题,而留在VBA。 我已经做了所有的窍门,如设置screenUpdating到虚假和计算到manaul。 这是我的代码: For x = 0 To UBound(arrUniqueNumbers) Dim arrInfo() As Variant ReDim Preserve arrInfo(0) If UBound(arrInfo) = 0 Then arrInfo(0) = CStr(arrUniqueNumbers(x)) End If For y = 2 To Length UniqueString = CStr(arrUniquePhoneNumbers(x)) CLEARString = CStr(Sheets(2).Range("E" & y).Value) If UniqueString = CLEARString […]