2017-07-24 74 views
0

输入的数据将在下面的格式 -Excel的VBA基于多指标分析创建行组

+--------------------------------------+--------+---------+----------+ 
|     Desc     | Doc | Invoice | Order | 
+--------------------------------------+--------+---------+----------+ 
| XXXXXXX;SFFFFFFFF;QQWEWEE;878dDDss11 | 98988 | 27891 | XXX32222 | 
| XXXXXXX;SFFFFFFFF;QQWEWEE;878dDDss11 | 45444 | 422445 | #  | 
| XXX32222        | 4333 | 23444 | #  | 
| #         | 4454 | 3345 | XXX32333 | 
| #         | 32333 | 44222 | ddh33333 | 
| XXX32333        | 323222 | 45333 | #  | 
| XXX32333        | 322433 | 34333 | #  | 
| 4454         | 3333 | 232222 | #  | 
| XXXSDDD-ddh33333      | 34433 | 45555 | XX344444 | 
+--------------------------------------+--------+---------+----------+ 

我希望有一个新的列,可以基于2个标准如下告诉团体 -

  1. 如果相同的价值在desc col,那么行组将会像第1组,第2组相同
  2. 如果订单或文档或发票列值存在于Desc列然后行将属于同一组

输出将是 -

+--------------------------------------+--------+---------+----------+----------+ 
|     Desc     | Doc | Invoice | Order | Grouping | 
+--------------------------------------+--------+---------+----------+----------+ 
| XXXXXXX;SFFFFFFFF;QQWEWEE;878dDDss11 | 98988 | 27891 | XXX32222 | Group 1 | 
| XXXXXXX;SFFFFFFFF;QQWEWEE;878dDDss11 | 45444 | 422445 | #  | Group 1 | 
| XXX32222        | 4333 | 23444 | #  | Group 1 | 
| #         | 4454 | 3345 | XXX32333 | Group 2 | 
| #         | 32333 | 44222 | ddh33333 | Group 3 | 
| XXX32333        | 323222 | 45333 | #  | Group 2 | 
| XXX32333        | 322433 | 34333 | #  | Group 2 | 
| 4454         | 3333 | 232222 | #  | Group 2 | 
| XXXSDDD-ddh33333      | 34433 | 45555 | XX344444 | Group 3 | 
+--------------------------------------+--------+---------+----------+----------+ 

到目前为止,我已经试着写下面的代码

i = 0 
For Each cell1 In Range("C5:C" & Cells(Rows.Count, "A").End(xlUp).Row).Cells 
Debug.Print cell1.Row 
jvno = cell1.Offset(0, 5).Value 
invno = cell1.Offset(0, 6).Value 
ordno = cell1.Offset(0, 7).Value 
     For Each cell3 In Range("C5:C" & Cells(Rows.Count, "A").End(xlUp).Row).Cells 
     Debug.Print cell3.Row 
      If ((cell1.Value = cell3.Value) And cell1.Value <> "#") Or InStr(cell3.Value, jvno) > 0 Or InStr(cell3.Value, invno) > 0 Or (InStr(cell3.Value, ordno) > 0 And (Not IsEmpty(ordno)) And ordno <> "#") Then 
       cell1.Offset(0, 18).Value = "Group " & i 
       cell3.Offset(0, 18).Value = "Group " & i 
      End If 
     Next cell3 
     i = i + 1 
Next cell1 
+0

你到目前为止尝试过什么? – Zac

+0

编辑与我迄今尝试过的问题 – baimzz

回答

0

如果我们假设说明是在C和文件,发票,订单是H,I ,J,并且组可在U, 我改变了这样的代码:

i = 1 
Set cell1 = Range("C5") 
repeat: 
cell1.Offset(0, 18).Value = "Group " & i 
    jvno = cell1.Offset(0, 5).Value 
    invno = cell1.Offset(0, 6).Value 
    ordno = cell1.Offset(0, 7).Value 

    For Each cell3 In Range("C6:C" & Cells(Rows.Count, "A").End(xlUp).Row).Cells 
     If ((cell1.Value = cell3.Value) And cell1.Value <> "#") Or InStr(cell3.Value, jvno) > 0 Or InStr(cell3.Value, invno) > 0 Or (InStr(cell3.Value, ordno) > 0 And (Not IsEmpty(ordno)) And ordno <> "#") Then 
      If cell3.Offset(0, 18).Value = "" Then 
       cell3.Offset(0, 18).Value = "Group " & i 
      End If 
     End If 
    Next cell3 
i = i + 1 
Set cell4 = cell1.Offset(0, 18) 
While cell4.Value <> "" 
    Set cell4 = cell4.Offset(1, 0) 
Wend 
If cell4.Row <= Cells(Rows.Count, "A").End(xlUp).Row Then 
    Set cell1 = Range("C" & cell4.Row) 
    GoTo repeat 
End If 

所以,我有像你一样的组名,在列U.

希望这个帮助