2017-04-12 137 views
3

我嘗試使用類似的函數來區分以2或3個數字後面跟着更多空格字符開始的單元格(除空格字符外),但似乎無法識別後者。例如,對於兩個小區,一個包含VBA中的「like」運算符中的空格字符

11一些文字

和另一種含

111一些文本

我一直在努力,如果寫一個對第一但不是第二的陳述是真實的。我試圖

if cells(i,1) like "*##[ ]*" then 

if cells(i,1) like "*##\s*" then 

if cells(i,1) like "*##[^#]*" then 

以下信息上使用正則表達式從各種源(與前兩個我試圖找出2位數字加一白色空格字符,第三個2位數字後跟一個非數字)。

它是for循環的一部分,正如在上面的例子中,唯一的數字位於字符串的開頭,除了有時候是空白字符。在第一個代碼示例中,if語句對於2和3的數字都是正確的,對於第二個和第三個數字,兩者都是正確的。我不明白這一點,因爲我已經讀過關於正則表達式等功能。

我將不勝感激指導。我認爲這是相對簡單的,所以我確信我錯過了一些明顯的東西,並且如果是這樣的話,我很抱歉。

回答

7

VBA的運營商不支持RegEx。相反,它有自己的格式。空格使用文字值匹配,不需要轉義。

Input    Op  Pattern  Result 
"11 Some Text"  LIKE "## *"  True 
"11Some Text"  LIKE "## *"  False 

欲瞭解更多信息請登錄Microsoft's documentation

如果您寧願使用RegEx,請查看此answer。 @PortlandRunner善於花時間編寫出色的指南,其中包括許多示例。

+0

感謝您的快速反應和有用的信息。然而,我確實嘗試過使用'「## *」'並且仍然匹配單元格內容「111一些文本」,這就是讓我感到困惑的東西。我並沒有表示我在這個問題上試過這個道歉,但我嘗試了一系列的事情(部分在挫折中),並認爲我已經包含了最相關的東西。如果可能,我寧願繼續使用。 –

+0

我剛剛測試了''111'一些文字''反對'「## *」',我沒有得到一個匹配。你可以再試一次嗎? –

+0

@EuanRitchie我不認爲''## *「'應該與111 Some Text匹配,因爲空格不會跟隨兩個數字。我發佈的答案表明。 – AlwaysData

1

我閱讀了此MSDN網站上的資料,這似乎適用於我。

If Cells(i, 1).Value Like "## *" Then 
    Debug.Print ("Match") 
ElseIf Cells(i, 1).Value Like "### *" Then 
    Debug.Print ("Match") 
End If