ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教高手,关于index函数在表格中能运行,在VBA中运行不了的原因

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-11-15 16:50 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 dragonxf918 于 2021-11-15 16:54 编辑

image.png

image.png

其中标签为自定义名称

测试 - 副本.rar

12.21 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2021-11-15 19:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Snipaste_2021-11-15_19-12-20.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-15 20:17 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-11-16 10:33 | 显示全部楼层
在表格里,“标签”是一个一维数组,index(标签,2)可返回一个元素,得到正确结果。
在VBA里,[标签]引用属二维数组,Index([标签], 2)的结果不是一个元素,而是一个一行一列的数组。
要返回数组元素,须指定数组第二个下标:
MsgBox Evaluate("=index(标签,2,1)")
MsgBox WorksheetFunction.Index([标签], 2, 1)
或者使用两个Index()函数:
MsgBox Evaluate("=index(index(标签,2),1)")
或者,先把[标签]赋给数组Arr():

  1. Sub Test()
  2.     Dim Arr()
  3.     Arr = [标签]
  4.     MsgBox Arr(2, 1)
  5. End Sub
复制代码

在表格公式中,一维数组分水平数组和垂直数组两种形式,单行引用或用逗号分隔的常量数组为水平数组,单列引用或用分号分隔的常量数组为垂直数组,无论水平数组还是垂直数组,都可用Index(数组,n)引用元素。在VBA中,一维数组只有用逗号分隔的水平数组,没有“垂直数组”,引用单元格单列区域,返回的结果也是二维数组,除了引用,也不能用其它方式构造出一维的“垂直数组”。

形如本例中的“标签”的单列数组,在VBA中属二维数组,须用二维下标引用,如用Transpose转置,可得到一维数组,即可用一维下标引用:
MsgBox Evaluate("=index(Transpose(标签),2)")
或:
MsgBox [index(Transpose(标签),2)]



TA的精华主题

TA的得分主题

发表于 2021-11-16 12:02 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
主要是问题在Msgbox而非Index
Msgbox第一参数要求是→单个文本字符型
而Evaluate("Index(标签,2)")得到数组型
1,把数组转单个文本
2,直接引用单个文本
Sub 测试()
        数组 = Evaluate("Index(标签,2)")
        Msgbox Join(数组, ",")
        单个 = Evaluate("Index(标签,2,1)")
        Msgbox 单个
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-16 14:15 | 显示全部楼层
本帖最后由 dragonxf918 于 2021-11-16 14:19 编辑
山菊花 发表于 2021-11-16 10:33
在表格里,“标签”是一个一维数组,index(标签,2)可返回一个元素,得到正确结果。
在VBA里,[标签]引用属 ...

讲得很明白,豁然开朗,不愧是总版主,感谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-16 14:18 | 显示全部楼层
lss001 发表于 2021-11-16 12:02
主要是问题在Msgbox而非Index
Msgbox第一参数要求是→单个文本字符型
而Evaluate("Index(标签,2)")得到数 ...

感谢热情回答
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-7-1 12:32 , Processed in 0.034486 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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