public static final FreeRefFunction instance = new Countifs();
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
- Double result = null;
- if (args.length == 0 || args.length % 2 > 0) {
+ // https://support.office.com/en-us/article/COUNTIFS-function-dda3dc6e-f74e-4aee-88bc-aa8c2a866842?ui=en-US&rs=en-US&ad=US
+ // COUNTIFS(criteria_range1, criteria1, [criteria_range2, criteria2]...)
+ // need at least 2 arguments and need to have an even number of arguments (criteria_range1, criteria1 plus x*(criteria_range, criteria))
+ if (args.length < 2 || args.length % 2 != 0) {
return ErrorEval.VALUE_INVALID;
}
- for (int i = 0; i < args.length; ) {
+
+ Double result = null;
+ // for each (criteria_range, criteria) pair
+ for (int i = 0; i < args.length; i += 2) {
ValueEval firstArg = args[i];
ValueEval secondArg = args[i + 1];
- i += 2;
- NumberEval evaluate = (NumberEval) new Countif().evaluate(new ValueEval[]{firstArg, secondArg}, ec.getRowIndex(), ec.getColumnIndex());
+ NumberEval evaluate = (NumberEval) new Countif().evaluate(
+ new ValueEval[] {firstArg, secondArg},
+ ec.getRowIndex(),
+ ec.getColumnIndex());
if (result == null) {
result = evaluate.getNumberValue();
} else if (evaluate.getNumberValue() < result) {
public static final FreeRefFunction instance = new Sumifs();
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
+ // https://support.office.com/en-us/article/SUMIFS-function-c9e748f5-7ea7-455d-9406-611cebce642b
+ // COUNTIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...
// need at least 3 arguments and need to have an odd number of arguments (sum-range plus x*(criteria_range, criteria))
if(args.length < 3 || args.length % 2 == 0) {
return ErrorEval.VALUE_INVALID;