VBA嵌套字符串If语句

时间:2017-05-15 18:42:28

标签: vba

我必须创建一个仪表板,C列将有不同的衍生产品,其成熟度称为短名称。 IRS示例7月18日。

有20个姓氏,有时候,c列可能有较低或较高字符的交易短名称。

我创建了一个嵌套的if语句,它在某种程度上起作用,只有当某个字符是大写或小写时才会失败。因此,我必须将此变体添加到if语句中,以使其起作用。其次,它没有找到未列出产品的短名称。

我可以这样做,它只查找字符并忽略大写和小写。

我的最后一句话,如果一个新的家族添加了一个短名称,我很想接受它。有什么想法我可以更新吗?

而不是给出完整列表,我把它保持得很小

实施例

If DerivativeID Like "*irs *" Then
    DerivativeFamily = "Interest Rate Swap "
ElseIf DerivativeID Like "*cds *" Then
    DerivativeFamily = "credit default swap "
Else
    DerivativeFamily = "Add to List"
End If

4 个答案:

答案 0 :(得分:3)

听起来像SELECT ... CASE的工作。试试这个:

DerivativeID = UCase(DerivativeID)

Select Case True
     Case DerivativeID like "*IRS*"
       DerivativeFamily = "Interest Rate Swap "
     Case DerivativeID like "*CDS*"
       DerivativeFamily = "Credit Default Swap "
     Case Else
       DerivativeFamily = "Add to List"
End Select

答案 1 :(得分:2)

在模块顶部指定Option Compare Text。默认字符串比较模式为Binary,这使得"A"在字符串比较中不等于"a"

使用=运算符进行直接比较时,您还可以使用StrComp模块中的VBA.Strings函数覆盖Option Compare设置:

Debug.Print StrComp("A", "A", vbBinaryCompare) 'prints 0
Debug.Print StrComp("A", "a", vbBinaryCompare) 'prints -1

Debug.Print StrComp("A", "A", vbTextCompare) 'prints 0
Debug.Print StrComp("A", "a", vbTextCompare) 'prints 0

正如其他答案所示,您也可以转换字符串的大小写。但是在这样做时你应该注意以下几点:

  • 如果多次比较非常大的字符串(例如在循环中),性能将会降低
  • 如果使用LCaseUCase,您使用的是Variant - 返回别名,这会产生额外的隐式类型转换开销,使用{{1}可以轻松避免} - 回复对手,StringLCase$

答案 2 :(得分:2)

仅使用LCase功能:

If LCase$(DerivativeID) Like "*irs *" Then
    DerivativeFamily = "Interest Rate Swap "
ElseIf LCase$(DerivativeID) Like "*cds *" Then
    DerivativeFamily = "credit default swap "
Else
    DerivativeFamily = "Add to List"
End If

答案 3 :(得分:1)

尝试使用LCase或UCase功能

类似的东西:

设置DerivativeID = LCase(DerivativeID)

如果......那么