使用VBA为项目分配升序编号,但为重复项分配相同的编号

问题描述 投票:0回答:1

在我的工作表中,我必须为需要组装的产品分配编号。 这些数字稍后将与蓝图/CAD 图纸相对应。

当有重复时,需要有相同的“cad 编号”。 另外,有些产品是订购的,因此不需要组装。

这是一个较小的列表示例:

数量 项目 长度 宽度 高度
1号房间
z 桌子 100 100 100
z 椅子 100 100 200
z 椅子 100 100 100
100 100 100
2号房间
z 桌子 100 100 100
z 桌子 100 200 100
z 椅子 100 100 100

宏之后应该是:

数量 项目 长度 宽度 高度
1号房间
1 桌子 100 100 100
2 椅子 100 100 200
3 椅子 100 100 100
100 100 100
2号房间
1 桌子 100 100 100
4 桌子 100 200 100
3 椅子 100 100 100

我使用“z”手动选择哪些产品需要组装。

我已经尝试过多列公式。 第一个连接最后 4 列。 第二列是一个带有 countif 的公式,用于发现重复项。 第三列有一个公式,用于获取前一个数字并加 1,或者如果第 2 列为 true,则“欺骗”,这样我就可以手动获取正确的数字。

基本上它省去了 4 个步骤中的 2 个。

因为我需要连接、计数并以某种方式拥有一组已使用的数字和“连接”组合,所以从头开始有点太困难了。

我真的很想学习,所以这就是为什么我尝试使用 VBA 而不是多列公式来实现这一点。还因为文件被发送给客户。

excel vba
1个回答
0
投票

此代码根据示例表中数据的具体排列生成所需的编号

Sub sequ()
Dim ws As Worksheet
Set ws = Worksheets("Sheet5")
lastrow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
ReDim context(2 To lastrow)
For i = 2 To lastrow
  If ws.Cells(i, "B") <> "" Then
   context(i) = ws.Cells(i, "B") & ws.Cells(i, "C") & ws.Cells(i, "D") & ws.Cells(i, "E")
  End If
Next i
counter = 1
For i = 2 To lastrow
  For j = 2 To i
    If context(i) = context(j) And Cells(i, "A") = "z" And context(i) <> "" And i = j Then
      Cells(i, "A") = counter
      counter = counter + 1
    ElseIf context(i) = context(j) And context(i) <> "" Then
      Cells(i, "A") = Cells(j, "A")
    End If
  Next j
Next i
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.