@@ -550,6 +550,8 @@ type formulaFuncs struct {
550550// MIRR
551551// MOD
552552// MODE
553+ // MODE.MULT
554+ // MODE.SNGL
553555// MONTH
554556// MROUND
555557// MULTINOMIAL
@@ -8021,6 +8023,67 @@ func (fn *formulaFuncs) MODE(argsList *list.List) formulaArg {
80218023 return newNumberFormulaArg (mode )
80228024}
80238025
8026+ // MODEdotMULT function returns a vertical array of the statistical modes
8027+ // (the most frequently occurring values) within a list of supplied numbers.
8028+ // The syntax of the function is:
8029+ //
8030+ // MODE.MULT(number1,[number2],...)
8031+ //
8032+ func (fn * formulaFuncs ) MODEdotMULT (argsList * list.List ) formulaArg {
8033+ if argsList .Len () < 1 {
8034+ return newErrorFormulaArg (formulaErrorVALUE , "MODE.MULT requires at least 1 argument" )
8035+ }
8036+ var values []float64
8037+ for arg := argsList .Front (); arg != nil ; arg = arg .Next () {
8038+ cells := arg .Value .(formulaArg )
8039+ if cells .Type != ArgMatrix && cells .ToNumber ().Type != ArgNumber {
8040+ return newErrorFormulaArg (formulaErrorVALUE , formulaErrorVALUE )
8041+ }
8042+ for _ , cell := range cells .ToList () {
8043+ if num := cell .ToNumber (); num .Type == ArgNumber {
8044+ values = append (values , num .Number )
8045+ }
8046+ }
8047+ }
8048+ sort .Float64s (values )
8049+ cnt := len (values )
8050+ var count , modeCnt int
8051+ var mtx [][]formulaArg
8052+ for i := 0 ; i < cnt ; i ++ {
8053+ count = 0
8054+ for j := i + 1 ; j < cnt ; j ++ {
8055+ if values [i ] == values [j ] {
8056+ count ++
8057+ }
8058+ }
8059+ if count > modeCnt {
8060+ modeCnt = count
8061+ mtx = [][]formulaArg {}
8062+ mtx = append (mtx , []formulaArg {newNumberFormulaArg (values [i ])})
8063+ } else if count == modeCnt {
8064+ mtx = append (mtx , []formulaArg {newNumberFormulaArg (values [i ])})
8065+ }
8066+ }
8067+ if modeCnt == 0 {
8068+ return newErrorFormulaArg (formulaErrorNA , formulaErrorNA )
8069+ }
8070+ return newMatrixFormulaArg (mtx )
8071+ }
8072+
8073+ // MODEdotSNGL function returns the statistical mode (the most frequently
8074+ // occurring value) within a list of supplied numbers. If there are 2 or more
8075+ // most frequently occurring values in the supplied data, the function returns
8076+ // the lowest of these values. The syntax of the function is:
8077+ //
8078+ // MODE.SNGL(number1,[number2],...)
8079+ //
8080+ func (fn * formulaFuncs ) MODEdotSNGL (argsList * list.List ) formulaArg {
8081+ if argsList .Len () < 1 {
8082+ return newErrorFormulaArg (formulaErrorVALUE , "MODE.SNGL requires at least 1 argument" )
8083+ }
8084+ return fn .MODE (argsList )
8085+ }
8086+
80248087// NEGBINOMdotDIST function calculates the probability mass function or the
80258088// cumulative distribution function for the Negative Binomial Distribution.
80268089// This gives the probability that there will be a given number of failures
0 commit comments