【问题标题】:How to create every pairwise combination in Excel vba如何在 Excel vba 中创建每个成对组合
【发布时间】:2016-04-01 18:26:51
【问题描述】:

我在第 1 列和第 2 列(01 到 99)中有一个详尽的 2 位邮政编码列表。我想创建第三列,其中将包含两位邮政编码的每个成对组合。所以我的数据看起来像这样,其中第 3 列包含第 1 列和第 2 列(9801 行)的每个成对组合。

col1 col2  col3
01    01   01 to 01
02    02   02 to 02
03    03   03 to 03
04    04   04 to 04
05    05   05 to 05
06    06   06 to 06
.     .       .
.     .       .
99    99  99 to 99

有没有办法把它编码成一个简单的 vba 脚本?

【问题讨论】:

  • 您可以使用快速公式:=A2 & " to " & B2
  • col3 与 col1 和 col2 的长度不同。示例 sn-p 不能很好地说明它,但我需要每个成对组合。所以 col3 将包含 9801 行。 (01 到 01、01 到 02、...、01 到 99、02 到 01、...、02 到 99 等)
  • 那么你有什么尝试?您将需要两个循环,我建议您将所有内容加载到数组中,并将另一个数组作为输出,然后将该输出数组分配给列。

标签: vba excel


【解决方案1】:

与你的任务相关,你可以使用下面的Excel VBA代码sn-p:

Sub ColumnConcatenation()
    Dim i As Long, j As Long
    Const max = 99
    Application.ScreenUpdating = False
    For i = 1 To max
        For j = 1 To max
            Range("C" & (i - 1) * max + j) = Range("A" & i) & " to " & Range("B" & j)
        Next j
    Next i
    Application.ScreenUpdating = True
End Sub

希望这会有所帮助。

【讨论】:

  • 如果您将 9 更改为 99,这将非常有效。谢谢。
  • 没错:您可以扩展解决方案以使用任何整数。顺便说一句,仅供参考:这个特殊问题转化为两组笛卡尔积的计算。最好的问候,
  • 谢谢,感谢您的帮助!
  • 不客气。祝你的项目好运。最好的问候,
【解决方案2】:

我几乎没有 VBA 经验,但这比我最初想象的要容易理解。

Sub pairwise()

Dim x As Integer
Dim x2 As Integer
Dim x3 As Double

x3 = 1

For x = 1 To 99
    For x2 = 1 To 99

    Cells(x3, 5) = Cells(x, 1)
    Cells(x3, 6) = Cells(x2, 2)

    x3 = x3 + 1

    Next
Next
End Sub

这将创建 2 列,然后我可以通过将公式 =E1&" to "&F1 粘贴到 G1:G9801 中来连接它们。如果有更优雅的方式来做这件事,我很乐意接受它作为答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    相关资源
    最近更新 更多