【发布时间】:2017-03-08 14:10:51
【问题描述】:
我有点在使用 VBA for excel 苦苦挣扎。我有一张产品表,其中产品可以有多个类别。链接到产品的类别可以具有子类别,这些子类别位于其旁边的列中。如果产品有多个类别,则这些类别位于产品下方的一行。见图1。
我想要达到的目标: 每次执行脚本时,产品信息行上的当前类别都需要替换为其下面的类别,直到您到达下一个产品。如果没有要替换的新类别,可以删除产品行。 (在这个例子中,我需要运行脚本 3 次)。所以我最终会得到这个:
到目前为止我得到的代码是:
Sub MoveEmpty()
Dim i as Long, j as Long
Application.ScreenUpdating = False
j = Range("A" & Rows.Count).End(xlUp).Row
For i = j to 3 Step -1
If Range("A" & i) <> "" Then
Range("C" & i -1) = Range("C" & i).Resize(,3)
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub
希望这是有道理的,感谢您的帮助,
巴特
【问题讨论】:
-
子类没关系?
-
确实如此。所以在第一个例子中C3:C5行需要替换B3:B5,E3:E5需要替换D3:D5等。当产品下面没有包含类别的行时,可以删除产品行。
-
那么如果子类别不同,它们不应该相互覆盖吗?我的理解是你想根据产品,类别和子类别制作一个独特的列表,对吗?任何列中的空单元格表示同一列中它们上方的第一个值?
-
整行需要被替换,所以是的,它们可以被覆盖。这样做的用途是我需要将产品导入我的网上商店,但每次导入只能导入一个类别(带子类)(因此每次导入可以使用每个产品的一行类别)。
-
添加了一些图片来澄清。提前致谢!