【问题标题】:VBA Excel Store Range as Array, extract cell values for formula. Offset for other variablesVBA Excel 将范围存储为数组,提取公式的单元格值。其他变量的偏移量
【发布时间】:2013-01-31 13:27:45
【问题描述】:

我对此有点陌生。我将如何获取列并将其单元格数据放入整数并遍历该范围内的所有值以将其放入函数中以将结果输出到 excel 工作簿中的另一列中。所以我的输出列将是整个 Comm 列,使用列 G、J 和 K 输入到函数 =100000*slotNumber+300*xpos+ypos

  A    B     C      D     E    F       G          H    I       J    K
1 Proc Equip Operat Shift Comm Casette SlotNumber Diam Measure XPos YPos
2
3'

所以我想如果我获取每个值并创建一个 for 循环,我可以获取这些值并以某种方式完成所有这些,只是不确定如何!请,谢谢!

编辑:我已经存储了所有列,现在我必须将数组值一一传递给函数,对于公式 Z = 100000*slotArr(i)+300xList(i)+yList(i) 或者我可以将它放在 for 循环中。

编辑:已将函数放入循环中...我得到一个对象超出范围错误...在函数的行。

Sub cmdMeans_Click()
Dim i As Long, j As Long
Dim slotList As Range, slotArr() As Variant, xList As Range, xArr() As Variant
Dim yList As Range, yArr() As Variant, cArr() As Variant

Set slotList = Range("P2", Range("P2").End(xlDown))
slotArr() = slotList.Value

Set xList = slotList.Offset(0, 4)
xArr() = xList.Value

Set yList = slotList.Offset(0, 5)
yArr() = yList.Value

'Only one counter required because of the dependancy on the range slotList
For i = 2 To UBound(slotArr, 1)
    'Dimensioning Array
    ReDim cArr(UBound(slotArr, 1), 1)
    cArr(i, 1) = (100000 * slotArr(i, 1)) + (300 * xList(i, 1)) + yList(i, 1)
    'MsgBox ("Comment Cell Value" & cArr(i, 1))
Next

'Resizing Array
ReDim Preserve cArr(i)
'This is where the new values will be written to the comment column

Dim cRng As Range
Set cRng = Range(Cells(14, 1), Cells(UBound(cArr(i))))
cRng.Value = Application.Transpose(cArr)

End Sub

【问题讨论】:

  • 您能否更清楚地格式化您的问题或提供屏幕截图?我不知道你在问什么。
  • 我无法提交照片,但我可以通过电子邮件提交,因为论坛不让我提交。所以上面的字母代表列。 C 列(槽号)是带有大量值的 excel 列,我想要一个数组来存储所有这些值,然后还将值存储在 XPos 和 YPos 的 J 和 K 列中。获得这些数据后,我想将其全部传递到一个新数组输出的函数中。然后将输出转换为一个范围并将其放在 A 列中以供 Comm 使用。
  • Sheet 列中的那些Barcode 类型的verticles 是什么? :$

标签: arrays loops excel range vba


【解决方案1】:

看到您的示例我很担心 - appolgy 但真的不是 decipherable...所以我坚持使用您的问题标题和评论:

VBA Excel Store Range as Array, extract cell values for formula. Offset for other variables

如何将 Range 存储为数组:-

Dim vArray as Variant

vArray = Sheets(1).Range("A2:G50").Value)

如何将数组传递给以数组为参数并返回数组的函数:-

Function passArray(ByRef vA as Variant) as Variant
   Dim myProcessedArray as Variant
   '----your code goes here

   passArray = myProcessedArray
End Function

输出一维数组到工作表范围:-

Sheets(1).Range("E2").Resize(1, _
         UBound(Application.Transpose(singleDArray))) = singleDArray

输出多维数组到工作表范围:-

Sheets(1).Range("E2").Resize(UBound(multiDArray) + 1, _
UBound(Application.Transpose(multiDArray))) = multiDArray

【讨论】:

  • 我不明白你为什么这么多使用 Transpose。特别是在您的第一个代码示例中。它有什么用途?
  • 我在这里的下标总是超出范围...为什么要标注它? ReDim cArr(1 To i) As Variant cArr(i) = 100000 * slotArr(i) + 300 * xList(i) + yList(i) MsgBox ("Comment Cell Value" & cArr(i, 1))
  • @user2027945 抱歉,我没有查看您更新的代码。为什么要ReDim
  • 但是不使用Transpose 两次与根本不使用Transpose 的结果相同吗?据我所知,答案是肯定的。此外,我可以为您的其他Transpose 看到的唯一目的是让 UBound 检查第二维,这可以通过使用Ubound(singleDArray, 2) 更合理地完成。我认为您可能会爱上它,以至于您正在寻找借口来使用它,无论它是否有意义。 Transpose 仅在有用时才有用。 @bonCodigo
  • @DanielCook,非常感谢,我想我真的忽略了那部分!严重地。叹息...更新了 ;)
猜你喜欢
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 2013-07-07
相关资源
最近更新 更多