2016-09-16 38 views
2

我在excel vba中搜索列中的特殊字符时遇到问题。 我用类似操作如下:如何在excel宏中查找某列中的特殊字符

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 

的代码没有找到我所期望的记录。

回答

1

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

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 

enter image description here

更新:由于共产国际规定的逗号没有必要要么。

+0

嗨@thomas,感谢您的回答和善良的帮助。但是我仍然没有得到正确的输出。没有任何特殊字符的单元格显示为黄色,这不是预期的输出。你能提出一些建议吗? – pooja

+0

不客气。快乐编码! – 2016-09-16 10:49:37

1

您的Like类似模式存在的问题是括号内的字符列表中没有分隔符。因此,要匹配a,xz,您需要使用[axz]而不是[a, x, z]。第二种模式将匹配a,x,z,,和空格。

所以,你要寻找的模式是:

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

但是,请记住,Like对区域设置敏感,你的文字比较选项(参见MS documentation)。

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

+0

我的回答已经被接受了,但是我按照你所说的从字符列表中删除了逗号。感谢+1 – 2016-09-21 10:34:15

相关问题