lucheng918的个人博客分享 http://blog.sciencenet.cn/u/lucheng918

博文

VBA按照标点分割excel的字符串

已有 4146 次阅读 2014-2-25 21:05 |个人分类:技术控|系统分类:科研笔记| VBA

城建档案*(管理+信息管理)*系统
电力*远程*培训*系统*(总站+主站)*分站
(泄漏 + 漏泄)* (通信 + 通讯)*(矿 + 井)*(无源 + 宽频)
建筑 *(施工+脚手架+模板工程+基坑支护)*(系统+平台+软件)
单片机*(机房+基站)*(通风+新风+换气+排气+降温+散热+温控)
(脐橙+水果+农产品+茶)*(安全+质量)* 追溯 *(系统+平台)
(探伤车+钢轨)*(缺陷+伤损+标识)*(定位+GPS+图像识别+视频监控)
光纤光栅 * 桥 + 九江 * 长江 * 桥
(隧道 + 桥梁 + 桥隧)* 三维 *(成图 + 建模 + 可视 + 动态浏览)* 地质

将以上表格中数据按照标点分割成以下格式:

根据标点分割字符2014.2.25.xlsm


3G  *  P2P  *  H.264 *










多方*(通信+通讯+电话)







(招商+引资)*(系统+平台+软件+工作流)

城建档案*(管理+信息管理)*








电力*远程*培训*系统*(总站+主站)*


(泄漏 + 漏泄)* (通信 + 通讯)*(+
建筑 *(施工+脚手架+模板工程+基坑支护)*(系统+平台+
单片机*(机房+基站)*(通风+新风+换气+排气+
(脐橙+水果+农产品+)*(安全+质量)* 追溯
(探伤车+钢轨)*(缺陷+伤损+标识)*(定位+
光纤光栅 *+ 九江 * 长江 *








(隧道 + 桥梁 + 桥隧)* 三维 *(成图 + 建模 + 可视 +
SmarTeam *(Oracle + 电子仓库)*









vba程序

Sub cutStringBySymbol()

'

' cut Macro

'

Dim i, i1, j, k1, k2, m, n As Integer

Dim sWord, sRight, sMatch, sLeft, sMid As String

For i = 1 To 1113       '定义行数

   sWord = Sheet1.Cells(i, 1)

   m = InStr(1, sWord, "*")

   n = InStr(1, sWord, "+")

   k1 = InStr(1, sWord, "(")

   k2 = InStr(1, sWord, ")")

   Sheet2.Cells(i, 1) = m

   Sheet2.Cells(i, 2) = n

   Sheet2.Cells(i, 3) = k1

   Sheet2.Cells(i, 4) = k2

   i1 = 1

   If m <> 0 Or n <> 0 Or k1 <> 0 Or k2 <> 0 Then   '判断是否存在逻辑符号

       If m = 0 Then   '将不存在的逻辑符号做最大化处理,便于后期处理

           m = 20000

            End If

       If n = 0 Then    '将不存在的逻辑符号做最大化处理,便于后期处理

           n = 20000

            End If

       If k1 = 0 Then     '将不存在的逻辑符号做最大化处理,便于后期处理

           k1 = 20000

            End If

       If k2 = 0 Then

       k2 = 20000

       End If

       j = Application.Min(m, n, k1, k2)   '求最小值

       Sheet2.Cells(i, 5) = j

       sRight = sWord

       If j <> 20000 Then

           While j <> 20000      '判断是否不再有逻辑符号

             

              sLeft = Mid(sRight, 1, j - 1)

              sMid = Mid(sRight, j, 1)

              sRight = Mid(sRight, j + 1)

              If sLeft <> "" Then

              Sheet3.Cells(i, i1) = sLeft

              i1 = i1 + 1

              End If

              Sheet3.Cells(i, i1) = sMid

              i1 = i1 + 1

                 m = InStr(1, sRight, "*")

                 n = InStr(1, sRight, "+")

                 k1 = InStr(1, sRight, "(")

                 k2 = InStr(1, sRight, ")")

                  If m = 0 Then

                      m = 20000

                   End If

                   If n = 0 Then

                      n = 20000

                   End If

                   If k1 = 0 Then

                     k1 = 20000

                    End If

                   If k2 = 0 Then

                     k2 = 20000

                   End If

                j = Application.Min(m, n, k1, k2)

                 

           Wend

       End If

       

   Else

   Sheet3.Cells(i, 1) = sWord    '将不符合条件的直接存入表中

   End If

   

Next

'

End Sub




https://wap.sciencenet.cn/blog-780964-770973.html

上一篇:awk -F OFS ORS
下一篇:shell cut参数详解
收藏 IP: 168.160.22.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-21 23:41

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部