如何在数据中find部分string

所以我一直在努力创build一个macros来parsing大数据集,而我正处于完成阶段。 我试图按月分析date,并忽略年份,以便我可以限定各种if语句在另一列中打印string。 打印string和其他一切不是一个问题,它只是finddate。 我不太关心今年的“一月”,“二月”,“三月”,这样我可以确定是Q1,Q2,Q3 1H,2H等等。我拥有的代码是试图做到这一点是在legCounter = 3块以下。 (我把两个星号旁边的行不是它应该的)。

'Counts legs to narrow structure type Do DoEvents row_color_tester = row_number If tradeTime = Range("B" & (row_color_tester + 1)).Text Or tradeTime = Range("B" & (row_color_tester - 1)).Text Then legCounter = legCounter + 1 End If row_number = row_number + 1 Loop Until tradeTime <> Range("B" & (row_color_tester + 1)).Text 'Analyzes individual legs to determine specific structure type If legCounter = 2 Then Range("Q" & (row_number - legCounter)) = "Spread" Rows(row_number - legCounter).EntireRow.Interior.ColorIndex = 4 **ElseIf legCounter = 3 Then If StrComp(Range("H" & (row_number - 1)).Text, "Jan", vbTextCompare) > 0 & StrComp(Range("H" & (row_number - 2)).Text, "Feb", vbTextCompare) > 0 & StrComp(Range("H" & (row_number - 3)).Text, "Mar", vbTextCompare) > 0 Then** Range("Q" & (row_number - legCounter)) = "Q1" Rows(row_number - legCounter).EntireRow.Interior.ColorIndex = 4 End If ElseIf legCounter = 4 Then Range("Q" & (row_number - legCounter)) = legCounter Rows(row_number - legCounter).EntireRow.Interior.ColorIndex = 4 ElseIf legCounter = 5 Then Range("Q" & (row_number - legCounter)) = legCounter Rows(row_number - legCounter).EntireRow.Interior.ColorIndex = 4 End If Loop Until row_number = lastRow 

数据存储在列H中,格式如下:

 16-Mar 16-Feb 16-Jan 

它看起来像你想要InStr函数或只是右函数来确定Range.Text属性的月份部分。 StrCmp函数比较整个string并返回sorting位置。

 ElseIf legCounter = 3 Then If Instr(1, Range("H" & (row_number - 1)).Text, "Jan", vbTextCompare) > 0 Or _ Right(Range("H" & (row_number - 2)).Text, 3) = "Feb" Or _ Range("H" & (row_number - 3)).Text Like "*Mar" Then Range("Q" & (row_number - legCounter)) = "Q1" Rows(row_number - legCounter).EntireRow.Interior.ColorIndex = 4 End If ... 

这是三种文本比较方法。 对于所有四个方面来说, Select Case声明可能更合适。

 ElseIf legCounter = 3 Then Select Case Right(Range("H" & (row_number - 2)).Text, 3) Case "Jan", "Feb", "Mar" Range("Q" & (row_number - legCounter)) = "Q1" Rows(row_number - legCounter).EntireRow.Interior.ColorIndex = 4 Case "Apr", "May", "Jun" Range("Q" & (row_number - legCounter)) = "Q2" Rows(row_number - legCounter).EntireRow.Interior.ColorIndex = 4 '? Case "Jul", "Aug", "Sep" Range("Q" & (row_number - legCounter)) = "Q3" Rows(row_number - legCounter).EntireRow.Interior.ColorIndex = 4 '? Case "Oct", "Nov", "Dec" Range("Q" & (row_number - legCounter)) = "Q4" Rows(row_number - legCounter).EntireRow.Interior.ColorIndex = 4 '? End Select ... 

这个小小的比例将会取代你的范围,并返回季度数字。

格式(CDate(范围(“H”和(row_number – 1))。文本),“q”)