广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    VBA数组与单元格区域

    来源:网络收集  点击:  时间:2024-03-28
    【导读】:
    在用VBA批量操作Excel工作表单元格区域时,会遇到需要将单元格区域转换为VBA数组。同样,当需要将VBA数组输出到单元格区域时,也会遇到类似的转换。本文将对VBA数组与单元格区域的相互转换进行介绍。工具/原料moreExcelVBA方法/步骤1/10分步阅读

    单元格区域:指至少包含两个单元格的区域,单一单元格不属于单元格区域。

    如下图所示

    2/10

    一维水平数组:指数组的值在Excel单元格区域中水平输出,也就是按Excel列的方向输出。如下图所示

    3/10

    一维垂直数组:指数组的值在Excel单元格区域中垂直输出,也就是按Excel行的方向输出。如下图所示

    4/10

    当将单元格区域转换为VBA数组时,该数组变量必须是Variant类型,生成的数组是二维数组,下界是1,不受Option Base语句的影响。二维是先垂直后水平,第一维是单元格区域的行方向,第二维是单元格区域的列方向。如下所示:

    Sub xyf()

    定义一个变量用于存放单元格区域的值

    未指定类型默认为Variant类型

    Dim arr

    arr = Range(a1:a2)

    也可以先定义一个Variant类型的动态数组变量

    Dim arr1()

    arr1 = Range(a1:a2)

    生成的数组的维数为(1 to 2,1 to 1)

    End Sub

    如下图所示

    5/10

    由Array函数生成的数组是一维水平数组,可以直接赋值给水平的单元格区域。如下所示:

    Sub xyf()

    Dim arr()

    arr = Array(1, 2, 3)

    Range(a1:c1) = arr

    End Sub

    如下图所示

    6/10

    由于将单元格区域转换为VBA数组时,产生的数组是二维数组,而内置的VBA数组函数都是针对一维数组,所以需要将二维数组降维转换为一维数组。

    7/10

    当将单列多行的单元格区域赋值给数组变量后,可以用Application.WorksheetFunction.Transpose转置降为一维水平数组。如下所示:

    Sub xyf()

    Dim arr()

    以下语句产生二维的arr(1 to 8,1 to 1)数组

    arr = Range(a1:a8)

    通过转置降为一维的arr(1 to 8) 数组

    arr = Application.WorksheetFunction.Transpose(arr)

    End Sub

    如下图所示

    8/10

    当将单行多列的单元格区域赋值给数组变量后,可以两次使用Application.WorksheetFunction.Transpose将数组降为一维水平数组。如下所示:

    Sub xyf()

    Dim arr()

    以下语句产生二维的arr(1 to 1,1 to 3)数组

    arr = Range(a1:c1)

    通过两次转置降为一维的arr(1 to 3) 数组

    arr = Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Transpose(arr))

    End Sub

    如下图所示

    9/10

    当将多行多列的单元格区域赋值给数组变量后,可以用Application.WorksheetFunction.Index函数的行参数将二维数组的每行转换为一维水平数组,如下所示:

    Sub xyf()

    Dim arr()

    Dim arrTemp()

    以下语句产生二维的arr(1 to 5,1 to 3)数组

    arr = Range(a1:c5)

    定义一个与arr数组一维尺寸相同的一维数组变量用于存放提取出来的每行一维数组的结果

    ReDim arrTemp(1 To UBound(arr))

    For i = 1 To UBound(arr)

    Application.WorksheetFunction.Index函数的第二参数指定行数生成一维数组

    arrTemp(i) = Join(Application.WorksheetFunction.Index(arr, i), ,)

    Next

    End Sub

    10/10

    Application.WorksheetFunction.Index函数将二维数组降维时,只有通过行参数才可以直接降维,通过列参数不能直接降维,如下所示:

    Sub xyf()

    Dim arr()

    Dim arrTemp()

    以下语句产生二维的arr(1 to 5,1 to 3)数组

    arr = Range(a1:c5)

    生成一维数组(1 to 3)

    arrTemp = Application.WorksheetFunction.Index(arr, 1)

    生成一维数组(1 to 3)

    arrTemp = Application.WorksheetFunction.Index(arr, 1, 0)

    通过Index的列参数不能降维 , arrTemp还是二维数组(1 to 5,1 to 1)

    arrTemp = Application.WorksheetFunction.Index(arr, 0, 1)

    End Sub

    注意事项

    如果这篇文章对您有所帮助,请为这篇文章投票,谢谢。

    数组
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_372587.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 19:53:01  耗时:0.027
    0.0271s