ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] (请教高手!)单元格内字符串部分用另一个表格对应的数值代替

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-7-14 17:23 | 显示全部楼层 |阅读模式
本帖最后由 长春鱼鱼 于 2015-7-16 16:50 编辑

有2个表格(如下,更多数据见附件)。表格1,A列每个单元格由多个数值组成,数值间用分号;隔开。每个数值前面是图片名( 如 683a97c248a1.jpg),后面是图片对应的颜色名(如193#Black),中间用::隔开.

现在需要对颜色名进行替换。
1)如果颜色名带有#,则用#后面的字符替代。(如193#Black,就变成Black)。如果这些字符有重复的(如A7中的颜色名就是重复的:都是multicolor),则在后面加上1、2、3..以示区别(A7颜色名就替换成multicolor1,multicolor2,multicolor3...)。替换后的颜色名,要求每个单词首字母大写。

2)如果颜色名都是数字(如771),则用表2中对应的属性值替换这些数字。

A列单元格内其它内容不变。替换后的结果放到B列

表格1:
原始数据
683a97c248a1.jpg::193#Black;74cd3a6e5326.jpg::29#White
d749bbdb7ecd.jpg::193#Black;f66628eb0385.jpg::200001438#Dark  Khaki;d506771a661a.jpg::496;9bfdda525a46.jpg::350852#Orange;ed350b72b061.jpg::10#Red
1ac6eb63ced3.jpg::771#beige white;1bbad586ad91.jpg::173#Blue  Red;2686b9af0873.jpg::175#green;024fbd4a83bd.jpg::10#Red  Black;42e98f76f670.jpg::29#Red White
c59cccddbd64.jpg::193;4e97d88dab3b.jpg::1052;1c911a03dcde.jpg::29
c4dc506bccd5.jpg::193#Black;bab79c6a0c34.jpg::10#Burgundy;1c8581482b1f.jpg::175#Green;8efbee97e42f.jpg::1052#Pink;4fa72246f0ef.jpg::29#White;702a16e2872a.jpg::366#Yellow
1cb597fc60b4.jpg::771#multicolor;d23ca02470bb.jpg::173#multicolor;a4db851a54bf.jpg::1254#multicolor;114fe830c85c.jpg::175#multicolor

替换后结果
683a97c248a1.jpg::Black;74cd3a6e5326.jpg::White
d749bbdb7ecd.jpg::Black;f66628eb0385.jpg::Dark  Khaki;d506771a661a.jpg::Purple;9bfdda525a46.jpg::Orange;ed350b72b061.jpg::Red
1ac6eb63ced3.jpg::Beige White;1bbad586ad91.jpg::Blue  Red;2686b9af0873.jpg::Green;024fbd4a83bd.jpg::Red Black;42e98f76f670.jpg::Red  White
c59cccddbd64.jpg::Black;4e97d88dab3b.jpg::Pink;1c911a03dcde.jpg::White
c4dc506bccd5.jpg::Black;bab79c6a0c34.jpg::Burgundy;1c8581482b1f.jpg::Green;8efbee97e42f.jpg::Pink;4fa72246f0ef.jpg::White;702a16e2872a.jpg::Yellow
1cb597fc60b4.jpg::Multicolor1;d23ca02470bb.jpg::Multicolor2;a4db851a54bf.jpg::Multicolor3;114fe830c85c.jpg::Multicolor4

表格2:
属性
对应属性值
200004889
Army Green
771
Beige
193
Black
173
Blue
365458
Brown
200004890
Dark Grey
350850
Gold
175
Green
691
Grey
200002130
Ivory
200001438
Khaki
200004891
Lavender
200003699
Multi-Color
350852
Orange
1052
Pink
496
Purple
10
Red
350853
Silver
1254
Sky Blue
29
White
366
Yellow


Sample.zip

14.39 KB, 下载次数: 17

JPG_NAME

TA的精华主题

TA的得分主题

发表于 2015-7-14 18:41 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-14 18:59 | 显示全部楼层

你这个只能解决小半的问题啊。无法满足要求阿

TA的精华主题

TA的得分主题

发表于 2015-7-14 21:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Public Sub abc()
Dim ar, rep, i, ii, iii, str, tmp, d
Set d = CreateObject("Scripting.Dictionary")
ar = Range([a2], [a65536].End(3))
Set rep = CreateObject("vbscript.regexp")
rep.Global = True
For i = 1 To UBound(ar)
    rep.Pattern = "\d+#|[\w-]+\.jpg::"
    If ar(i, 1) <> "" Then
      ar(i, 1) = rep.Replace(ar(i, 1), "")
      str = Split(ar(i, 1), ";")
      For ii = 0 To UBound(str)
        str(ii) = StrConv(str(ii), 3)
        If IsNumeric(str(ii)) And Not Sheet2.[a:a].Find(str(ii), , , 1) Is Nothing Then
            str(ii) = Sheet2.[a:a].Find(str(ii), , , 1).Offset(, 1)
        End If
        d(str(ii)) = d(str(ii)) + 1
      Next
      For ii = 0 To UBound(str) - 1
        For iii = ii + 1 To UBound(str)
            If str(iii) < str(ii) Then tmp = str(ii): str(ii) = str(iii): str(iii) = tmp
        Next
      Next
      tmp = ""
      For ii = 0 To UBound(str)
          If d(str(ii)) > 1 Then
             d(str(ii) & "@") = d(str(ii) & "@") + 1
              tmp = tmp & "," & str(ii) & d(str(ii) & "@")
          Else
              tmp = tmp & "," & str(ii)
          End If
      Next
      ar(i, 1) = Right(tmp, Len(tmp) - 1)
      tmp = ""
      d.RemoveAll
    End If
Next
[b2].Resize(UBound(ar)) = ar
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-15 08:01 | 显示全部楼层
本帖最后由 长春鱼鱼 于 2015-7-15 08:03 编辑
doitbest 发表于 2015-7-14 21:10
Public Sub abc()
Dim ar, rep, i, ii, iii, str, tmp, d
Set d = CreateObject("Scripting.Dictionary") ...

::以及它前面的图片名怎么没有了阿。比如(09cee640-56c4-45f9-b7ea-683a97c248a1.jpg::Black;)给改改吧?如附件所有,左侧是函数返回值(有误),右侧才是正确的哦。

多谢!

color name missing

color name missing

TA的精华主题

TA的得分主题

发表于 2015-7-15 09:29 | 显示全部楼层
请参考附件

Sample90.rar

18.9 KB, 下载次数: 25

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-15 10:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

能否把代码帖下阿?我不太清楚这种带按钮的,哪里可以找到代码。

我在你提供的附件中(1-157行)修改数据,得到的结果OK;但是,在后面增加数据(行158-1000),再点击按钮,结果就不对呢。见附件。


screen 4

screen 4

TA的精华主题

TA的得分主题

发表于 2015-7-15 10:23 | 显示全部楼层
因为你出错单元格中字符串连接是逗号,而不是多数的分号

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-15 10:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
doitbest 发表于 2015-7-15 10:23
因为你出错单元格中字符串连接是逗号,而不是多数的分号

哎呀,是我的错。测试了下,结果Perfect!! 多谢呢。

不用贴代码给我了哈,我在附件看到了哟。

P.S. 不知道为啥,今天鲜花还没有用就没了。明天再给哦。

TA的精华主题

TA的得分主题

发表于 2015-7-15 10:44 | 显示全部楼层
可在代码前面加一条替换语句,将逗号替换为分号,就正常了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 12:36 , Processed in 0.045148 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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