使用VBA将基于单元格值的行添加到另一个工作表上

时间:2016-09-21 08:39:41

标签: excel vba excel-vba

我正在尝试创建一个电子表格,我在工作表的单元格中有一个名为" Equipment"单元格C5,例如值为4.

Starting Cell Image

我需要使用此值复制同一行的一部分(D5:M5)并将其多次粘贴到名为"编程"的工作表中。如果这个改变我希望它删除或添加在需要的地方,忽略在"设备"中的空白或0值的位置。片

Desired Result

我有大约30个不同的项目,所有项目都有不同的部分要复制,但它们的大小相同。这也可以在同一列中查看所有值的列表,并对所有值

执行相同操作

我对VBA很新,并设法隐藏和显示基于价值观的标签,但我很难理解这一点,因为它在这一点上有点过于复杂。 / p>

提前谢谢

这是我到目前为止所做的,我已将代码编辑为我认为正确的但仍然无法正常工作

Sub copySheetCells()

'loop by each cell in column "C"
For i = 2 To Sheets("Equipment").Cells(Rows.Count, "C").End(xlUp).Row
    'repeat copy x times (based on cell in column "C" value)
    For j = 0 To (Sheets("Equipment").Cells(i, "C").Value - 1)
        'define source range
        Source = "D" & (i) & ":M" & (i)
        'find last row on second sheet
        lastRowS2 = Sheets("Hardware_Programming").Cells(Rows.Count, "A").End(xlUp).Row
        'copy data
    Sheets("Equipment").Range(Source).copy Destination:=Sheets("Hardware_Programming").Range("A" & lastRowS2 + 1)
Next j
Next i
'copy headers
Sheets("Equipment").Range("D1:M1").copy Destination:=Sheets    ("Hardware_Programming").Range("A1:J1")
End Sub

我只能得到空白,是否有人能够进一步提出建议?

2 个答案:

答案 0 :(得分:1)

在这里,使用此宏。基于最初请求的名称ProgrammingEquipment

Sub copySheetCells()
'loop by each cell in column "C"
For i = 2 To Sheets("Programming").Cells(Rows.Count, "C").End(xlUp).Row
    'repeat copy x times (based on cell in column "C" value)
    For j = 0 To (Sheets("Programming").Cells(i, "C").Value - 1)
        'define source range
        Source = "D" & (i) & ":M" & (i)
        'find last row on second sheet
        lastRowS2 = Sheets("Equipment").Cells(Rows.Count, "A").End(xlUp).Row
        'copy data
        Sheets("Programming").Range(Source).copy Destination:=Sheets("Equipment").Range("A" & lastRowS2 + 1)
    Next j
Next i
'copy headers
Sheets("Programming").Range("D1:M1").copy Destination:=Sheets("Equipment").Range("A1:J1")
End Sub

修改

请避免复制答案中的代码并将其发回给您的问题,我将Sheet1替换为Programming,以便您可以在工作簿中重命名该工作表。

Macro似乎做了它的工作,没有提供Sheet1 / Programming中的数量(列" C"根据您的初始要求):

来源(增加数量) Source

结果: enter image description here

答案 1 :(得分:0)

希望这能解决你的问题:)

    For i = 1 To 30 Step 1
            If Sheets("Equipment").Cells(1 + 4, 3).Value > 0 Then
            Sheet1.Range(Cells(i + 3, 5), Cells(i + 3, 13)).Copy
                For j = 1 To Sheet1.Cells(1 + 4, 3).Value Step 1
                LR = Sheets("Programming").Cells(Sheets("Programming").Rows.Count, "A").End(xlUp).Row
                    Sheets("Programming").Range("A" & LR + 1).PasteSpecial Paste:=xlPasteValues

                Next
            End If
Next

干杯;)