如何遍历Excel列并查找产品名称中的更改?
我有一个Excel工作表,列A
有一个产品名称的列表。 大多数产品有多种变化,例如:
A1: LDP2-sm A2: LDP2-med A3: LDP2-lg A4: LDP3-sm A5: LDP3-med A6: LDP3-lg A7: LDP3-xlg
在这里, LDP2
是3个变体的1个产品, LDP3
是4个变体的1个产品
我如何循环访问这个列表并find新变体的开始? 在上面的例子中,我想findA1
和A4
。 然后,我想在每个上面插入一行。
这是我到目前为止的代码:
Dim rw As Long Dim lr As Long Dim cnt As Long lr = 500 rw = 2 cnt = 1 Do If Range("A" & cnt).Value = *FIRST VARIATION OF A NEW PRODUCT* Rows(rw).Insert Shift:=xlDown cnt = cnt + 1 Else cnt = cnt + 1 End If rw = rw + 1 Loop While rw <> lr
我需要什么代码来首次改变一个新产品 ?
它需要确定单元格的值是否以与其上面的单元格不同的前缀开始。
我不知道产品名称是从什么开始的,也不知道产品有多less变化,但是我知道产品名称的第一部分将会改变。 即LDP2
, LDP3
, LDP4
等
Split
是你正在寻找的function,如果你永远只有一个-
在名称。 它会给你名字的每一部分,然后你可以比较前一行。
这里是适用于你的例子的代码。
Sub SplitProductName() Dim rng_cell As Range Dim str_prev As String For Each rng_cell In Range(Range("A1"), Range("A1").End(xlDown)) Dim parts As Variant parts = Split(rng_cell, "-") 'check that it is different If parts(0) <> str_prev Then rng_cell.EntireRow.Insert xlUp End If 'assign previous for next row str_prev = parts(0) Next rng_cell End Sub
之前
后
尝试:
Dim rw As Long Dim lr As Long Dim cnt As Long lr = 500 rw = 2 cnt = 1 last_prefix = "" Do this_prefix = left(Range("A" & cnt).Value, 4) If this_prefix <> last_prefix Rows(rw).Insert Shift:=xlDown cnt = cnt + 1 Else cnt = cnt + 1 End If last_prefix = this_prefix rw = rw + 1 Loop While rw <> lr
您可以使用Left
检查单元格的开始值,如下所示:
Sub InsertHeaders() Dim rw As Long Dim lr As Long Dim cnt As Long lr = 500 rw = 2 cnt = 1 Do If Range("A" & cnt).Value <> "" And Left(Range("A" & cnt).Value, 4) <> Left(Range("A" & cnt + 1).Value, 4) Then Rows(rw).Insert Shift:=xlDown cnt = cnt + 1 Else cnt = cnt + 1 End If rw = rw + 1 Loop While rw <> lr End Sub