Case语句包含string

我想做一个select的case语句,其中基于一个string,我已经存储在一个variables包含某些单词。 从我所见过的每一个地方看,我都是对的,但是没有成功。 在case case.Contains(“GR CHER”)的case语句中,我一直在我的variables“Model”中收到“Compile Error:Invalid Qualifier”。

有没有人看到我在这里失踪的东西?

i = 2 Model = Sheets("Data").Cells(i, 8) While Not IsEmpty(Cells(i, 1)) Select Case True Case Model.Contains("GR CHER") Model = "Grand Cherokee" Case Model.Contains("CHRGR") Model = "Charger" Case Model.Contains("HLLCT") Model = "HellCat" Case Model.Contains("R1500") Model = "Ram 1500" Case Else Rows([i]).EntireRow.Delete i = i - 1 End Select Sheets("Data").Cells(i, 8).Value = Model i = i + 1 Wend 

你的代码看起来不像VBA。

此外,我不认为你可以做任何等于“包含”是一个Select Case

你的代码,重构,也解决了一些其他问题

 Sub zx() Dim i As Long Dim Model As Variant Dim Deleted As Boolean i = 2 With Sheets("Data") Do While Not IsEmpty(Sheets("Data").Cells(i, 1)) Model = Sheets("Data").Cells(i, 8) Deleted = False If Model Like "*GR CHER*" Then Model = "Grand Cherokee" ElseIf Model Like "*CHRGR*" Then Model = "Charger" ElseIf Model Like "*HLLCT*" Then Model = "HellCat" ElseIf Model Like "*R1500*" Then Model = "Ram 1500" Else Rows(i).EntireRow.Delete Deleted = True End If If Not Deleted Then .Cells(i, 8).Value = Model i = i + 1 End If Loop End With End Sub 

无需

  1. 循环遍历每一行以删除 – 更快到AutoFilter
  2. 或者在不使用它的情况下,在每一步中导出和存储variables模型

你可以尝试下面的方法,这是VBA等效

  • 在工作列中input一个公式以回退TRUE或FALSE来testingH列中的每个string
  • 过滤出错误的结果

=COUNT(SEARCH({"*GR CHER*","*CHRGR*","*HLLC*","*R1500*"},I2))=1

 Sub QuickCull() Dim ws As Worksheet Dim rng1 As Range Set ws = Sheets("Data") Set rng1 = ws.Range(ws.[b2], ws.Cells(Rows.Count, "B").End(xlUp)) Application.ScreenUpdating = False With rng1.Offset(0, 1) .EntireColumn.Insert .FormulaR1C1 = "=COUNT(SEARCH({""*GR CHER*"",""*CHRGR*"",""*HLLC*"",""*R1500*""},RC[5]))=1" .AutoFilter Field:=1, Criteria1:="False" .Offset(1, 0).EntireRow.Delete .EntireColumn.Delete End With Application.ScreenUpdating = True End Sub 

正如克里斯提到的,你不能使用“包含”,该函数将是“InStr”,但我很确定下面的方法将完成工作。

 Sub Models() Dim i As Long: i = 2 With ThisWorkbook.Sheets("Data") While i <= .Cells(.Rows.Count, "A").End(xlUp).Row If .Cells(i, 8) Like "*GR CHER*" Then .Cells(i, 8) = "Grand Cherokee" i = i + 1 ElseIf .Cells(i, 8) Like "*CHRGR*" Then .Cells(i, 8) = "Charger" i = i + 1 ElseIf .Cells(i, 8) Like "*HLLCT*" Then .Cells(i, 8) = "HellCat" i = i + 1 ElseIf .Cells(i, 8) Like "*R1500*" Then .Cells(i, 8) = "Ram 1500" i = i + 1 Else .Rows(i).EntireRow.Delete End If Wend End With End Sub 

它看起来像是在寻找完全匹配。 如果我在一个单元格中有“AVENGER(3.6L)”,并且代码说:

 If Model Like "*AVENGER*" Then Model = "Avenger" Deleted = False 

或者如果我尝试:

 If Model Like "AVENGER" Then Model = "Avenger" Deleted = False 

它不会赶上,如果语句,将下降,直到else语句,并删除行