Tag: 数组

如果Excel中的某个单元格包含数组公式(例如`= {1,2,3}`),我可以使用VBA提取数组的元素

就像标题所说,单元格A1包含公式={1,2,3} ,这是一个单元格的有效input,我可以使用VBA来获取数组的元素。 请注意, Range("A1").Value返回值1 ,但Range("A1").Formula返回string={1,2,3} 。 所以我能想到的唯一方法就是parsing公式,并将值与(如CSV行)分开。 在这种情况下,有没有其他方法可以返回vba中的数组值。 我甚至试图把它作为一个数组读入到v=Range("A1:A2").Value2的variables中, v=Range("A1:A2").Value2但v(1)只包含1 。

在表单被删除之后,数组variables不具有值

有人能解释为什么发生这种情况 我有一个数组variablesLoans(),它存储了几个稍后需要用于格式化数据透视表的string。 这些值从“基金名单”表中存储。 然后工作表被删除,但我仍然需要使用的值。 当我试图在工作表被删除后使用Loans()variables时,Excel返回一个对象所需的错误。 我发现解决这个问题的方法是不删除工作表,但是有人知道这是为什么吗? 相关代码如下。 Sheets("Fund List").Select ' some code Dim Loans() As Variant Dim index As Integer If LN > 0 Then ReDim Loans(LN – 1) index = 0 For i = 1 To LastRow If Range("H" & i).Value = 3 Then Set Loans(index) = Range("A" & i) index = index + […]

使用VBA将2维数组卸载到Excel工作表中的最快方法是什么?

我有一个运行很长的例程,因为在工作表中逐个单元格地写入值。 我以为我会很聪明,首先将所有内容加载到二维数组中,然后迅速将其转储到Excel表格中。 目标是加快速度。 发现我不能做我想做的事情。 xlsheet.Range("C2") = MASTER_OUT 发现以上不起作用。 MASTER_OUT是一个二维数组,有34列和不同的行。 我希望我不必循环访问数组,并在工作表中放置数据单元格,因为这样不会节省任何时间。

将1维数组写入单个列时出现错误

Sub Lottery() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim N As Long Dim xLot() As String N = 0 ReDim xLot(1 To 169911) For A = 1 To 27 For B = A + 1 To 28 For C = B […]

Excel VBA:复制几个数组之间的索引(Match())

我正在尝试自动化每月手动准备的报告,但是我有一些问题需要高效运行。 基本上,报告有4个input: 本月本年度至今花费和储蓄报告(按部件号)[70k行×4列] 本月零件号查找表[87k rows x 8 cols] 上个月年初至今花费和储蓄报告(按部件号)[60k行×4列] 上个月零件号查找表[77k rows x 8 cols] 正如你所看到的,这些信息量相当大(当然不是最大的)。 到今年年底,随着我们继续释放更多的零件数量,我预计这些表格会增长(也许是25%)。 我的目标是获得一个结合了所有这些input的数据表,并为一些列做一些简单的math计算。 以下是我的代码到目前为止: 'Store data from 4 data worksheets into arrays Dim arrPrevDMCRLookup As Variant Dim lngFirstPDLRow As Long 'PDL = Previous DMCR Lookup Dim lngLastPDLRow As Long Dim lngNumPDLRows As Long Dim lngNumPDLCols As Long lngFirstPDLRow = 2 'Does […]

Excel的INDEX函数可以返回数组吗?

如果范围A1:A4的数据如下所示: Apple Banana Orange Strawberry 然后, INDEX可以用来单独返回该列表中的任何值,例如 = INDEX(A1:A4,3) 会返回Orange 。 是否有类似的Excelfunction或function的组合,可以有效地让你做这样的事情: = INDEX(A1:A4,{2;3}) 哪个会返回一个数组{Banana;Orange} ? 这是可能的(最好没有VBA),如果是这样,如何? 即使使用辅助单元,我也很难搞清楚如何完成这个任务。 如果数据是数字(使用MMULT ),我可以找出一个有点复杂的解决scheme,但数据是文本的事实使我绊倒了,因为MMULT不适用于文本。

EXCEL VBA错误:“编译错误:预期数组”

谁能帮我? 我在处理Excel工作簿中的数组时遇到了编译错误(…:“Expected Array”)。 基本上,我有一个“母亲”arrays(2D,Varianttypes)和四个“宝贝”arrays(1D,双重型)。 被调用的子程序创build公共声明的数组,我的主macros最终用于显示目的。 不幸的是,婴儿arrays的最后阶段(给出了“编译错误:预期数组”)。 奇怪的是,如果我删除这个最后的婴儿arrays('最后' – 按照声明/定义的顺序),倒数第二个婴儿arrays开始放出。 这是我的代码: Public Mother_Array() as Variant, BabyOne_Array(), BabyTwo_Array(), BabyThree_Array(), BabyFour_Array() as Double 'declare may other variables and arrays, too Sub MainMacro() 'do stuff Call SunRaySubRoutine(x, y) 'do stuff Range("blah") = BabyOne_Array: Range("blahblah") = BabyTwo_Array Range("blahbloh" = BabyThree_Array: Range("blahblue") = BabyFour_Array End Sub Sub SunRaySubRoutine(x,y) n = x […]

Excelmacros整列到一维数组中

我有这样的数据表 ID Name ——————- B23 Max D27 Nads W34 sads A65 Robin C37 Harvard C65 Nivkai V87 adsdasd Q78 sadsad 我需要把所有的ID作为string放在一个“一维数组”中。所以我试了一下, Dim RowCount As Integer RowNumber = wb1.Sheets(1).UsedRange.Rows.Count Dim idArray() As String For j = 1 To RowNumber ID = wb1.Sheets(1).Cells(j, 1).Value ReDim idArray(j) idArray(j) = CStr(ID) Next j 我的主要目标是以这种方式使用此idArray在不同的工作表上应用filter wb2.Sheets(1).Range(Selection, Selection.End(xlDown)).AutoFilter Field:=1, Criteria1:=idArray(), Operator:=xlFilterValues […]

VBA缓慢写入数组以优化工作簿

只是想知道是否有人可以提供任何build议,可以提高我的代码写入数组的工作簿的速度。 我在一本工作手册中写了大约190万行数据到一张表,一次一页。 代码完成后,大约需要18个小时才能写入Excel工作簿,这似乎过分了。 这是设置。 我打开这样的工作簿: Dim ExcelAp As Excel.Application Dim ouputWorkbook As Excel.Workbook Set ExcelAp = New Excel.Application Set outputWorkbook = ExcelAp.Workbooks.Open("S:\Some Directory\Template.xlsx") 然后,我将数组中的工作簿的行加载到集合中,然后循环遍历工作簿中的范围以复制数组: For lonSheetOneCounter = 2 to 999999 outputWorkbook.Worksheets(1).Range(_ outputWorkbook.Worksheets(1).Cells(lonSheetOneCounter, 1).Address & ":" & _ outputWorkbook.Worksheets(1).Cells(lonSheetOneCounter, 21).Address).Value = _ outputCollection.item(lonSheetOneCounter – 1) Next lonSheetOneCounter 其他纸张的复印方法相同。 我已经将excel的工作簿和实例隐藏起来了,我已经将工作簿的计算转换为手动,并且也closures了屏幕更新,但是完成复制到新的工作簿还需要大约18个小时的时间。 我已经尝试为entier工作表制作一个2维数组,但是无论我使用哪种方法,当我尝试将该数组复制到工作簿时,我都会遇到“内存不足错误”。 我不确定是否还有什么可以做的,以减less错误,减less复制的时间,但如果有人有一个build议,我全部耳朵。 值得一提的是,这个macros被安置在另一个excel工作簿中,这个excel工作簿是从我试图复制的工作簿中分离出来的一个excel实例中运行的。 编辑:这里略有添加。 我注意到,我想引起注意的事情也使我认为有可能加快这一进程。 我注意到这个macros逐渐减慢。 第一个X的行数写得非常快,随着每一行的写入,下面的行似乎越来越慢… […]

根据应用于另一个vector的条件创buildvector

我对Matlab很新。 这似乎是一个简单的事情,我确定其缺乏经验,所以提前道歉。 基本上,我想用两行信息来覆盖另一个数据。 我有两行数据输出,例如: B = [1 2 3 4 1 2 3 4] C = [0 1 1 0 0 0 1 0] 然后,我设置新的行D和E将用于新的基于规则的输出: D=nan(1,8); E=nan(1,8); 我想用C中的值覆盖与B的值对应的D / E的单元格: 例如,对于B = 1,我想得到: D= [0 nan nan nan 0 nan nan nan] 而对于B = 3我想: E= [nan nan 1 nan nan nan 1 nan] 我目前的尝试是这样的(但它不工作): […]