Excel 从列表中查找最近的数字组

Excel 从列表中查找最近的数字组,excel,excel-formula,Excel,Excel Formula,需要一个有点奇怪的公式。我有随机数,我需要它们分成两组,每组3个,两组尽可能接近,但不能重复任何数字。所以,如果我说1,2,3,44,12,5,7,9。我将A组分为1,3和9组,总共13个,b组分为2,5,7组,总共14个。有时我收到6个数字,有时是16个数字,通常是4位数字。有什么想法吗?谢谢。我认为这对Excel来说可能太难了,但是如果您想尝试一下,希望能为您指明正确的方向,下面是一些C#LINQ代码,以生成您的答案: var possibles = src.Combinations(3).

需要一个有点奇怪的公式。我有随机数,我需要它们分成两组,每组3个,两组尽可能接近,但不能重复任何数字。所以,如果我说1,2,3,44,12,5,7,9。我将A组分为1,3和9组,总共13个,b组分为2,5,7组,总共14个。有时我收到6个数字,有时是16个数字,通常是4位数字。有什么想法吗?谢谢。

我认为这对Excel来说可能太难了,但是如果您想尝试一下,希望能为您指明正确的方向,下面是一些C#LINQ代码,以生成您的答案:

var possibles = src.Combinations(3).SelectMany(ps => src.Except(ps).Combinations(3).Select(ps2 => new { ps, ps2 })).Select(psps2 => new { sum = psps2.ps.Sum()+psps2.ps2.Sum(), psps2.ps, psps2.ps2 });
var minsum = possibles.Min(psps2sum => psps2sum.sum);
var possibleans = possibles.Where(psps2sum => psps2sum.sum == minsum).First();
请注意,有20对可能的组符合您的最小值,例如(1,2,3),(5,7,9)

组合
扩展如下:

public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k) {
    return k == 0 ? new[] { new T[0] } :
      elements.SelectMany((e, i) =>
        elements.Skip(i + 1).Combinations(k - 1).Select(c => (new[] { e }).Concat(c)));
}
公共静态IEnumerable组合(此IEnumerable元素,int k){
返回k==0?new[]{new T[0]}:
元素。选择多个((e,i)=>
元素.跳过(i+1).组合(k-1).选择(c=>(new[]{e}).Concat(c));
}

我投票结束这个问题,因为a)没有显示原始的努力,b)这属于主题。