【问题标题】:Excel VBA - write new rows to existing arrayExcel VBA - 将新行写入现有数组
【发布时间】:2016-06-24 00:06:20
【问题描述】:

我不知道如何做到这一点,所以任何帮助都会很棒。使用数组,我将逐行发送到 Excel 工作簿,该工作簿执行大量计算(太多无法编程)并吐出 13 个值,我想将它们存储到另一个数组中。这可能吗?

Dim aP() as Variant
Dim wbR as Workbook
Dim wsR as Worksheet
Dim i as Long

Set wbR = Workbooks.Open([directory])
Set wsR = wbR.Sheets("Sheet1")
aP = Application.Transpose(Activesheet.Range("A1:Z100"))
For i = 1 to 100
wsR.Range("A1:A26") = Application.Index(aP, [row(1:26)], i)
'this is where I need help. Want to paste range C1:C13 into another array,
'so that I can paste it back into the activesheet. I do not wish to paste it 
'straight back to the worksheet, but accumulate all the data into array and 
'and then paste the array into the activesheet
Next i

Exit Sub

【问题讨论】:

  • 是的,绝对有可能。发布您当前的代码,我相信人们会有建议。
  • 我已编辑问题以包含我当前的代码

标签: arrays excel multidimensional-array vba


【解决方案1】:

您似乎正试图让您的代码变得超级高效。我做了一些可能会加快速度的更改。

子 BuildArrayR100C26() Dim arData(99, 12) 暗淡计算 Dim i As Integer, j As Integer 将 wbR 调暗为工作簿 将 wsR 调暗为工作表 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual 设置 wbR = Workbooks.Open([目录]) 设置 wsR = wbR.Sheets("Sheet1") 对于 i = 0 到 99 wsR.Range("A1:A26").Value = Application.Transpose(ActiveSheet.Range("A1:Z1").Offset(i)) 应用程序.计算 arCalculations = wsR.Range("C1:C13").Cells(j + 1) 对于 j = 0 到 12 arData(i, j) = arCalculations(j + 1, 1) 下一个 接下来我 Sheet2.Range("A1").Resize(UBound(arData, 1), UBound(arData, 2)).Value = arData Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True 结束子

这一行将范围一次粘贴到 wsR 中。

wsR.Range("A1:A26").Value = Application.Transpose(ActiveSheet.Range("A1:Z1").Offset(i))

这个循环将你的计算复制到一个数组中

For j = 0 To 12
    arData(i, j) = wsR.Range("C1:C13").Cells(j + 1)
Next

关闭屏幕更新和计算

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

粘贴新数据后重新计算

应用程序.计算

【讨论】:

  • 看起来您只是将输入数据复制到 arData。我已经在我的代码中做到了 - aP = Application.Transpose(Activesheet.Range("A1:Z100"))。然后在一个循环中,我将一行 aP 粘贴到 wsR 工作表中,工作表进行计算,然后我需要另一个数组,该数组从 wsR 工作表和单元格(C1:C13)在同一个循环中添加一行,我要粘贴那个数组返回到活动工作簿,但 Sheet2
  • Thomas - 如果我错了,请纠正我,但是你的循环是否将计算复制到一个数组中,它是逐个单元格地进行的吗?如果是的话,是否可以做C1到C13的整个范围
  • 数组是多维的。我不知道在 VBA 中,只在一个维度上复制数据。在 VBA 数组不是对象中,没有附加任何方法。你不能做一个 Array[0].push Array{}。您可以制作一维数组的一维数组,然后 array(0)(0) = range("A1:Z1").value 但没有机制可以将其粘贴回范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 2014-01-24
  • 2014-01-31
相关资源
最近更新 更多