Excel Range的一维数组

Fel*_*lix 17 excel vba

我现在使用以下代码填充我的阵列证券:

Option Base 1
Securities = Array(Worksheets(3).Range("A8:A" & SymbolCount).Value)
Run Code Online (Sandbox Code Playgroud)

这产生了一个二维数组,其中每个地址都是(1 ... 1,1 ... N).我想要一维数组(1 ... N).

我怎样才能(a)将证券作为一维数组填充,或者(b)有效地将证券剥离为一维数组(我在每个循环中陷入困境).

Jon*_*n49 58

我知道你已经接受了答案,但这里有更简单的代码:

如果你抓住一个单行(有多列),那么使用:

Securities = application.transpose(application.transpose _
             (Worksheets(3).Range("A8:A" & SymbolCount).Value))
Run Code Online (Sandbox Code Playgroud)

如果要抓取单个列(包含多行),请使用:

Securities = application.transpose(Worksheets(3).Range("A8:A" & SymbolCount).Value)
Run Code Online (Sandbox Code Playgroud)

所以,基本上你只需要对行进行两次转换,对列进行一次转置.

更新:

大型表可能不适用于此解决方案(如下面的注释中所述):

我在一个大表中使用了这个解决方案,我发现这个技巧有一个限制:Application.Transpose(Range("D6:D65541").Value)'运行没有错误,但Application.Transpose(Range("D6:D65542").Value)'运行时错误13类型不匹配

  • 移调()只能处理一维数组多达65,536个元素的Excel中Excel 2007和更高版本. (5认同)
  • 我在一个大表中使用了这个解决方案,我发现这个技巧有一个限制: `Application.Transpose(Range("D6:D65541").Value)` '运行没有错误,但是 `Application.Transpose(Range) ("D6:D65542").Value) ` ' 运行时错误 13 类型不匹配 (3认同)
  • 同意这是迄今为止将一行数据转换为1d数组的最简单方法 (2认同)
  • @Emma,我不记得我选择了那个技巧.但我所做的只是将1xn矩阵更改为nx1,这只是n个单位的数组.不确定为什么行为内置到Excel中以这种方式工作.Excel中的许多内容都没有很好地记录,它是如此庞大的程序! (2认同)
  • 我知道这篇文章有点旧,但你的回答对我有帮助。仍然是我见过的实现这一目标的最佳解决方案! (2认同)
  • @Jon49我肯定遇到过这个问题,我试图重现这个问题,但我现在不能,我已经编写了自己的转置函数并且我一直使用它。内置的转置功能肯定不可靠!Excel 的许多部分都存在 255 个字符的限制,另一个例子是单元格数据验证的公式长度,或者如果使用 ADO 运行 SQL 语句,如果 SQL 查询语句超过 255 个,则无法将其传递给 ADO (2认同)

Pat*_*rez 5

Sub test2()
    Dim arTmp
    Dim securities()
    Dim counter As Long, i As Long
    arTmp = Range("a1").CurrentRegion
    counter = UBound(arTmp, 1)
    ReDim securities(1 To counter)
    For i = 1 To counter
        securities(i) = arTmp(i, 1)
    Next i
    MsgBox "done"
End Sub
Run Code Online (Sandbox Code Playgroud)