ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求解释SPLIT用法

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-12-2 13:46 | 显示全部楼层 |阅读模式
例子:
单元格C6 的值为aaaaaaa/ggggggggg/rrrrrrr/ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp
Sub test_split()
Dim a As String
a = Split(Range("C6"), "/", 2)(1)
MsgBox a
End Sub
这里为什么得出的结果是ggggggggg/rrrrrrr/ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp

Split(Range("C6"), "/", 2)(1)
这句话的1应该是第一个"/" 那那个2是什么意思? 求解

TA的精华主题

TA的得分主题

发表于 2010-12-2 13:58 | 显示全部楼层
第1.35例 Split 函数
一、题目:
  要求编写一段代码,运用 Split  函数返回一个一维数组。
二、代码:
Sub 示例_1_035()
Dim x%,aa,Arr
For x=1 to 5
aa=aa & x & “,”
Next x
aa = Left(aa, Len(aa) - 1)
Arr=Split(aa,”,”)
End Sub
三、代码详解
1、Sub 示例_1_035():宏程序的开始语句。宏名为示例_1_035。
2、Dim x% ,aa,Arr  :声明变量x为整型变量,其余两个为可变型变量。
3、For x = 1 To 5  :x从1 到5进行循环。
4、aa=aa & x & “,” :根据循环依次把变量x的值和逗号组成的字符串赋给变量aa。返回”1,2,3,4,5,”
5、aa = Left(aa, Len(aa) - 1)  :因为字符串aa最后多了一个逗号,所以运用Left 和Len函数去除这个逗号以后再赋给变量aa。返回”1,2,3,4,5”
6、Arr=Split(aa,”,”) :运用 Split  函数返回一个一维数组赋给变量Arr(0 to 4)。注意:这里是以0为下标的一维数组。

Split函数
返回一个下标从零开始的一维数组,它包含指定数目的子字符串。

Split(expression[, delimiter[, limit[, compare]]])
Split函数语法有如下命名参数:
expression        必需的。包含子字符串和分隔符的字符串表达式 。如果expression是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。
delimiter        可选的。用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符(" ")作为分隔符。如果delimiter是一个长度为零的字符串,则返回的数组仅包含一个元素,即完整的 expression字符串。
limit        可选的。要返回的子字符串数,–1表示返回所有的子字符串。
compare        可选的。数字值,表示判别子字符串时使用的比较方式。关于其值,请参阅“设置值”部分。
设置值
compare参数的设置值如下:
常数                     值        描述
vbUseCompareOption        –1        用Option Compare语句中的设置值执行比较。
vbBinaryCompare              0        执行二进制比较。
vbTextCompare              1        执行文字比较。
vbDatabaseCompare          2        仅用于Microsoft Access。基于您的数据库的信息执行比较。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2010-12-2 14:00 | 显示全部楼层
Split函数
      

描述

返回一个下标从零开始的一维数组,它包含指定数目的子字符串。

语法

Split(expression[, delimiter[, limit[, compare]]])

Split函数语法有如下命名参数:

部分 描述
expression 必需的。包含子字符串和分隔符的字符串表达式 。如果expression是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。
delimiter 可选的。用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符(" ")作为分隔符。如果delimiter是一个长度为零的字符串,则返回的数组仅包含一个元素,即完整的 expression字符串。
limit 可选的。要返回的子字符串数,–1表示返回所有的子字符串。
compare 可选的。数字值,表示判别子字符串时使用的比较方式。关于其值,请参阅“设置值”部分。



设置值

compare参数的设置值如下:

常数 值 描述
vbUseCompareOption –1 用Option Compare语句中的设置值执行比较。
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文字比较。
vbDatabaseCompare 2 仅用于Microsoft Access。基于您的数据库的信息执行比较。

这句话的1应该是第2个子字符串
那个2是分解后形成2个子字符串的数组

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-12-2 14:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哇,楼上两位真的是,,...
虽然你们能帮我我很高兴,但能不能看完我写的内容再回答,光看题目就直接将一个某人发的例题抄上来.或者直接将EXCEL VBA帮助里的解释放上来
这个等于没说一样,,,,

谢谢哪位高人求解

TA的精华主题

TA的得分主题

发表于 2010-12-2 15:17 | 显示全部楼层

这两句你看到没有?

这句话的1应该是第2个子字符串
那个2是分解后形成2个子字符串的数组

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-12-2 16:41 | 显示全部楼层
还是不怎么理解
那Split(Range("C6"), "/", 4)(3)
得出的结果是ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp

如果是Split(Range("C6"), "/")(3)
得出的结果是ttttttt
求解

TA的精华主题

TA的得分主题

发表于 2010-12-2 17:12 | 显示全部楼层
可以把代码改为如下:
Sub test_split()
Dim a As String, b
b = Split(Range("C6"), "/", 4)
a = b(3)
MsgBox a
End Sub
再用F8逐句执行,可以看到分解得到的子字符串数量。
本例Split函数的第3个参数4,就是帮助里面的limit参数,表示分解成4个子字符串;用上面的代码可得:
b(0)="aaaaaaa"
b(1)="ggggggggg"
b(2)="rrrrrrr"
b(3)="ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp"
limit参数不用的话,默认=-1,表示返回所有的子字符串。
建议仔细读一读上面的帮助文件的内容。

点评

学习,split原来还有个第3参数。  发表于 2012-6-14 07:53

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2010-12-4 15:38 | 显示全部楼层
原帖由 willems 于 2010-12-2 16:41 发表
还是不怎么理解
那Split(Range("C6"), "/", 4)(3)
得出的结果是ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp

如果是Split(Range("C6"), "/")(3)
得出的结果是ttttttt
求解

Split(Range("C6"), "/", 4)(3) 把C6按/分开4段取第4段,前3段都是原来以/隔开的,第4段就是所有剩下的,自然把/都带着,而且比较长。
Split(Range("C6"), "/")(3) 把C6按/分开,不限制分多少段,取第4段,第4段就只有ttttttt了,后面的那些分别在第5至7段里了。
例如:Split(Range("C6"), "/")(6) 就是取第7段pppppppp

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2010-12-12 09:27 | 显示全部楼层
我觉得楼主的主要意思是怎么解释题目中的split函数,我的理解:
a = Split(Range("C6"), "/", 2)(1)
函数中的“2”意思时把C6的内容分成2段,即:
“aaaaaaa”和“/ggggggggg/rrrrrrr/ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp”
两部分,而“(1)”表示取第二部分(因为就象两位大大说的,下标时从(0)开始的)
所以楼主的“msgbox a”就应该是
/ggggggggg/rrrrrrr/ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp 没错
如果“(1)”改为“(0)”的话,那么“msgbox a” 我想应该就是
aaaaaaa 了
其他的split分割方式应该如此类推
俺也是新手,说得不对不要砸啊。。。。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2010-12-12 12:37 | 显示全部楼层

回复 9楼 Sting_Ning 的帖子

a = Split(Range("C6"), "/", 2)(1)
函数中的“2”意思时把C6的内容分成2段,即:
“aaaaaaa”和“/ggggggggg/rrrrrrr/ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp”
应该是分为如下两段:
“aaaaaaa”和“ggggggggg/rrrrrrr/ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp”
取1就是第二段,即:“ggggggggg/rrrrrrr/ttttttt/jjjjjjjj/uuuuuuuuu/pppppppp”
a = Split(Range("C6"), "/", 3)(1)
a = Split(Range("C6"), "/", 4)(1)
a = Split(Range("C6"), "/", 5)(1)
a = Split(Range("C6"), "/", 6)(1)
上面的结果都是一样的.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-3 07:01 , Processed in 0.056848 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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