VBA:从string列表中查找variables

我正在试图看看列表中的某个单词(或数字)是否在某个string中。

例如,我有以下的短语:“2012年1月20日和2011年”。
而且我想看看这个月是否在这个句子中,但是只要有一个月,这个句子的月份是什么也没有关系。 (所以“2012年2月20日和2011年”也会通过)

我在想像这样的事情:

Sub Run_Find() Dim Month As String, Number, Year, Splitmonth As Variant Dim ii As Integer Month = "January, February, March, April, May, June, July, August, September, October, November, December" Number = "1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 28, 29, 30, 31" Year = "2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015" Splitmonth = VBA.Split(Month, ",") For ii = 0 To 12 If VBA.InStr(1, "January 30, 2012 and 2011", Splitmonth(ii)) > 0 Then MsgBox "Found it!" Else MsgBox "Nop!" End If Next ii End Sub 

这工作。 但有没有其他的select? 查看列表,如果列表中的任何单词出现在string中,它应该通过。

最后我想看看它是否包含一个月,一天(数字),一年, Then ..
使用这种方法似乎变得“复杂”。

在此先感谢,R

正则expression式在这里可能有帮助。 正则expression式是一个广泛的主题( 正则expression式 ),但是这里有几个例子是与你的问题相关的。

 Public Sub example1() Dim re As Object Set re = CreateObject("vbscript.regexp") re.Pattern = "January|February|March|April|May|June|July|August|September|November|December" If re.test("January 30, 2012 and 2011") Then Debug.Print "match found" End If End Sub '=> match found Public Sub example2() Dim re As Object Dim matches As Object, match As Object, submatch Set re = CreateObject("vbscript.regexp") re.Pattern = "(January|February|March|April|May|June|July|August|September|November|December) (\d+), (\d{4})" Set matches = re.Execute("January 30, 2012 and 2011") For Each match In matches Debug.Print "match: " & match Debug.Print "submatches: ", For Each submatch In match.submatches Debug.Print submatch, Next Debug.Print "" Next End Sub '=> match: January 30, 2012 '=> submatches: January 30 2012 

不比正则expression式好,但是这里有另一种使用Filter函数的方法

 Sub Run_Find() Dim sMonth As String Dim vaMonth As Variant Dim vaDate As Variant Dim i As Long sMonth = "January, February, March, April, May, June, July, August, September, October, November, December" vaMonth = Split(sMonth, "," & Space(1)) vaDate = Split("July 30, 2012 and 2011", Space(1)) For i = LBound(vaMonth) To UBound(vaMonth) If UBound(Filter(vaDate, vaMonth(i))) >= 0 Then Debug.Print vaMonth(i) Exit For End If Next i End Sub