【发布时间】:2021-11-28 00:36:39
【问题描述】:
前几天有人已经在调整此代码方面提供了很大帮助,但我现在必须添加一个条件,即不创建组合,但必须确保 B、D 和 F 列仅在 Column 中的值混合时A、C 和 E 相互匹配。让我告诉你我的意思:
| Region 1 | Item 1 | Region 2 | Item 2 | Region 3 | Item 3 |
|---|---|---|---|---|---|
| EMEA | ABC | EMEA | 123 | US | one |
| US | DEF | US | 456 | EMEA | two |
因此,最终结果应如下所示:
- ABC-123-二
- DEF-456-一
我尝试在当前代码中设置一些内容,但失败了并将其从代码中删除。理想情况下需要发生的是它首先忽略范围内的任何空值,然后检查该区域是否等于第二项或第三项中的区域。
这是 VBA,任何建议都将不胜感激。提前致谢:
Sub CombinationGenerator()
Dim xDRg1 As Range, xDRg2 As Range, xDRg3 As Range
Dim xRg As Range
Dim xStr As String
Dim xFN1 As Range, xFN2 As Range, xFN3 As Range
Dim xSV1 As String, xSV2 As String, xSV3 As String
Set xDRg1 = Range("B2:B75") 'First column combintation data
Set xDRg2 = Range("D2:D75") 'Second column combintation data
Set xDRg3 = Range("F2:F75") 'Third column combintation data
xStr = "-" 'Separator
Set xRg = Range("I2") 'Output cell
'Creating combinations
For Each xFN1 In xDRg1.Cells
If xFN1 <> "" Then 'Ignore empty cells
xSV1 = xFN1.Text
For Each xFN2 In xDRg2.Cells
If xFN2 <> "" Then 'Ignore empty cells
xSV2 = xFN2.Text
For Each xFN3 In xDRg3.Cells
If xFN3 <> "" Then 'Ignore empty cells
xSV3 = xFN3.Text
xRg.Value = xSV1 & xStr & xSV2 & xStr & xSV3
Set xRg = xRg.Offset(1, 0)
End If
Next
End If
Next
End If
Next
End Sub
【问题讨论】:
-
是否有 74 行数据,因此可能需要检查 405,224 个组合?
-
我填写了 75 行作为限制,但实际上当我过去手动执行此操作时,我最多只能获得 200 个组合。我想我可以将限制移动到 50 甚至更少。本练习的目标是一次性获取可用于其专用区域的捆绑项目列表。