1

我有 9 个单元格(我认为分为 3 组),每组包含字母 A、B 和 C。3 组之间的顺序是平衡的,因此没有字母在同一位置两次,例如:

ABCCABBAC

我有 3 个包含字母 d、e 和 f 的其他单元格。我想使用以下规则将 d、e 和 f 分配给 A、B 和 C:

  1. d、e 和 f 在每个组中分别代表一次。
  2. d、e 和 f 分别与 A、B 和 C 组合一次

例如 :

Ad Be Cf Ce Af Bd Bf Ae Cd

基本上我想编写一个 VBA 宏,它给我随机分配 def 到 ABC 遵循这些规则。我希望宏通过将包含 def 的单元格放在包含 AB C 的单元格下来向我展示这一点。

抱歉,我什至还没有尝试编写代码来执行此操作,如果这有点令人困惑/格式不正确,我也很抱歉。我是 VBA 和 stackexchange 的新手,在解释这个问题时遇到了一些麻烦。

干杯

4

1 回答 1

0

如果一行的开头有四个空格,则该行以固定大小的字体输出。这用于代码,但也允许您创建您所寻找的图像。我最好的猜测是你有这样的东西:

   |  A  |  B  |  C  |  D  |  E  |  F  |  G  |  H  |  I  |  J  |
 --+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
 1 |  A  |  B  |  C  |     |     |     |  d  |  e  |  f  |     |
 2 |     |     |     |     |     |     |     |     |     |     |
 3 |     |     |     |     |     |     |     |     |     |     |

从这个起始位置,下面的代码创建:

   |  A  |  B  |  C  |  D  |  E  |  F  |  G  |  H  |  I  |  J  |
 --+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
 1 |  A  |  B  |  C  |     |     |     |  d  |  e  |  f  |     |
 2 |     |     |     |     |     |     |     |     |     |     |
 3 |  Ad |  Ae |  Af |  Bd |  Be |  Bf |  Cd |  Ce |  Cf |     |

我的输出值与您的输出值不同,但不在您的规则列表中。

你说你有第一组值的三个版本,每个可能的序列中都有一个。你没有解释第二个和第三个版本的目的,所以我没有包括它们。

如果这不是您想要的,您必须对您的要求提供更完整的解释。

Option Explicit
Sub Permutate()

  Dim ColDestCrnt As Long

  Dim ColSrc1First As Long
  Dim ColSrc1Crnt As Long
  Dim ColSrc1Last As Long

  Dim ColSrc2First As Long
  Dim ColSrc2Crnt As Long
  Dim ColSrc2Last As Long

  Dim RowSrc1 As Long
  Dim RowSrc2 As Long
  Dim RowDest As Long

  ' Specify the position of the first set of source values
  RowSrc1 = 1
  ColSrc1First = 1      ' Column A
  ColSrc1Last = 3       ' Column C

  ' Specify the position of the second set of source values
  RowSrc2 = 1
  ColSrc2First = 6      ' Column F
  ColSrc2Last = 8       ' Column H

  ' Specify the start the destination
  RowDest = 3
  ColDestCrnt = 1

  With Worksheets("Sheet1")

    ' Loop through first set of values and within that loop through
    ' the second set.
    For ColSrc1Crnt = ColSrc1First To ColSrc1Last
      For ColSrc2Crnt = ColSrc2First To ColSrc2Last
        ' Combine one value from the first set with one value in the second set.
        .Cells(RowDest, ColDestCrnt).Value = _
             .Cells(RowSrc1, ColSrc1Crnt).Value & _
             .Cells(RowSrc2, ColSrc2Crnt).Value
        ColDestCrnt = ColDestCrnt + 1
      Next
    Next
  End With

End Sub       
于 2012-11-01T09:26:11.943 回答