【问题标题】:create function to calculate total score of player on multiple crietera创建函数来计算多个标准的玩家总分
【发布时间】:2019-10-14 14:08:12
【问题描述】:

我的数据是这样的

            f         g     h       i    points new  points old
name        runs    balls   4's    6's    
xxy         40         60    2      4      50         26     
aabc        25         45    2      0      25         13.5  
lmn         102        80    10     4      138        70

我需要根据以下标准计算玩家得分的总分

  1. 玩家每跑一次得 1 分,而他获得 0.5 分

  2. 玩家每击出一个 6 就得 2 分,而他之前获得 1 分

  3. 玩家之前每击出 4 个 4 就得 1 分,而他获得 0.5 分

  4. 玩家得分50分8分,之前是4分

  5. 玩家得分 16 得分 100 之前是 8 分

  6. 开始 11 获得 2 分

  7. 玩家因低罢工而获得负分,如下所示

    • 罢工率低于50%负点-6早-3

    • 50 到 60 负点之间的罢工率 -4 早 -2

    • 打击率在 60 到 70 负点之间 -2 早 -1

    • 出鸭(零)负点-2(无变化)

我有很长的 excel 公式,如果评分系统发生任何变化,这很难改变。这就是我建议将各种标准放在一张表中并将玩家数据与结果一起放在另一张表中以计算玩家得分的方式。

这就是我建议将各种标准放在一张表中,将玩家数据放在另一张表中来计算玩家得分的方式。

我尝试创建函数来计算玩家得分。但是我无法正确结束它。此外,我想将标准放在另一张表中并计算点,我如何为此创建函数。我从这样的事情开始:

Function tscore(tscore) As Integer
    strikerate = 0
    economyrate = 0 
    halfcentry = 0
    century = 0
    ducks = 0
    wickets = 0
    runs = 0
    SIXERS = 0
    BOUNDERY = 0
    starteleven=2
    If Range("f2") > 0 Then
        runs = Range("F2") * 1
    End If
    If Range("H2") > 0 Then
        BOUNDERY = Range("H2") * 1
    End If
    If Range("H2") > 0 Then
       SIXERS = Range("I2") * 2
    End If
    If Range("F2") / Range("G2") < 50 Then
       strikerate = -3
    Else
       If Range("F2") / Range("G2") >= 50 And Range("F2") / Range("G2") <= 59.9  Then
           strikerate = -2
       Else
           If Range("F2") / Range("G2") >= 60 And Range("F2") / Range("G2") <= 70 Then
               strikerate = -1
           endIf
       endif
    endif
    endif

    tscore=runs+  BOUNDERY+ SIXERS+strikerate+starteleven
end function

实际结果应该是

 name        points  new     points  old
 xxy           50                26
 aabc          25                13.5
 lmn           138                70

但我无法完成 vba 功能。

【问题讨论】:

  • 您需要澄清您需要帮助的内容。我们无法猜测您的问题是什么,也没有人会为您实施。

标签: excel vba


【解决方案1】:

创建函数时,将函数所需的所有信息作为参数传递。不要像其他单元格一样从外部源读取数据。如果函数需要,就传入。

不要将参数命名为与函数名相同的名称。要返回一个值,请将该值赋给函数的名称。如果你有一个同名的参数,它会混淆。

这个例子没有加起来,因为我没有理解所有的条件,但它应该给你一个开始,你可以解决问题。

Public Function Score(ByVal Runs As Long, ByVal Balls As Long, ByVal Fours As Long, ByVal Sixers As Long, _
    ByVal RunFactor As Long, ByVal FourFactor As Long, ByVal SixerFactor As Long, _
    ByVal HalfFactor As Long, ByVal CentFactor As Long, _
    ByVal Rate1Factor As Long, ByVal Rate2Factor As Long, ByVal Rate3Factor As Long) As Double

    Dim dReturn As Double

    dReturn = (Runs * RunFactor) + (Fours * FourFactor) + (Sixers * SixerFactor)

    If Runs >= 50 Then dReturn = dReturn + HalfFactor
    If Runs >= 100 Then dReturn = dReturn + (CentFactor - HalfFactor)

    Select Case Runs / Balls
        Case Is < 0.5
            dReturn = dReturn - Rate1Factor
        Case Is <= 59.9
            dReturn = dReturn - Rate2Factor
        Case Is <= 70
            dReturn = dReturn - Rate3Factor
    End Select

    Score = dReturn

End Function

您不需要单独的变量 (dReturn),但我喜欢使用一个。您在这样的单元格中使用该函数

=score(F2,G2,H2,I2,1,1,2,8,16,3,2,1)

请注意,我的因子都是硬编码的,但您也可以将它们指向范围

=score(F2,G2,H2,I2,Sheet2!A1,Sheet2!A2,Sheet2!A3,Sheet2!A4,Sheet2!A5,Sheet2!A6,Sheet2!A7,Sheet2!A8)

更好的是,使用命名范围

=score(F2,G2,H2,I2,Run,Four,Sixer,Half,Century,Strike1,Strike2,Strike3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多