EXCEL中提取字符串中的数字与非数字,按顺序存放在多个单元格内

打开EXCEL,按ALT+F11,粘贴以下内容:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim a%, i%, ii%, nc%
Dim tmp$, k, c%, gs%: gs = 2
a = [a65536].End(xlUp).Row 'A列中的行数
For i = 1 To a '单元格循环开始
If Cells(i, 1) <> “” Then '防止A列中内容为空
Set dic = CreateObject(“scripting.dictionary”) '创建字典
nc = Len(Cells(i, 1)) '获取单元格长度
For ii = 1 To nc '开始循环单元格中的各个元素
tmp = Mid(Cells(i, 1), ii, 1) '设置tmp为单元格中每个元素
dic.Add ii, tmp '将每个元素剥离后加入字典中
Next ii
k = dic.items '设置k为字典内容
tmp = k(0) '重新设置tmp值,为字典中第一个内容
For c = 1 To dic.Count - 1 '循环字典中内容,因已设置tmp为第一个,故从1开始循环
If IsNumeric(tmp) = IsNumeric(k©) Then '如果tmp与下一个字典内容的类型相同
tmp = tmp & k© '将tmp与下一个字典内容结合
Else '否则
Cells(i, gs) = tmp '这里就表示k©与tmp不同,所以将tmp写入单元格中
gs = gs + 1 '标记要写入的单元格列数,写入完成后加1,方便下次再写入
tmp = k© 'tmp已写入单元格中,故重新赋值tmp为k©,因为tmp与k©不同了
End If
If c = dic.Count - 1 Then Cells(i, gs) = tmp '因为最后一个值往后没有数据了,所以直接写入单元格
Next c '返回字典循环
gs = 2 '数据源的行数改变,所以列数重新设置为2,即B列
Set dic = Nothing
End If
Next i '返回单元格循环
Application.ScreenUpdating = True
End Sub

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值