根据单元格值复制或复制数据行

我试图使Excel自动化,这将节省我无数的繁琐的数据input小时。 这是我的问题。

我们有摩托车部件,可以适应不同年份的模型车辆。 我正在使用的文件有一个单元格中的年份列表。 这些年可能连续也可能不连续。 他们被一个“,”分开。 我需要一种方法来看看有多less年列出和复制数据的次数。

我也需要它给每一行只给一年。 在下面的例子中,最后一栏是FITMENT YEARS; 正如你所看到的,它有三个不同的年份,每个都以逗号分开。 在这种情况下,只有3年可能是10年不同的年份,也可能只是一年。

这是我有一个单行:

P/N Make Mfg Model Year Span Fitment Years 881612 Aprilia 881965 1000 RSV4 - (SACHS) 10-12 2010, 2011, 2012 

这是我需要如何列出的:

 P/N Make Mfg Model YearSpan Fitment Years 881612 Aprilia 881965 1000 RSV4 - (SACHS) 10-12 2010 881612 Aprilia 881965 1000 RSV4 - (SACHS) 10-12 2011 881612 Aprilia 881965 1000 RSV4 - (SACHS) 10-12 2012 

我真的需要别人的帮助 我迷失在如何进行。 谢谢

尝试这个。

将以下例程放入标准代码模块并运行。

重要提示:这样可以在原地更换您的数据,因此在运行之前请确保您有一份副本。

 Sub Jnowell() Dim c&, n&, v, y With [a2] c = 1 Do If Len(.Item(c)) Then y = Split(.Item(c, 4), ", ") If UBound(y) Then .Item(c)(2).Resize(UBound(y), 4).Insert xlDown v = .Item(c).Resize(, 4) .Item(c, 4) = y(0) For n = 1 To UBound(y) .Item(c)(n + 1).Resize(, 4) = v .Item(c, 4)(n + 1) = Left$(y(0), Len(y(0)) - 4) & y(n) Next End If Else Exit Do End If c = c + 1 Loop End With End Sub 

注意:此例程假定您的数据位于当前活动工作表的A,B,C和D列中。

如果您的数据存在列A:D,您的原始列表在Sheet1上,并且您希望在Sheet2上创build新的列表,那么以下vba将执行您需要的双循环。 更改“Sheet1”和“Sheet2”以适应您的实际需要。 请记住格式化第2页上的列C作为文本或Excel会自动将该数据变成date…

 Sub CreateYearList() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Sheets("Sheet2").Range("A1:D1").Value = Sheets("Sheet1").Range("A1:D1").Value Dim CmCt As Integer Dim NRwCt As Integer Dim ORwCt As Integer Dim LArray() As String Dim Yr As String ORwCt = WorksheetFunction.CountA(Sheets("Sheet1").Range("A:A")) For i = 2 To ORwCt LArray = Split(Sheets("Sheet1").Range("D" & i).Value, ",") CmCt = Len(Sheets("Sheet1").Range("D" & i).Value) - Len(Replace(Sheets("Sheet1").Range("D" & i).Value, ",", "")) NRwCt = WorksheetFunction.CountA(Sheets("Sheet2").Range("A:A")) For n = 1 To CmCt + 1 Yr = LArray(n - 1) Sheets("Sheet2").Range("A" & NRwCt + n & ":C" & NRwCt + n).Value = Sheets("Sheet1").Range("A" & i & ":C" & i).Value Sheets("Sheet2").Range("D" & NRwCt + n).Value = Yr Next n Next i Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub 

对于其他字段,只需更改n循环中的行就可以包含范围内的其他字段。 如果它们围绕着Fitment Years列,那么您可以在该循环中添加第二行的额外副本,并将其更改为包括该列之外的任何范围。

例如,假设您的“装修年数”列实际上是F列中的列,而其他字段则显示在Z列中。在这种情况下,您需要更改循环中的第二条线,以便在装修年份(E ),然后添加第二条线,查看Fitment Years(G)后面的列,然后直到Z.您可以使用这些代替行:

  Sheets("Sheet2").Range("A" & NRwCt + n & ":E" & NRwCt + n).Value = Sheets("Sheet1").Range("A" & i & ":E" & i).Value Sheets("Sheet2").Range("F" & NRwCt + n).Value = Yr Sheets("Sheet2").Range("G" & NRwCt + n & ":Z" & NRwCt + n).Value = Sheets("Sheet1").Range("G" & i & ":Z" & i).Value