VBA自定义函数来比较值

The*_*e B 1 excel vba excel-vba

我正在尝试创建一个基本上这样做的自定义函数:

  • 该函数在F列中,并查看C列以查看其中的值.
  • 如果是USA_USD,它将显示USD在colomn F中
  • 如果是Australia_AUD,它将显示AUD在colomn F中
  • 等等
Function The_Decider(DealCurrency, X)       
    If DealCurrency = "USA_USD" Then X = "USD"
    Else
    If DealCurrency = "Australia_AUD" Then X = "AUD"
    Else
    If DealCurrency = "Switzerland_CHF" Then X = "CHF"
    Else
    If DealCurrency = "China_CNY" Then X = "CNY"
    Else
    If DealCurrency = "EMU_EUR" Then X = "EUR"
    Else
    If DealCurrency = "Great Britain_GBP" Then X = "GBP"
    Else
    If DealCurrency = "Hong Kong_HKD" Then X = "HKD"
    Else
    If DealCurrency = "Japan_JPY" Then X = "JPY"
    Else
    If DealCurrency = "Korea(South)_KRW" Then X = "KRW"
    Else
    If DealCurrency = "Viet Nam_VND" Then X = "VND"
End Function
Run Code Online (Sandbox Code Playgroud)

为什么我要进入#valueC列?

Sam*_*Sam 5

首先,您实际上不会在任何时候提供返回值.另外Select Case,为了便于阅读,你可能会更好地选择一个区块.

您应该在函数头中声明返回类型,然后使用与函数相同的名称来返回代码中的值:

Function The_Decider(ByVal DealCurrency As String) As String '// <~~ return type

    Dim X As String

    Select Case DealCurrency
        Case "USA_USD":             X = "USD"
        Case "Australia_AUD":       X = "AUD"
        Case "Switzerland_CHF":     X = "CHF"
        Case "China_CNY":           X = "CNY"
        Case "EMU_EUR":             X = "EUR"
        Case "Great Britain_GBP":   X = "GBP"
        Case "Hong Kong_HKD":       X = "HKD"
        Case "Japan_JPY":           X = "JPY"
        Case "Korea(South)_KRW":    X = "KRW"
        Case "Viet Nam_VND":        X = "VND"
        Case Else:                  X = "Unknown"
    End Select

    The_Decider = X '// <~~ the part that actually returns the value

End Function
Run Code Online (Sandbox Code Playgroud)

虽然看到您的输入似乎在最后3个字母中有货币代码,但我甚至不会使用UDF.只需使用工作表公式就足够了:

=RIGHT(C1,3)
Run Code Online (Sandbox Code Playgroud)