【问题标题】:Excel permutations without repetition from values in multiple columnsExcel排列而不重复多列中的值
【发布时间】:2014-05-06 12:18:10
【问题描述】:

我在 Excel 文档中的内容:

A     B    
Abc   12:34
Def   56:78
Ghi   90:12
Jkl   34:56
...

我想用这些价值观实现什么:

C    D      E    F
Abc  12:34  Def  56:78
Abc  12:34  Ghi  90:12
Abc  12:34  Jkl  34:56
Def  56:78  Ghi  90:12
Def  56:78  Jkl  34:56
Ghi  90:12  Jkl  34:56
...

解释:

A 列和 B 列可以包含文本和数字的任意组合(如果这很重要的话),此示例仅显示最常见的结构。它应该只为“向下”的行创建组合,即。 e. “Abc...Def...”就够了,不应该有“Def...Abc...”。

周围有很多例子,但我很难找到这样的 VBA 版本,它适用于多列并且不重复组合。

这是一个简单的例子。但是,它仅适用于一列,并且还重复值:

http://www.mrexcel.com/forum/excel-questions/412952-create-list-all-pair-combinations.html#post2046893

提前谢谢你。

【问题讨论】:

  • 以你的例子为例,这可以通过一个简单的双循环来完成......不是吗?
  • 我真的不知道,我不是 Excel 专家,但其他关于排列的问题的大部分答案都涉及宏。此外,我的一些工作表将有 30-40 行,因此任何涉及选择 X 行之后需要填充的东西都是不切实际的。如果这就是双 for 循环在 Excel 中的工作方式。 :)
  • 否 - 答案将涉及编程/VBA - 但我要说的是,如果你查看答案,你会向下每一行并将其与之后的所有行结合起来,然后移至下一个并再次执行该过程...这有意义吗??
  • 这是正确的 - 每行仅与其后的行合并,然后您重复该过程直到它到达最后一行。
  • 好的,我现在给你一个快速的解决方案......

标签: excel excel-2007 combinations permutation vba


【解决方案1】:

鉴于我们在对话中讨论的内容,这里有一个 VBA 解决方案:

Sub CreatePermutation()

Dim FirstCell As Integer
Dim SecondCell As Integer
Dim NumRows As Integer
Dim OutputRow As Long

    ' Get the total number of rows in column A
    NumRows = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row()

    ' You want to start outputting in row 1
    OutputRow = 1

    For FirstCell = 1 To NumRows - 1
        For SecondCell = FirstCell + 1 To NumRows

            ' Put in the data from the first cell into columnc C & D
            Cells(OutputRow, 3).Value = Cells(FirstCell, 1).Value
            Cells(OutputRow, 4).Value = Cells(FirstCell, 2).Value

            ' Put in the data from the second cell into column E & F
            Cells(OutputRow, 5).Value = Cells(SecondCell, 1).Value
            Cells(OutputRow, 6).Value = Cells(SecondCell, 2).Value

            ' Move to the next row to output
            OutputRow = OutputRow + 1

        Next SecondCell
    Next FirstCell
End Sub

希望这能完成你想做的事情。

【讨论】:

  • 哇,你让它看起来很简单。 :) 这正是我需要的,谢谢!!
  • :) - 一切都很简单,只要您以前做过! - 很高兴我能帮助你!! :)
  • 将其扩展到 5 列或 6 列的修改是什么?我发现了一个不同的排列代码,但所有重复值都达到了 excel 中的最大行数。这甚至可能仍然是一个问题,因为我的数据集是 Col A、B、D、E、F 是 1-22(没有 #5),而 Col C 是 1-22。
猜你喜欢
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多