ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2795|回复: 16

[求助] vba 处理字符串

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-3-23 14:14 | 显示全部楼层 |阅读模式
本帖最后由 yuanexl 于 2019-3-23 15:00 编辑

工人4人,电焊机1台,吊车1辆,发电机1台,工人2人,电焊机1台,发电机1台



各位老师帮帮忙  用Vba 把上面的字符串 汇总如下  
工人6人,电焊机2台,吊车1辆,发电机2台


试了一上午 也没找到 好办法  ,先谢谢了
  1. Sub s()
  2.     Dim arr1()
  3.     Dim rng

  4.     sr = "工人4人,电焊机1台,吊车1辆,发电机1台,工人2人,电焊机1台,发电机1台"

  5.     arr = Split(sr, ",")
  6.     ReDim arr1(UBound(arr))
  7.     ReDim arr3(UBound(arr))
  8.     For s2 = 0 To UBound(arr)
  9.         Set regx = CreateObject("VBScript.RegExp")
  10.          With regx
  11.             .Global = True
  12.             .Pattern = "\D" '数字
  13.             t = .Replace(arr(s2), "")
  14.         arr1(s2) = t
  15.         End With
  16.     Next

  17.     For t1 = 0 To UBound(arr) - 1
  18.         For t2 = t1 + 1 To UBound(arr)
  19.             If Left(arr(t1), 2) Like Left(arr(t2), 2) Then
  20.                  t = Replace(arr(t1), arr1(t1), Val(arr1(t1)) + Val(arr1(t2)))
  21.                      rng = rng & "," & t
  22.             End If
  23.         Next
  24.     Next

  25. End Sub
复制代码
得到下面的结果
",工人6人,电焊机2台,发电机2台"
现在的问题是 多了个 逗号  少了 吊车1辆
求指点  谢谢


TA的精华主题

TA的得分主题

发表于 2019-3-23 14:29 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
vba自定义函数吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-23 14:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-3-23 14:32 来自手机 | 显示全部楼层
不知道内容和规律,写出来不实用

TA的精华主题

TA的得分主题

发表于 2019-3-23 14:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
建议楼主上传完整附件,并提供多点模拟数据及结果

TA的精华主题

TA的得分主题

发表于 2019-3-23 14:36 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-23 14:37 | 显示全部楼层
changhong8 发表于 2019-3-23 14:32
不知道内容和规律,写出来不实用

工人4人,电焊机1台,吊车1辆,发电机1台,工人2人,电焊机1台,发电机1台
汇总结果:  
工人6人,电焊机2台,吊车1辆,发电机2台

只要用vba  写出来 就行

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-23 14:38 | 显示全部楼层
liulang0808 发表于 2019-3-23 14:34
建议楼主上传完整附件,并提供多点模拟数据及结果

工人4人,电焊机1台,吊车1辆,发电机1台,工人2人,电焊机1台,发电机1台
汇总结果:  
工人6人,电焊机2台,吊车1辆,发电机2台

只要用vba  写出来 就行
您把这个当做全部  写出来 就行   谢谢了

TA的精华主题

TA的得分主题

发表于 2019-3-23 14:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 duquancai 于 2019-3-23 18:23 编辑

复制代码
  1. # -*- coding: utf-8 -*-
  2. # version: Python 3.7.0
  3. from collections import defaultdict
  4. import re

  5. res_str = '工人4人,电焊机1台,吊车1辆,发电机1台,工人2人,电焊机1台,发电机1台'
  6. r_list = re.compile(r'([^\d,]+)(\d+)([^\d,]+)').findall(res_str)
  7. my_dic = defaultdict(int)
  8. for i in r_list: my_dic[(i[0], i[2])] += int(i[1])
  9. my_list = [k[0]+str(v)+k[1] for k, v in my_dic.items()]

  10. print(','.join(my_list))
复制代码

输出结果如下:
工人6人,电焊机2台,吊车1辆,发电机2台

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-23 14:43 | 显示全部楼层
jiminyanyan 发表于 2019-3-23 14:36
手工算算也花不了多少时间吧

好几千的

麻烦您  帮忙写下  谢谢了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 22:17 , Processed in 0.036751 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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