求助:完善VBA代码以基于重复Order_Num和Cust_Num生成单元格范围
Excel VBA 实现 Cust_Num 范围生成逻辑
以下是修改后的完整代码,已加入 Cust_range 的生成逻辑,完全符合你给出的规则:
Private Sub CommandButton1_Click() Dim ws1 As Worksheet, lastrow As Long, FirstInvoice As String, Count As Long, A As Long, Count1 As Long Dim intComp As Integer, B As Long, currentCust As String, custStartRow As Long Set ws1 = Sheets("Sheet1") lastrow = ws1.Range("A:C").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row FirstInvoice = ws1.Cells(2, "A").Value If FirstInvoice <> "" Then Count = 1 Count1 = 2 End If For A = 2 To lastrow + 1 intComp = StrComp(FirstInvoice, ws1.Cells(A, "A").Value) If intComp = 0 Then Count = Count + 1 Else ' 生成 Order_range ws1.Cells(A - 1, "D").Value = "A" & Count1 & " to " & "A" & Count ' --- 生成 Cust_range 逻辑开始 --- currentCust = ws1.Cells(Count1, "C").Value custStartRow = Count1 ' 遍历当前 Order_Num 分组内的所有行 For B = Count1 + 1 To Count ' 检查 Cust_Num 是否变化 If StrComp(ws1.Cells(B, "C").Value, currentCust) <> 0 Then ' 写入上一个 Cust_Num 的范围 ws1.Cells(B - 1, "E").Value = "C" & custStartRow & " to " & "C" & (B - 1) ' 更新当前 Cust_Num 和起始行 currentCust = ws1.Cells(B, "C").Value custStartRow = B End If Next B ' 写入分组内最后一个 Cust_Num 的范围 ws1.Cells(Count, "E").Value = "C" & custStartRow & " to " & "C" & Count ' --- 生成 Cust_range 逻辑结束 --- Count = 1 Count1 = A FirstInvoice = ws1.Cells(A, "A").Value End If Next A End Sub
逻辑说明
- Order_range 保持原有逻辑:在每个 Order_Num 分组的最后一行写入该分组的A列范围
- Cust_range 生成逻辑:
- 针对每个 Order_Num 分组,从第一行开始跟踪当前 Cust_Num 的起始行
- 遍历分组内的后续行,当 Cust_Num 发生变化时,在变化前的最后一行写入该 Cust_Num 的C列范围
- 遍历完分组所有行后,处理最后一个 Cust_Num 的范围并写入对应行的E列
内容的提问来源于stack exchange,提问作者Ranger
相关产品推荐
相关产品推荐

