Excel如果function

我做了这个大的Excel表,当时我不知道我需要通过类别sorting这个表。

我在一列( J这里)中描述了行和类的联合。 (例如:“用于使用轮胎的装运”)

我能够按照我想要的方式对表格进行sorting的唯一方法是使用以下方法构build类别列:

=IF(COUNTIF(J3;"*usi*");"Usins";IF(COUNTIF(J3;"*remis*");"Remise";IF(COUNTIF(J3;"*oe*");"Oenols";IF(COUNTIF(J3;"*KDB*");"KDB";IF(COUNTIF(J3;"*vis*");"cvis";IF(COUNTIF(J3;"*amc*");"AMC";0))))))

例如, usi是类别名称的一部分,我有时写为

  • usin'ss
  • 使用设
  • 全光照的
  • usins

    因为你知道聪明。

无论如何,我如何翻译=If(If(If...)))在VBA可读的东西,如:

If...then If... then

EVBA中的“IF … ELSE”示例

 IF condition_1 THEN 'Instructions inside First IF Block ELSEIF condition_2 Then 'Instructions inside ELSEIF Block ... ELSEIF condition_n Then 'Instructions inside nth ELSEIF Block ELSE 'Instructions inside Else Block END IF 

EVBA案例切换示例

 Select Case score Case Is >= 90 result = "A" Case Is >= 80 result = "B" Case Is >= 70 result = "C" Case Else result = "Fail" End Select 

这两种情况下的瀑布式逻辑,如果满足第一个条件,则不会继续,但如果不满足条件1则检查下一个等等。

用法示例:

 Function makeASelectAction(vI_Score As Integer) As String Select Case vI_Score Case Is >= 90 makeASelectAction = "A, fantastic!" Case Is >= 80 makeASelectAction = "B, not to shabby." Case Is >= 70 makeASelectAction = "C... least your average" Case Else makeASelectAction = "Fail, nuff said." End Select End Function Function makeAnIfAction(vS_Destination As String, vS_WhatToSay As String, Optional ovR_WhereToStick As Range, Optional ovI_TheScore As Integer) If vS_Destination = "popup" Then MsgBox (vS_WhatToSay) ElseIf vS_Destination = "cell" Then ovR_WhereToStick.value = vS_WhatToSay ElseIf vS_Destination = "select" Then MsgBox makeASelectAction(ovI_TheScore) End If End Function Sub PopMeUp() Call makeAnIfAction("popup", "Heyo!") End Sub Sub PopMeIn() Call makeAnIfAction("cell", "Heyo!", Range("A4")) End Sub Sub MakeADescision() Call makeAnIfAction(vS_Destination:="select" _ , vS_WhatToSay:="Heyo!" _ , ovI_TheScore:=80 _ ) End Sub 

它会告诉你如何发送variables到函数,以及如何调用这个函数,它会告诉你如何使用可选参数,函数如何与另一个函数或子进行交互,如何将一个值写入一个表单或者将一个消息盒。 可能性是无止境的。 让我知道如果你需要清理或编码的其他东西。

您似乎正在使用CountIf来查看单元格的内容是否与特定模式相匹配,如果是,则给出replacestring。 在VBA中,您可以使用Like运算符进行模式匹配。 无论如何 – 这是我写的一个函数,当它传递一个string和一系列模式/replacestring时,循环遍历这些模式,直到find一个匹配,然后返回相应的replace。 如果找不到匹配,则返回一个可选的默认值(提供的最后一个参数)。 如果没有提供默认值,则返回#N/A

该代码说明了有时候复杂的嵌套ifs可以被遍历各种情况的循环代替。 如果您事先不知道案件的数量,这很有帮助。

 Function ReplacePattern(s As String, ParamArray patterns()) As Variant Dim i As Long, n As Long n = UBound(patterns) If n Mod 2 = 0 Then n = n - 1 For i = 0 To n Step 2 If s Like patterns(i) Then ReplacePattern = patterns(i + 1) Exit Function End If Next i If UBound(patterns) Mod 2 = 0 Then ReplacePattern = patterns(n + 1) Else ReplacePattern = CVErr(xlErrNA) End If End Function 

您的电子表格公式相当于

 =ReplacePattern(J3,"*usi*","Usins","*remis*","Remise","*oe*","Oenols","*KDB*","KDB","*vis*","cvis","*amc*","AMC",0)