2016-09-16 63 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

相關問題