如何遍历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新变体的开始? 在上面的例子中,我想findA1A4 。 然后,我想在每个上面插入一行。

这是我到目前为止的代码:

 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变化,但是我知道产品名称的第一部分将会改变。 即LDP2LDP3LDP4

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