我有一个需要转换为父子列表的Excel文章列表。每篇文章具有相同的MPN和/或相同的名称,仅例如大小或颜色不同。 该列表如下所示:
MPN name size
1 foo S
1 foo M
1 foo L
2 bar S
2 bar M
2 bar XL
我自己插入了cols ID和pID,以便能够实现以下列表:
ID pID MPN name size
1 1 foo
2 1 1 foo S
3 1 1 foo M
4 1 1 foo L
5 2 bar
6 5 2 bar S
7 5 2 bar M
8 5 2 bar L
9 5 2 bar XL
因此,对于具有相同MPN(或名称)的所有行,复制块上方的第一行,并将新行的ID放入包含相同MPN的以下行的pID列中。
ID实际上是一个字符串,因此它们不必是顺序的。如果它更容易实现,比如......
ID pID MPN name size
1 1 foo
1S 1 1 foo S
1M 1 1 foo M
1L 1 1 foo L
...也适用于我,基本上是CONCATENATE()pID和大小。
这样的事情可以用VBA完成吗?
答案 0 :(得分:0)
Sub ConditionallyDuplicateRows()
Dim lRw As Long
Application.ScreenUpdating = False
Range("B1").EntireColumn.Insert
Range("A1").EntireColumn.Insert
Range("A1").Value = "ID"
Range("B1").Value = "pID"
Range("C1").Value = "MPN"
lRw = Range("B" & Rows.Count).End(xlUp).Row - 1
For i = lRw To 1 Step -1
If Range("B" & i).Value <> Range("B" & i + 1).Value Then
Range("B" & i).Offset(1).EntireRow.Insert
'New MPN
Range("B" & i).Offset(1, 1).Value = Range("B" & i + 2).Value
'New Name
Range("B" & i).Offset(1, 2).Value = Range("B" & i + 2).Offset(, 2).Value
Range("B" & i).Offset(2, 1).Value = Range("B" & i).Offset(2).Value
Else
Range("B" & i).Offset(1, 1).Value = Range("B" & i + 1).Value
End If
Next i
lRw = Range("C" & Rows.Count).End(xlUp).Row
With Range("A2:A" & lRw)
.Formula = "=C2&E2"
.Value = .Value
End With
Application.ScreenUpdating = True
End Sub