如何使用大于单词

时间:2017-03-13 13:13:14

标签: vba excel-vba excel

我怎么能把一个大于一个字。 我应该创建一个函数吗? 我有一个带有7张表格的excel文件。一个通用的所有元素和另外6个与铜,银,金,普拉丁,PlPlus& Ambass

我想要的是:

Bronze < Silver < Gold < Platin < PlPlus < Ambass

并提出考虑D或F列的条件 并且例如在第10行上说:

let's say on my general sheet I have,  D10 = silver
let's say on my general sheet I have,  F10 = gold 
If D10 < F10 then send the entire Row to a special sheet "GOLD" 

let's say on my general sheet I have,  D10 = Platin
let's say on my general sheet I have,  F10 = Bronze
If D10 > F10 then send the entire Row10 to a special sheet "Platin" 

let's say on my general sheet I have, D10 = F10 =silver
if there are the same status send it to the sheet with that status.

我怎么能在vba上解释,青铜是最小的类别之后是白银之后的黄金之后是Platin之后是PlPlus之后是Ambass ??

3 个答案:

答案 0 :(得分:0)

您可以在静态工作表上使用它们,然后按顺序从a1到#,然后使用worksheetfunction.match为您提供行,或者像Application.WorksheetFunction.Match("gold",array("silver","gold","platinum"))

function metal_rank(strMetal as string) as long
    Application.WorksheetFunction.Match(strMetal,array("silver","gold","platinum"))
end function

答案 1 :(得分:0)

在标准VBA模块中,创建一个函数:

Function category(categoryName as String) as Integer
    select case categoryName
        case "Bronze"
            category = 0
        case "Silver"
            category = 1
        case "Gold"
            category = 2
        case "Platin"
            category = 3
        case "PlPlus"
            category = 4
        case "Ambass"
            category = 5
    end select
end function

然后,在您的调用代码中,您可以进行这样的比较:

dim ws as Worksheet    

If category(D10) < category(F10) then
    set ws = worksheets(F10)
else                ' Either category(D10) is greater, or they're equal
    set ws = worksheets(D10)
endif

这会将变量ws设置为您要编写数据的工作表。

答案 2 :(得分:0)

您可以在主代码中使用辅助函数(例如,GetSheetName()),并接受两个范围值进行比较,并返回工作表名称,其中&#34;发送&#34;数据:

Sub main()

    With Worksheets(GetSheetName(Range("D10").Value, Range("F10").Value))
        MsgBox .Name
    End With

End Sub

以便GetSheetName()成为:

Function GetSheetName(val1 As String, val2 As String) As String
    Select Case GetRank(UCase(val1)) - GetRank(UCase(val2))
        Case Is < 0
            GetSheetName = val2
        Case Else
            GetSheetName = val1
    End Select
End Function

反过来使用另一个辅助函数来返回传递值的 rank

后一个辅助函数可以利用许多不同的可用方法/函数

  • Application.Match方法(如@Natahn_Sav建议的那样):

    Function GetRank(val As String) As Long
        GetRank = Application.WorksheetFunction.Match(val, Array("Bronze", "Silver", "Gold", "Platinum", "PlPlus", "Ambass"))
    End Function
    
  • Switch功能

    Function GetRank(val As String) As Long
        GetRank = Switch(val = "BRONZE", 0, _
                         val = "SILVER", 1, _
                         val = "GOLD", 2, _
                         val = "PLATIN", 3, _
                         val = "PLPLUS ", 4, _
                         val = "AMBASS", 5)
    End Function
    
  • Select Case语法

    Function GetRank(val As String) As Long
        Select Case val
            Case "BRONZE"
                GetRank = 0
            Case "SILVER"
                GetRank = 1
            Case "GOLD"
                GetRank = 2
            Case "PLATIN"
                GetRank = 3
            Case "PLPLUS"
                GetRank = 4
            Case "AMBASS"
                GetRank = 5
        End Select
    End Function