Excel精英培训网

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

[已解决]谢谢snrvgbb 老师。关于替换的需求

[复制链接]
发表于 2011-11-7 14:04 | 显示全部楼层 |阅读模式
本帖最后由 lhj323323 于 2011-11-8 12:08 编辑

老师:
上传的附件中有详细的说明,敬请看看,谢谢了
=========
是否无法设置最佳答案了?
最佳答案
2011-11-8 10:04
  1. Private Sub CommandButton1_Click()
  2. Dim arr, k%, c As Range, matchs, match
  3. arr = Sheets("数据源").Range("a1:a" & Sheets("数据源").[a65536].End(3).Row)
  4. With CreateObject("vbscript.regexp")
  5.     .Global = True
  6.     .IgnoreCase = True
  7.     .Pattern = "Color\w+"
  8.     For k = 1 To UBound(arr)
  9.         If Len(arr(k, 1)) Then
  10.             If .Test(arr(k, 1)) Then
  11.                 Set matchs = .Execute(arr(k, 1))
  12.                 For Each match In matchs
  13.                     Set c = Sheets("参数").Range("b:c").Find(match, , , 1)
  14.                     If Not c Is Nothing Then
  15.                         If c.Column = 2 Then
  16.                             If Len(c.Offset(, 1)) Then
  17.                                 arr(k, 1) = Replace(arr(k, 1), match, c.Offset(, 1))
  18.                             Else
  19.                                 arr(k, 1) = arr(k, 1) & "{★}"
  20.                             End If
  21.                         End If
  22.                     Else
  23.                         arr(k, 1) = arr(k, 1) & "{新增色彩}"
  24.                         Sheets("参数").Range("a65536").End(3).Offset(1, 1) = match
  25.                     End If
  26.                 Next
  27.             End If
  28.        End If
  29.     Next
  30. End With
  31. With Sheets("结果表")
  32.     .Cells.ClearContents
  33.     .[a1].Resize(UBound(arr), 1) = arr
  34. End With
  35. End Sub
复制代码

替换.rar

11.64 KB, 下载次数: 22

发表于 2011-11-7 17:01 | 显示全部楼层
当关键词的整个“单词”位于参数表的B列,C列没有对应的关键词,那么接下来:

是先处理?(处理方法:进行说明,并用大括号括起来)
还是先判断?(判断整个“单词”是否位于参数表的C列)
回复

使用道具 举报

发表于 2011-11-7 17:22 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2011-11-7 18:57 | 显示全部楼层
爱疯 发表于 2011-11-7 17:01
当关键词的整个“单词”位于参数表的B列,C列没有对应的关键词,那么接下来:

是先处理?(处理方法:进 ...

爱疯老师:
当关键词的整个“单词”位于参数表的B列,C列没有对应的关键词,那么接下来:

是先处理?(处理方法:进行说明,并用大括号括起来)
还是先判断?(判断整个“单词”是否位于参数表的C列)


==================================
应是先判断它是否在C列,如果没有在C列,再进行处理。
回复

使用道具 举报

发表于 2011-11-7 19:02 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2. Dim arr, k%, c As Range, matchs, match
  3. arr = Sheets("数据源").Range("a1:a" & Sheets("数据源").[a65536].End(3).Row)
  4. With CreateObject("vbscript.regexp")
  5.     .Global = True
  6.     .IgnoreCase = False
  7.     .Pattern = "Color\w+"
  8.     For k = 1 To UBound(arr)
  9.         If Len(arr(k, 1)) Then
  10.             If .Test(arr(k, 1)) Then
  11.                 Set matchs = .Execute(arr(k, 1))
  12.                 For Each match In matchs
  13.                     Set c = Sheets("参数").Range("b:c").Find(match, , , 1)
  14.                     If Not c Is Nothing Then
  15.                         If c.Column = 2 Then
  16.                             If Len(c.Offset(, 1)) Then
  17.                                 arr(k, 1) = Replace(arr(k, 1), match, c.Offset(, 1))
  18.                             Else
  19.                                 arr(k, 1) = arr(k, 1) & "{★}"
  20.                             End If
  21.                         End If
  22.                     End If
  23.                 Next
  24.             End If
  25.        End If
  26.     Next
  27. End With
  28. With Sheets("结果表")
  29.     .Cells.ClearContents
  30.     .[a1].Resize(UBound(arr), 1) = arr
  31. End With
  32. End Sub
  33. 有些题意不是很明白,比如找不到的怎么表示
复制代码
回复

使用道具 举报

 楼主| 发表于 2011-11-7 22:32 | 显示全部楼层
snrvgbb 发表于 2011-11-7 19:02

snrvgbb老师:
您提出的找不到怎么办,是我大意了,如找不到,则将这个新出现的单词导入到[参数]表的B列,同时在数据源的该句的最后添加一个{新增色彩}
比如
COUNT(SK>=SD,3) AND REF(LOW,1)=LLV(LOW,120),1,0),LOW*0.98,'买进') ,COLOR0099FF;{新增色彩}
同时在参数表的B列添加这个新增的色彩的代码:COLOR0099FF
回复

使用道具 举报

发表于 2011-11-8 10:04 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub CommandButton1_Click()
  2. Dim arr, k%, c As Range, matchs, match
  3. arr = Sheets("数据源").Range("a1:a" & Sheets("数据源").[a65536].End(3).Row)
  4. With CreateObject("vbscript.regexp")
  5.     .Global = True
  6.     .IgnoreCase = True
  7.     .Pattern = "Color\w+"
  8.     For k = 1 To UBound(arr)
  9.         If Len(arr(k, 1)) Then
  10.             If .Test(arr(k, 1)) Then
  11.                 Set matchs = .Execute(arr(k, 1))
  12.                 For Each match In matchs
  13.                     Set c = Sheets("参数").Range("b:c").Find(match, , , 1)
  14.                     If Not c Is Nothing Then
  15.                         If c.Column = 2 Then
  16.                             If Len(c.Offset(, 1)) Then
  17.                                 arr(k, 1) = Replace(arr(k, 1), match, c.Offset(, 1))
  18.                             Else
  19.                                 arr(k, 1) = arr(k, 1) & "{★}"
  20.                             End If
  21.                         End If
  22.                     Else
  23.                         arr(k, 1) = arr(k, 1) & "{新增色彩}"
  24.                         Sheets("参数").Range("a65536").End(3).Offset(1, 1) = match
  25.                     End If
  26.                 Next
  27.             End If
  28.        End If
  29.     Next
  30. End With
  31. With Sheets("结果表")
  32.     .Cells.ClearContents
  33.     .[a1].Resize(UBound(arr), 1) = arr
  34. End With
  35. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2011-11-8 12:09 | 显示全部楼层
snrvgbb 发表于 2011-11-8 10:04

snrvgbb 老师:
测试成功了,谢谢您。
回复

使用道具 举报

发表于 2011-11-8 16:33 | 显示全部楼层
学习了,学习了,看不懂
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 02:29 , Processed in 0.246405 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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