ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 275|回复: 9

Vba使用Application.Index拆分数组

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-22 17:07 | 显示全部楼层 |阅读模式
本帖最后由 lss001 于 2024-8-24 06:38 编辑

Sub Index拆分数组()
   ar = Range("A1:C3")
   r = UBound(ar)
   x = UBound(ar, 2)
   c = Split(Cells(1, x).Address, "$")(1)

   ar1 = Application.Index(ar, , 2) '1列/2
   ar2 = Application.Index(ar, Evaluate( _
    "Row(1:" & r & ")"), [{2,3}]) '多列/2-3

   ar3 = Application.Index(ar, 2) '1行/2
   ar4 = Application.Index(ar, [{2;3}], _
        Evaluate("Column(a:" & c & ")")) '多行/2-3

    ar5 = Application.Index(ar, Evaluate( _
        "Row(1:" & r & ")"), [{1,3}]) '隔列/1,3
    ar6 = Application.Index(ar, [{1;3}], _
        Evaluate("Column(a:" & c & ")")) '隔行/1;3
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-23 01:14 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2024-8-25 09:08 编辑

Sub Index拆分数组2()
   ar = Range("A1:E5")

     '1,3,5行/1-3列
    ar1 = Application.Index(ar, _
        [Row(1:3)*2-1], [Column(a:c)])

     '1-3行/1,3,5列
    ar2 = Application.Index(ar, _
        [Row(1:3)], [Column(a:c)*2-1])

     '1,3,5行/1,3,5列
     ar3 = Application.Index(ar, _
         [Row(1:3)*2-1], [Column(a:c)*2-1])

       '1-3行/1-3列
      ar4 = Application.Index(ar, _
          [Row(1:3)], [Column(a:c)])
End Sub

TA的精华主题

TA的得分主题

发表于 2024-8-23 08:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
看似好用又简单炫酷,实则效率低的要命,不如循环取数。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-23 09:09 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2024-8-24 06:40 编辑

Sub Index拆分一维数组()
    Dim ar(), ar1(), ar2(), ar3(), ar4()
    ar = Array(1, 2, 3, 4, 5)
        
   '1-3/转二维1行
    ar1 = Application.Index(ar, , _
          [Column(a:c)])
   '1,3,5/转二维1行
    ar2 = Application.Index(ar, , _
          [Column(a:c)*2-1])

        
    '1-3/转二维1列
    ar3 = Application.Index(ar, [Row(1:3)])
    '1,3,5/转二维1列
    ar4 = Application.Index(ar, [Row(1:3)*2-1])
End Sub

TA的精华主题

TA的得分主题

发表于 2024-8-23 09:19 | 显示全部楼层
能用,但速度确实会受点影响,刚试了一下一次2列。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-23 09:27 来自手机 | 显示全部楼层

工作表函数的使用
主要是根据实际情况来使用
速度方面不要太苛求
必竟它是工作表函数

TA的精华主题

TA的得分主题

发表于 2024-8-23 12:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这不是很好吗,目前为止没有看到过这个方法,感谢分享新知识!
我一直以为INDEX只能指定某个元素,或者单行/单列,没想到也可以截取部分。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-23 13:52 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lss001 于 2024-8-23 13:55 编辑

谢谢回复!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-23 13:56 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2024-8-23 14:25 编辑

Sub Index表格区域取值()
    Dim rng As Object, ar1(), ar2(), ar3(), ar4()
    Set rng = Range("a1:e5")
        
   '第1行/整行
    ar1 = Application.Index(rng, 1, _
          [Column(a:e)])
   '第1行/1,3,5
    ar2 = Application.Index(rng, 1, _
          [Column(a:c)*2-1])
        
    '第1列/整列
    ar3 = Application.Index(rng, [Row(1:5)], 1)
     '第1列/1,3,5
    ar4 = Application.Index(ar, [Row(1:3)*2-1], 1)
   
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-23 13:57 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lss001 于 2024-8-25 00:03 编辑

Sub Index表格区域取值2()
    Dim rng As Object, ar1(), ar2(), ar3(), ar(4)
    Set rng = Range("a1:e5")
   
    '1,3,5行/1-3列
    ar1 = Application.Index(rng, _
        [Row(1:3)*2-1], [Column(a:c)])
        
    '1-3行/1,3,5列
    ar2 = Application.Index(rng, _
        [Row(1:3)], [Column(a:c)*2-1])
        
    '1,3,5行/1,3,5列
    ar3 = Application.Index(rng, _
        [Row(1:3)*2-1], [Column(a:c)*2-1])

     '1-3行/1-3列
    ar4 = Application.Index(rng, _
        [Row(1:3)], [Column(a:c)])
        
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 16:33 , Processed in 0.032311 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表