VBA 从电子表格中一行中保存的数据创建数组

VBA create an array from data held in a row in a spreadsheet

提问人:Stephen 提问时间:10/16/2023 更新时间:10/17/2023 访问量:72

问:

我想从我指定的范围创建一个数组,其中范围是行的一部分,而不是列的一部分。

我试过:

Dim mCH As Variant
    
    mCH = Range("A1:F1").Value
    
    For n = 1 To UBound(mCH)
        Debug.Print mCH(n, 1)
    Next n

我希望将 6 个值打印到即时窗口,其中包含第 1 行前 6 列中的值,但数组仅包含一个值,即 A1 中的值

当我在一列中排列值并执行以下操作时,它可以工作:

Dim mCH As Variant
    
    mCH = Range("A1:A6").Value
    
    For n = 1 To UBound(mCH)
        Debug.Print mCH(n, 1)
    Next n

但我不能以这种方式排列数据,因为我想从前 6 列标题创建一个数组

数组 Excel VBA

评论

6赞 RBarryYoung 10/16/2023
尝试将此行更改为:.Debug.Print mCH(n, 1)Debug.Print mCH(1, n)
5赞 CDP1802 10/16/2023
而且 - 看这里For n = 1 To UBound(mCH,2)

答:

5赞 VBasic2008 10/17/2023 #1

循环遍历 2D 基于 1 的数组的列

  • 如果给定的单区域范围 () 具有多个单元格,则只需使用以下方法即可将其值写入 2D 从 1 开始的数组 ():rgData

    Dim Data() As Variant: Data = rg.Value
    
  • 可以检索此数组的行数(或第一维的上限(大小)),该数组是 UBound(Data, 1) 的缩写,等于 。UBound(Data)rg.Rows.Count

  • 此数组的列数(或第二维的上限(大小))只能使用 UBound(Data, 2) 检索,该数组等于 。rg.Columns.Count

  • 如果要从第一行检索元素,则需要在行停留时遍历列:1

     Dim c As Long
    
     For c = 1 To UBound(Data, 2)
         Debug.Print Data(1, c) 
     Next c
    
  • 将前面的内容应用于您的示例,您将使用以下内容:

     Dim mCH() As Variant: mCH = Range("A1:F1").Value
    
     Dim n As Long 
    
     For n = 1 To UBound(mCH, 2)
         Debug.Print mCH(1, n)
     Next n