VBA组合生成器循环内无法正确设置区域匹配条件问题求助
VBA组合生成代码修改方案
修改后的完整代码如下,已新增Region匹配规则,同时保留空单元格跳过逻辑:
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 Dim xReg1 As String, xReg2 As String, xReg3 As String ' 新增Region存储变量 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 Item1 cells xSV1 = xFN1.Text xReg1 = xFN1.Offset(0, -1).Text ' 读取A列对应Region1值 For Each xFN2 In xDRg2.Cells If xFN2 <> "" Then 'Ignore empty Item2 cells xSV2 = xFN2.Text xReg2 = xFN2.Offset(0, -1).Text ' 读取C列对应Region2值 If xReg2 <> "" And xReg2 = xReg1 Then ' 先判断和Region1匹配 For Each xFN3 In xDRg3.Cells If xFN3 <> "" Then 'Ignore empty Item3 cells xSV3 = xFN3.Text xReg3 = xFN3.Offset(0, -1).Text ' 读取E列对应Region3值 ' 仅当三个Region完全匹配时生成组合 If xReg3 <> "" And xReg3 = xReg2 Then xRg.Value = xSV1 & xStr & xSV2 & xStr & xSV3 Set xRg = xRg.Offset(1, 0) End If End If Next End If End If Next End If Next End Sub
核心修改说明
- 新增3个变量存储每行对应的Region字段值,取值逻辑为对应Item列向左偏移1列,即B列对应A列Region1、D列对应C列Region2、F列对应E列Region3
- 新增分层匹配判断:先判断Region2和Region1相等,再判断Region3和Region2相等,减少无效循环计算
- 新增Region字段非空判断,避免空值参与匹配产生错误结果
- 完全兼容原有逻辑,仅输出符合Region匹配规则的组合,和给出的示例运行结果一致
内容的提问来源于stack exchange,提问作者Bart Janssen
相关产品推荐
相关产品推荐

