如何在excelmacros中查找特殊字符

在excel vba中search列中的特殊字符时遇到问题。 我用如下的运算符:

If Sheets("Eclipse Report").Cells(j, k).Value Like "*[%, !, *, ;, :, ~, °, ß, ö , ô, ó, ò, Ç, ü, é, â, ä , à, å, ç, ê, ë, è, ï, î, ì, æ, Æ, ô, ö, ò, û, ù, ÿ, ¢, £, ¥, ƒ, á, í, ó, ú, ñ, Ñ, °, o, ·, ², €, Ÿ, ©, ®, À, Á, Â, Ã, Ä, Å, È, É, Ê, Ë, Ì, Í, Î, Ï, Ð, Ò, Ó, Ô, Õ, Ö, ×, Ø, Ù, Ú, Û, Ü, Ý, Þ, ã, ð, õ]*" Then Sheets("Eclipse Report").Rows(j).Select 'Sheets("Eclipse Report").Rows(j).Copy 'Sheets("Sheet3").Select 'Sheets("Sheet3").Paste Selection.Copy Sheets("Sheet3").Select ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Rows(j).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ActiveWindow.SmallScroll Down:=-30 Rows(j).Select ActiveSheet.Paste 'Sheets("Sheet3").Select 'Sheets("Sheet3").Paste 'MsgBox ("special record found and pasted") Exit For End If 

该代码没有find我期望的logging。

从字符列表中删除空格后,它通过了我的testing。

 Sub Test() Application.ScreenUpdating = False Dim j As Long, k As Long Dim r As Range With Sheets("EclipseReport") Set r = .Range("A1:O1") For j = 1 To 255 r(j) = Chr(j) Next For j = 1 To 17 For k = 1 To 15 If .Cells(j, k).Value Like "*[%!*;:~°ßöôóòÇüéâäàåçêëèïîìæÆôöòûùÿ¢£¥ƒáíóúñÑ°o·²€Ÿ©®ÀÁÂÃÄÅÈÉÊËÌÍÎÏÐÒÓÔÕÖ×ØÙÚÛÜÝÞãðõ]*" Then .Cells(j, k).Interior.ColorIndex = 6 End If Next Next End With Application.ScreenUpdating = True End Sub 

在这里输入图像说明

更新:正如共产国际所说,逗号也不是必要的。

Like模式的问题是括号内的字符列表没有分隔符。 所以要匹配axz ,您需要使用[axz] ,而不是[a, x, z] 。 第二个模式将匹配axz和空格。

所以,你正在寻找的模式是:

 Like "*[%!*;:~°ßöôóòÇüéâäàåçêëèïîìæÆôöòûùÿ¢£¥ƒáíóúñÑ°o·²€Ÿ©®ÀÁÂÃÄÅÈÉÊËÌÍÎÏÐÒÓÔÕÖ×ØÙÚÛÜÝÞãðõ]*" 

但是请记住, Like对区域设置和文本比较选项很敏感(请参阅MS文档 )。

就个人而言,我会考虑使用一个VScript RegExp来代替 – 它们更容易处理,并且具有更多的模式灵活性。