Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vba中的excel组合和选项_Excel_Combinations_Options_Vba - Fatal编程技术网

vba中的excel组合和选项

vba中的excel组合和选项,excel,combinations,options,vba,Excel,Combinations,Options,Vba,首先,我将描述我的excel文件的外观以及我正在尝试做的事情。首先,想象一些组合,让我们从一个例子开始,这是我的专栏a: A B C D AB AC AD BC BD CD ABC .. .. .. ABCD 我希望每个人都能理解这一点。我想做的是在VBA中编写一个代码,它执行以下操作。例如,如果我要选择一个选项,那么我的选项将是: B、 C、D或BC、D或BD、C或CD、B或BCD。。。。。。。等等。这样我就有很多可能。我想让我的VBA把它放在下一页,然后在列中,这样它会把它们放在一起,这

首先,我将描述我的excel文件的外观以及我正在尝试做的事情。首先,想象一些组合,让我们从一个例子开始,这是我的专栏a:

A
B
C
D
AB
AC
AD
BC
BD
CD
ABC
..

..
..
ABCD
我希望每个人都能理解这一点。我想做的是在VBA中编写一个代码,它执行以下操作。例如,如果我要选择一个选项,那么我的选项将是: B、 C、D或BC、D或BD、C或CD、B或BCD。。。。。。。等等。这样我就有很多可能。我想让我的VBA把它放在下一页,然后在列中,这样它会把它们放在一起,这样就可以看到了

我想这样做不仅仅是为了A到D,而是为了整个专栏中的内容,所以探索所有选项。我知道如果我有A到D,它是5个变量,因此方程是2^4-1个选项。但随着4增加到可能的50,仍然可以放置所有选项


有人能帮我写这段代码吗,或者给我指出正确的方向。

我已经编写了一个类来处理处理处理二项式系数的常见函数,这是您的问题所属的问题类型。它执行以下任务:

  • 将任意N选择K的所有K索引以良好格式输出到文件。可以用更具描述性的字符串或字母替换K索引。这种方法使得解决这类问题变得非常简单

  • 将K索引转换为已排序二项系数表中某个条目的正确索引。这种技术比以前发布的依赖于迭代的技术要快得多。它通过使用帕斯卡三角形固有的数学特性来实现这一点。我的论文谈到了这一点。我相信我是第一个发现并发表这项技术的人,但我可能错了

  • 将已排序的二项式系数表中的索引转换为相应的K索引。我相信它可能比你找到的链接要快

  • 使用此方法计算二项式系数,它不太可能溢出,并且适用于较大的数字

  • 该类是用.NETC#编写的,它提供了一种通过使用泛型列表来管理与问题相关的对象(如果有)的方法。这个类的构造函数接受一个名为InitTable的bool值,如果为true,它将创建一个通用列表来保存要管理的对象。如果此值为false,则不会创建表。执行上述4种方法不需要创建表。提供了访问器方法来访问表

  • 有一个关联的测试类,它显示了如何使用该类及其方法。它已经过2个案例的广泛测试,没有已知的bug

  • 要阅读有关此类的信息并下载代码,请参阅

    您可能可以从vba程序调用my类,因此它可能不需要转换为vba。另一方面,如果您确实需要转换它(因为它是一个泛型类,vba可能无法使用com互操作来处理它),那么它就不应该非常直接

    您的问题的解决方案包括为每个N choose K案例生成K索引。因此,在上面的示例中,N(A,B,C,D)有4种可能,代码(在C#中)如下所示:

    int TotalColumns = 4;
    int N = TotalColumns;
    // Loop thru all the possible groups of combinations.
    for (int K = N - 1; K < N; K++)
    {
       // Create the bin coeff object required to get all
       // the combos for this N choose K combination.
       BinCoeff<int> BC = new BinCoeff<int>(N, K, false);
       int NumCombos = BinCoeff<int>.GetBinCoeff(N, K);
       int[] KIndexes = new int[K];
       // Loop thru all the combinations for this N choose K case.
       for (int Combo = 0; Combo < NumCombos; Combo++)
       {
          // Get the k-indexes for this combination, which in this case
          // are the indexes to each column starting with zero.
          BC.GetKIndexes(Loop, KIndexes);
          // Do whatever processing that needs to be done with the indicies in KIndexes.
          ...
       }
       // Handle the final combination which in this case is ABCD since since K < N.
       ...
    }
    
    inttotalcolumns=4;
    int N=总列数;
    //循环遍历所有可能的组合组。
    对于(int K=N-1;K
    欢迎米克尔!我们通常希望看到人们尝试过什么。啊,我理解,我从一开始就诚实。我尝试了一些东西,但没有成功,这就是我上网的原因。。。。我试着举个例子,抓取A,然后找到所有没有A的选项并放置它们。等等我认为这是正确的方法,但我的代码不起作用。看看您仍然尝试了什么会很有帮助。(1)您的意思是您有一个完整的组合列表,并且从该列表中希望每个组合都不包含给定的值吗?(2) 您是否有一个值列表,然后希望每个组合都不包含其中一个值?(3) 2^50是1125899906842620。你想把这些组合放在哪里?我前面的回答有用吗?但在Excel中也可以这样做吗?是的,这是可能的。如果希望将所有内容都保存在VBA中,只需将C#BinCoeff类代码复制到新的VBA类中即可。摆脱类的泛型部分,因为您可能不需要它。如果您以前没有使用过vba类,请尝试从google搜索vba类并阅读一些教程。另一种方法是从vba代码中引用C#类。您需要指定与C#类及其方法的链接。如果你不知道怎么做,可以在网上搜索“从VBA调用C#类”。这看起来很复杂。你知道有没有可用的教程或例子?如果你发现这很复杂,那么也许你应该把任务交给更有经验的开发者,或者如果你是一个拥有者/管理者,考虑雇佣一个开发人员为你做这件事。这段代码实际上非常简单易懂。经验主义者