如何用vba将excel单元格区域转化为一维数组?

编写vba的过程中,可以说是天天与excel单元格区域打交道。

有时候我们需要将单元格区域的整行或整列内容作为一个整体进行操作的时候,可以考虑将其转化为数组。

但是直接将单元格区域赋值给数组得到的是一个二维数组,这个二维数组的第一维是单元格区域的从上到下,也就行方向,第二维度是单元格区域的从左到右,也就是列方向,所有维度均以1为起始下标。

如下图所示:

当用如下的代码将单元格区域A1:C5赋值给数组后

Sub QQ1722187970()
    Dim arr()
    Dim oWK As Worksheet
    Set oWK = Sheet1
    Dim oRng As Range
    Set oRng = oWK.Range("a1:c5")
    arr = oRng.Value
End Sub

数组arr是如下所示的二维数组:

如果需要依次将单元格区域的每行或每列都转化为一维数组,可以调用excel工作表函数Transpose将一个只有一行或只有一列的二维单元格区域转化为一维数组。

这里分两种情况:

一、如果是要将单元格区域的每列转化为一维数组,只需调用一次excel工作表函数Transpose即可,如下所示:

Sub QQ1722187970()
    Dim arr()
    Dim arrTemp()
    Dim oWK As Worksheet
    Set oWK = Sheet1
    Dim oRng As Range
    '单元格区域的第一列
    Set oRng = oWK.Range("a1:a5")
    For i = 1 To 3
        arr = oRng.Offset(0, i - 1).Value
        '1次转置即可转化为一维数组
        arrTemp = Excel.Application.WorksheetFunction.Transpose(arr)
    Next i
End Sub

二、如果是要将单元格区域的每行转化为一维数组,需连续调用两次excel工作表函数Transpose才能转化为一维数组,如下所示:

Sub QQ1722187970()
    Dim arr()
    Dim arrTemp()
    Dim oWK As Worksheet
    Set oWK = Sheet1
    Dim oRng As Range
    '单元格区域的第一行
    Set oRng = oWK.Range("a1:c1")
    For i = 1 To 3
        arr = oRng.Offset(0, i - 1).Value
        '2次转置才能转化为一维数组
        arrTemp = Excel.Application.WorksheetFunction.Transpose(Excel.Application.WorksheetFunction.Transpose(arr))
    Next i
End Sub
       

发表评论