ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 名课 - Power BI数据分析与可视化实战 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: chenlifeng123

[求助] VBA如何一句话把字符串变为数组?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-27 12:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2018-6-27 09:19
一句代码把字符串转为数组:

首先感谢老师,这个思路我昨天看到过完全一样的例子,只是没有往这方面想,还是老师能够灵活运用。

不过老师的方法,用在下面的例子就可能不太适用了:
如果方便,老师可以下载附件尝试一下:
       里面是个word文件,调试程序前,先手动选中word全文。然后再执行您上面的代码(稍作个别改动):
  1. Sub test()
  2.     Dim b() As Byte ', s$, t$
  3.     s = Selection.Text '"123abc都可以" '任意文本字符串
  4.     b = s '就这一句代码,可以直接把字符串转为unicode码的字节数组
  5.    
  6.     '以下是从该字节数组中提取返回单个字符的方法
  7.     For i = 0 To UBound(b) Step 2 '遍历字节数组
  8.         T = ChrW(b(i) + b(i + 1) * CLng(256)) '返回单个字符
  9.         MsgBox T
  10.     Next
  11. End Sub
复制代码

特殊汉字.zip

5.44 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2018-6-27 17:36 | 显示全部楼层
chenlifeng123 发表于 2018-6-27 12:32
首先感谢老师,这个思路我昨天看到过完全一样的例子,只是没有往这方面想,还是老师能够灵活运用。

不 ...

你提出的这个,钻牛角尖了。

原因很简单,你所显示的字符,都是特殊字符,在VBA字库中没有,无法正常显示。

比如,以下代码也无法正常输出单个字符。
Sub test()
    s = [a1].Value '特殊字符
    For i = 1 To Len(s)
        Cells(i + 1, 2) = Mid(s, i, 1) '直接mid截取后输出 也是失败
    Next
End Sub


…………
事实上,我的代码,对该字符的Unicode码的解析、合成,仍然是正确的。
只是无法在VBA过程中输出特殊字符而已。

这不是代码的问题。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-6-27 18:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 duquancai 于 2018-6-27 19:07 编辑
chenlifeng123 发表于 2018-6-24 14:29
比如字符串:“1234567”,中间无任何分隔符号,用split用不上啊。

下面的代码 a就是一个数组!
对于字符串s="1234567",通过split后就是一个这样的a数组: a=["1","2","3","4","5","6","7"]
  1. Sub main()
  2.     Dim s As String, js As Object, l As Long, i As Long
  3.     Set js = CreateObject("MSScriptControl.ScriptControl")
  4.     js.Language = "JavaScript"
  5.     s = "1234567" '字符串s
  6.     js.AddCode "a='" & s & "'.split('')" '用这<font color="#ff0000">一句代码</font>就能分割字符串s为a数组!
  7.     l = js.eval("a.length")
  8.     MsgBox "数组a的长度为:" & l
  9.     For i = 0 To l - 1 '遍历数组a并输出数组元素
  10.         MsgBox "第" & i + 1 & "个元素值:" & js.eval("a[" & i & "]")
  11.     Next
  12.     MsgBox js.eval("a.join('')") '用join又还原成字符串"1234567"
  13. End Sub
复制代码
题外话:split配合正则表达式进行分割 功能将会更强大!!!            
C语言中一句代码把字符串变为数组最厉害:

char a[]="1234567";就这一句代码。哈哈哈,更厉害的是 char *p="1234567";


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-6-27 18:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2018-6-27 09:19
一句代码把字符串转为数组:

嗯,第一次看到还可以这样来分割字符串,学习了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-28 06:58 | 显示全部楼层
香川群子 发表于 2018-6-27 17:36
你提出的这个,钻牛角尖了。

原因很简单,你所显示的字符,都是特殊字符,在VBA字库中没有,无法正常 ...

感谢老师这么热心解答。我的确有一些太过了,都是我不好,只怪我联系上一次发现的问题一起想了。
让老师费心了,实在抱歉。
为感谢老师,我也再补充我在9楼的方法与您,通过这几次验证,以我当下的水平发现:不论是特殊字符还是一般字符,都能适应。
最后再次感谢老师~!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-28 07:09 | 显示全部楼层
duquancai 发表于 2018-6-27 18:19
下面的代码 a就是一个数组!
对于字符串s="1234567",通过split后就是一个这样的a数组: a=["1","2","3"," ...

感觉老师们都是从仙境来的,水平之高,不可望项背啊~!
太强大了~!

TA的精华主题

TA的得分主题

发表于 2018-6-28 08:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2018-6-27 18:19
下面的代码 a就是一个数组!
对于字符串s="1234567",通过split后就是一个这样的a数组: a=["1","2","3"," ...

你这个一句话代码,实际上是借助了其它工具了。

那么,自己写一个自定义函数,封装一下,也是一样的效果。哈哈

TA的精华主题

TA的得分主题

发表于 2019-7-19 15:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
'''字符串 => 数组
''Sub tt()
''Dim a()'有
''a = String2Array1("中国")
''End Sub
Function String2Array(ByVal n As String)
    Dim arr(), l&
    l = Len(n)
    ReDim arr(0 To l - 1)
    For i = 1 To l
        arr(i - 1) = Mid(n, i, 1)
    Next
    String2Array = arr
End Function

''Sub tt()
''a = String2Array1("中国")
''End Sub
Function String2Array1(ByVal n As String)
    With CreateObject("ScriptControl")
        .Language = "JScript"
        String2Array1 = Split(.eval("'" & n & "'.match(/./g).join('/');"), "/")
    End With
End Function

''Sub tt()
''a = String2Array3("中国")
''End Sub
Function String2Array3(ByVal s As String)
    Dim a As Byte
    a = s
    String2Array3 = s
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-7-19 19:51 | 显示全部楼层
chenlifeng123 发表于 2018-6-24 15:57
感谢老师的耐心指点。您说的方法我也知道,所以才在一楼发问,不要能循环。
原以为由数组到字符,一个函 ...

python可以不用一句话在,自己就是

TA的精华主题

TA的得分主题

发表于 2020-2-9 13:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lss001 于 2020-2-9 18:24 编辑
chenlifeng123 发表于 2018-6-24 14:29
比如字符串:“1234567”,中间无任何分隔符号,用split用不上啊。

y = [MID("1234567",ROW(1:7),1)]
或者>>>
x = "1234567"
y = Evaluate("MID(" & x & ",ROW(1:" & Len(x) & "),1)")

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2025-12-24 17:12 , Processed in 0.024460 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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