多个单元格选择并复制到另一个工作表上的单个行

时间:2015-07-14 16:57:25

标签: excel vba excel-vba

过去几天我一直在寻找这个,似乎找不到任何可以帮助我完成我想要做的事情。

我有一张包含用户输入的多个单元格中的数据的工作表 - 我希望当用户点击提交按钮时,VBA宏会从多个单元格中复制数据并将其粘贴到单个工作表中行(最后一行)所以我可以稍后提取该数据并在需要时对其进行更改。工作表在顶部有一个唯一的ID,当搜索到它时,我可以将数据拉回工作表并对其进行编辑并再次保存。

当我录制宏并尝试多次选择时,它不允许我复制,但这是为选择提供的代码

Sub Copy()
'
' Copy Macro
'

    Union(Range( _
        "J22:K22,M22,I24:J24,K24:L24,M24,I26:J26,K26:L26,M26,B29:D29,E29:G29,B30:D30,B31:D31,B33:D33,E33:G33,I29,J29:K29,M29,I31:J31,K31:L31,M31,I33:J33,K33:L33,M33,B36:D36,B37:D37,B38:D38,E36:G36,B40:D40,E40:G40,I36,J36:K36,M36" _
        ), Range( _
        "I38:J38,K38:L38,M38,I40:J40,K40:L40,M40,B2:F3,B2:F3,B6:E6,F7:G7,B7:E7,B8:E8,B9:E9,B11:C11,D11:E11,B13:C13,D13:E13,I3:L3,L2,M1,I6:L6,I7:L7,I8:L8,I9:L9,M7,I11:J11,K11:L11,I13:J13,K13:L13,B15:M16,B18:M19,B22:D22" _
        ), Range("B23:D23,B24:D24,E22:G22,B26:D26,E26:G26,I22")).Select

End Sub

这是我需要复制并粘贴到同一工作簿中的“条目”工作表的所有单元格。我确定之前有人问过这个问题,但我不确定我是不是用正确的关键词来搜索,但我找不到任何东西。分配复制多行和列并粘贴多个单元格的东西。

1 个答案:

答案 0 :(得分:2)

我认为这是你正在尝试做的事情

Sub test()
Dim rng As Range
Set rng = Union(Range( _
        "J22:K22,M22,I24:J24,K24:L24,M24,I26:J26,K26:L26,M26,B29:D29,E29:G29,B30:D30,B31:D31,B33:D33,E33:G33,I29,J29:K29,M29,I31:J31,K31:L31,M31,I33:J33,K33:L33,M33,B36:D36,B37:D37,B38:D38,E36:G36,B40:D40,E40:G40,I36,J36:K36,M36" _
        ), Range( _
        "I38:J38,K38:L38,M38,I40:J40,K40:L40,M40,B2:F3,B2:F3,B6:E6,F7:G7,B7:E7,B8:E8,B9:E9,B11:C11,D11:E11,B13:C13,D13:E13,I3:L3,L2,M1,I6:L6,I7:L7,I8:L8,I9:L9,M7,I11:J11,K11:L11,I13:J13,K13:L13,B15:M16,B18:M19,B22:D22" _
        ), Range("B23:D23,B24:D24,E22:G22,B26:D26,E26:G26,I22"))

Dim WSEntries As Worksheet
Set WSEntries = Sheets("Entries")

Dim lastrow As Integer
lastrow = WSEntries.Cells(Rows.Count, "A").End(xlUp).Row

Dim i As Integer
i = 1
For Each c In rng
    WSEntries.Cells(lastrow + 1, i) = c
    i = i + 1
Next


End Sub

它会从上到下从左到右迭代你的范围。

您确定要使用union kb吗? 您可以将范围设置为所有单元格由于函数的字符限制,我认为它使用了union。您的意思是使用intersect kb吗?

要明确你在这里使用三个范围 -

Range("J22:K22,M22,I24:J24,K24:L24,M24,I26:J26,K26:L26,M26,B29:D29,E29:G29,B30:D30,B31:D31,B33:D33,E33:G33,I29,J29:K29,M29,I31:J31,K31:L31,M31,I33:J33,K33:L33,M33,B36:D36,B37:D37,B38:D38,E36:G36,B40:D40,E40:G40,I36,J36:K36,M36")

Range("I38:J38,K38:L38,M38,I40:J40,K40:L40,M40,B2:F3,B2:F3,B6:E6,F7:G7,B7:E7,B8:E8,B9:E9,B11:C11,D11:E11,B13:C13,D13:E13,I3:L3,L2,M1,I6:L6,I7:L7,I8:L8,I9:L9,M7,I11:J11,K11:L11,I13:J13,K13:L13,B15:M16,B18:M19,B22:D22")

Range("B23:D23,B24:D24,E22:G22,B26:D26,E26:G26,I22")

没有单元格与所有三个范围相交。

B2:F3在第二个范围内列出两次。否则我看不到任何重叠。