Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 26522|回复: 19

[VBA] VBA数组教程8:数组的合并和字符串拆分(jion & split)

[复制链接]
发表于 2010-8-10 09:45 | 显示全部楼层 |阅读模式
<p></p><p>多个字符的合并和字符串按规律的拆分是经常遇到的,如:</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A-REW-E-RWC-2-RWC 按分隔符-拆分成6个字符放在一个数组中</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有一组数array(23,45,7,1,76)想用分隔符-连接成一个字符串</p><p>&nbsp;&nbsp; 上面两种情况VBA提供了一对函数,即:</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ee0000" size="5"> split(字符串,"分隔符")</font> 拆分字符串</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0e0ebe" size="5"> join(数组,"分隔符")</font>&nbsp;&nbsp; 用分隔连接数组的每个元成一个字符串</p><p>&nbsp;&nbsp;&nbsp;例1:</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sub t1()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim arr, myst As String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;myst = "A-REW-E-RWC-2-RWC"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr = <font color="#f70909">Split(myst, "-")</font><br/>&nbsp;&nbsp;<font color="#1010de">'按-分隔成一组数装入数组中</font><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;'MsgBox arr(0) '<font color="#0808d6">显示数组的第一个数(分隔后的数组最小下标为0,不是1),显示结果为A</font><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;MsgBox <font color="#ee0000">Join(arr, ",")</font> '<font color="#0808e7">再用","把数组的每个值连接成一个字符串,结果为"A,REW,E,RWC,2,RWC"<br/></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Sub</p><p>&nbsp;&nbsp;&nbsp; 值得注意的是:split和join只能对一维数组进行操作,如果是单元格或二维数组怎么办?只有一条途径,想办法转换为一维数组:</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Sub t2()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ARR<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ARR = <font color="#f70909">Application.Transpose</font>(Range("a1:a3")) ‘用转置的方法,把单元格一列数据转换成一维数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox Join(ARR, "-")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End Sub</p><p>&nbsp;</p><p>附:1-7链接:</p><p><font color="#ee3000">附1-7例链接:</font></p><div class="listtitle"><a title="《新手学VBA数组--示例1》&lt;br&gt;作者:兰色幻想&lt;br&gt;发表于:2010-8-3 10:20:00&lt;br&gt;最后发贴:校长菜市场和厨..." href="http://www.excelpx.com/forum.php?mod=viewthread&tid=136776" target="_blank">新手学VBA数组--示例1</a></div><br/><div class="listtitle"><a title="《VBA数组学习示例教程之2:了解数组的维数》&lt;br&gt;作者:兰色幻想&lt;br&gt;发表于:2010-8-4 9:07:00&lt;br&gt;最后发贴:dim&nbsp;&nbsp;arr()&nbsp;&nbsp;这..." href="http://www.excelpx.com/forum.php?mod=viewthread&tid=136880" target="_blank">VBA数组学习示例教程之2:了解数组的维数</a></div><br/><div class="listtitle"></div><div class="listtitle"><a title="《VBA数组入门教程第3例:把单元格数据搬入内存》&lt;br&gt;作者:兰色幻想&lt;br&gt;发表于:2010-8-5 12:04:00&lt;br&gt;最后发贴:回复:(兰色幻..." href="http://www.excelpx.com/forum.php?mod=viewthread&tid=137013" target="_blank">VBA数组入门教程第3例:把单元格数据搬入内存</a></div><br/><div class="listtitle"></div><div class="listtitle"><a title="《VBA数组入门第4例:数组导入到单元格中》&lt;br&gt;作者:兰色幻想&lt;br&gt;发表于:2010-8-6 11:37:00&lt;br&gt;最后发贴:以下是引用小福..." href="http://www.excelpx.com/forum.php?mod=viewthread&tid=137121" target="_blank">VBA数组入门第4例:数组导入到单元格中</a></div><br/><div class="listtitle"></div><div class="listtitle"><a title="《VBA数组入门教程第5例:动态数组的声明》&lt;br&gt;作者:兰色幻想&lt;br&gt;发表于:2010-8-7 11:40:00&lt;br&gt;最后发贴:跟贴学习,谢谢..." href="http://www.excelpx.com/forum.php?mod=viewthread&tid=137216" target="_blank">VBA数组入门教程第5例:动态数组的声明</a></div><br/><div class="listtitle"><a title="《VBA数组入门教程第六例:数组的下标》&lt;br&gt;作者:兰色幻想&lt;br&gt;发表于:2010-8-8 12:43:00&lt;br&gt;最后发贴:以下是引用wbzx..." href="http://www.excelpx.com/forum.php?mod=viewthread&tid=137290" target="_blank">VBA数组入门教程第六例:数组的下标</a><br/>&nbsp;</div><br/><div class="listtitle">&nbsp;<a title="《VBA数组入门第7例:使用Array函数创建常量数组》&lt;br&gt;作者:兰色幻想&lt;br&gt;发表于:2010-8-9 9:01:00&lt;br&gt;最后发贴:以下是引用wbzx..." href="http://www.excelpx.com/forum.php?mod=viewthread&tid=137363" target="_blank">VBA数组入门第7例:使用Array函数创建常量数组</a><br/>&nbsp;</div>
[此贴子已经被作者于2010-8-10 9:48:49编辑过]
发表于 2010-8-10 10:14 | 显示全部楼层
回复

使用道具 举报

发表于 2010-8-10 10:36 | 显示全部楼层
回复

使用道具 举报

发表于 2010-8-10 19:08 | 显示全部楼层

请问兰版,这个语句<div><br/></div><div><span class="Apple-style-span" style="font-family: tahoma, 宋体, fantasy; font-size: 12px; ">RR =&#160;<font color="#f70909">Application.Transpose</font>(Range("a1:a3")) ‘用转置的方法,把单元格一列数据转换成一维数组</span></div><div><span class="Apple-style-span" style="font-family: tahoma, 宋体, fantasy; font-size: 12px; "><br/></span></div><div><span class="Apple-style-span" style="font-family: tahoma, 宋体, fantasy; font-size: 12px; ">是不是下面这条语句的缩写</span></div><div><span class="Apple-style-span" style="font-family: tahoma, 宋体, fantasy; font-size: 12px; "><br/></span></div><div><span class="Apple-style-span" style="font-family: tahoma, 宋体, fantasy; font-size: 12px; ">RR =&#160;<font color="#f70909">Application.worksheetfunction.Transpose</font>(Range("a1:a3")) ‘用转置的方法,把单元格一列数据转换成一维数组</span></div><div><span class="Apple-style-span" style="font-family: tahoma, 宋体, fantasy; font-size: 12px; "><br/></span></div><div><font class="Apple-style-span" face="tahoma, 宋体, fantasy" size="3"><span class="Apple-style-span" style="font-size: 12px; ">我搜索了一下帮助,关于transpose,好像只是作为worksheetfunction对象的方法。</span></font></div>
[此贴子已经被作者于2010-8-10 19:10:05编辑过]
回复

使用道具 举报

发表于 2010-8-11 07:37 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>wbzxz</i>在2010-8-10 19:08:00的发言:</b><br/>请问兰版,这个语句<div><br/></div><div><span class="Apple-style-span" style="FONT-SIZE: 12px; FONT-FAMILY: tahoma, 宋体, fantasy;">RR =&nbsp;<font color="#f70909">Application.Transpose</font>(Range("a1:a3")) ‘用转置的方法,把单元格一列数据转换成一维数组</span></div><div><span class="Apple-style-span" style="FONT-SIZE: 12px; FONT-FAMILY: tahoma, 宋体, fantasy;"><br/></span></div><div><span class="Apple-style-span" style="FONT-SIZE: 12px; FONT-FAMILY: tahoma, 宋体, fantasy;">是不是下面这条语句的缩写</span></div><div><span class="Apple-style-span" style="FONT-SIZE: 12px; FONT-FAMILY: tahoma, 宋体, fantasy;"><br/></span></div><div><span class="Apple-style-span" style="FONT-SIZE: 12px; FONT-FAMILY: tahoma, 宋体, fantasy;">RR =&nbsp;<font color="#f70909">Application.worksheetfunction.Transpose</font>(Range("a1:a3")) ‘用转置的方法,把单元格一列数据转换成一维数组</span></div><div><span class="Apple-style-span" style="FONT-SIZE: 12px; FONT-FAMILY: tahoma, 宋体, fantasy;"><br/></span></div><div><font class="Apple-style-span" face="tahoma, 宋体, fantasy" size="3"><span class="Apple-style-span" style="FONT-SIZE: 12px;">我搜索了一下帮助,关于transpose,好像只是作为worksheetfunction对象的方法。</span></font></div><br/></div><p><font face="Tahoma" color="#f70909" size="2">worksheetfunction可以省略,课上讲过啊</font></p>
回复

使用道具 举报

发表于 2010-8-11 11:33 | 显示全部楼层

兰版在课上讲过调用工作表函数时,<font color="#000000" face="">worksheetfunction可以省略</font>
回复

使用道具 举报

发表于 2010-8-11 12:14 | 显示全部楼层

[em06]看来我上课的时候没有好好听课。
回复

使用道具 举报

发表于 2010-8-11 21:56 | 显示全部楼层

请问兰版,我想用split函数返回字符中的串中的每个字符,不知道有没有可能呢?<div><br/></div><div>比如&#160;</div><div><br/></div><div>dim s as string</div><div>dim arr</div><div>s="abcde"</div><div><br/></div><div>arr=split(s, &#160;)</div><div><br/></div><div>请问兰版,这个时候split函数里面应该怎么写呢,有没有可能返回一个数组,</div><div><br/></div><div>分别是:arr(0)="a" arr(1)="b" arr(2)="c" arr(3)="d" arr(4)="e"</div><div><br/></div><div>有这种可能吗?</div>
回复

使用道具 举报

发表于 2010-8-14 13:59 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>wbzxz</i>在2010-8-11 21:56:00的发言:</b><br/>请问兰版,我想用split函数返回字符中的串中的每个字符,不知道有没有可能呢?<div><br/></div><div>比如&nbsp;</div><div><br/></div><div>dim s as string</div><div>dim arr</div><div>s="abcde"</div><div><br/></div><div>arr=split(s, &nbsp;)</div><div><br/></div><div>请问兰版,这个时候split函数里面应该怎么写呢,有没有可能返回一个数组,</div><div><br/></div><div>分别是:arr(0)="a" arr(1)="b" arr(2)="c" arr(3)="d" arr(4)="e"</div><div><br/></div><div>有这种可能吗?</div></div><p>为什么不直接试下?不行的,也许可以用其他函数吧</p><p>&nbsp;&nbsp;&nbsp; Sub at1()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ARR, myst As String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myst = "AREWERWC2RWC"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For r = 1 To Len(myst)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ARR = Mid(myst, r, 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox ARR<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next r<br/>&nbsp;&nbsp;&nbsp;End Sub</p><p>这样可以</p><p></p>
[此贴子已经被作者于2010-8-14 14:09:28编辑过]
回复

使用道具 举报

发表于 2010-8-14 14:20 | 显示全部楼层

<p>老师,</p><p>Sub t2()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ARR<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ARR = <font color="#f70909">Application.Transpose</font>(Range("a1:a3")) ‘用转置的方法,把单元格一列数据转换成一维数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox Join(ARR, "-")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End Sub</p><p>如何把一行数据转换成一维数组呢?</p><p>Sub at3()<br/>&nbsp;&nbsp;&nbsp; Dim arr<br/>&nbsp;&nbsp;&nbsp; arr = Range("B2:H2")<br/>&nbsp;&nbsp;&nbsp; MsgBox Join(arr, "-")<br/>End Sub</p><p>这样为什么不行?</p>
[此贴子已经被作者于2010-8-14 14:20:54编辑过]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 07:07 , Processed in 0.298708 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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