Excel精英培训网

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

[已解决]求循环代码

[复制链接]
发表于 2021-12-13 13:11 | 显示全部楼层 |阅读模式
表格A里是上千个A股股票代码和股票名称,见表A,要把他做成表B的样子,谢谢。

最佳答案
2021-12-13 14:17
本帖最后由 林木水 于 2021-12-14 14:48 编辑

代码如下,思路用正则规则表达式就可以了。很简单,结果见附件

Sub 正则表达式()
Dim rxg As object
set rxg=CreateObject("vbscript.regexp")
Dim sr, m, mat

Dim arr(), brr(), k As Integer
   With rxg
    .Global = True
    .Pattern = "[\u4e00-\u9fa5]{1,}"
    sr = Sheet1.Range("a1").Value
    Set mat = .Execute(sr)
    For Each m In mat
        k = k + 1
        ReDim Preserve arr(1 To k)
        arr(k) = m
    Next m
    k = 0
    .Pattern = "[^\u4e00-\u9fa5]{1,}"
    Set mat = .Execute(sr)
    For Each m In mat
       k = k + 1
        ReDim Preserve brr(1 To k)
        brr(k) = m
    Next m
   End With
    Sheet2.Range("a1").Resize(UBound(arr)) = Application.Transpose(arr)
    Sheet2.Range("b1").Resize(UBound(arr)) = Application.Transpose(brr)
End Sub





案例.rar

15.56 KB, 下载次数: 11

发表于 2021-12-13 14:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 林木水 于 2021-12-14 14:48 编辑

代码如下,思路用正则规则表达式就可以了。很简单,结果见附件

Sub 正则表达式()
Dim rxg As object
set rxg=CreateObject("vbscript.regexp")
Dim sr, m, mat

Dim arr(), brr(), k As Integer
   With rxg
    .Global = True
    .Pattern = "[\u4e00-\u9fa5]{1,}"
    sr = Sheet1.Range("a1").Value
    Set mat = .Execute(sr)
    For Each m In mat
        k = k + 1
        ReDim Preserve arr(1 To k)
        arr(k) = m
    Next m
    k = 0
    .Pattern = "[^\u4e00-\u9fa5]{1,}"
    Set mat = .Execute(sr)
    For Each m In mat
       k = k + 1
        ReDim Preserve brr(1 To k)
        brr(k) = m
    Next m
   End With
    Sheet2.Range("a1").Resize(UBound(arr)) = Application.Transpose(arr)
    Sheet2.Range("b1").Resize(UBound(arr)) = Application.Transpose(brr)
End Sub





1639376450(1).jpg

案例.rar

40.59 KB, 下载次数: 1

回复

使用道具 举报

发表于 2021-12-13 15:52 | 显示全部楼层
回复

使用道具 举报

发表于 2021-12-14 13:24 | 显示全部楼层
Sub demo()
   Set re = CreateObject("vbscript.regexp")
   re.Global = True
   re.Pattern = "(\d+)([^\d]+)"
   With Sheets(2)
      .Cells.ClearContents
      For Each m In re.Execute([a1])
         .[a1].Offset(r).Resize(, 2) = Array(m.submatches(0), m.submatches(1))
         r = r + 1
      Next
   End With
End Sub

demo.rar

38.32 KB, 下载次数: 4

回复

使用道具 举报

发表于 2021-12-14 13:26 | 显示全部楼层
cutecpu 发表于 2021-12-14 16:24
Sub demo()
   Set re = CreateObject("vbscript.regexp")
   re.Global = True

版主大神,我有个新的VBA问题,帮我看看呗
用VBA代码实现大量IF+OR函数的效果


回复

使用道具 举报

发表于 2021-12-14 14:54 | 显示全部楼层
cutecpu 发表于 2021-12-14 13:24
Sub demo()
   Set re = CreateObject("vbscript.regexp")
   re.Global = True

方法学习了,点赞不过正则规则那好像不能满足。例子里面作者那个带字母的也算编号。

点评

(\w+)([^\w]+)  发表于 2021-12-14 15:24
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 22:44 , Processed in 0.355531 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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