Microsoft Excel 2010复制/粘贴编辑意见和帮助请求上的一些细节

是的,我已经写了这个macros的Microsoft Excel(2010年,如果有帮助),在别人的帮助下。 我想知道是否有人缩短它,并使其更有效率。 但是仍然得到同样的结果呢? 我必须使用CSV格式的例子可以在这里find…是的,不幸的是,他们必须被放入这些列和单元格..

唯一的问题,我真的难住是这样的:在.Cell(2, 3)例如…如果你注意到,在每一节它会复制和粘贴,它有一个新的行..我希望它做到这一点..我是这个新手,并找不到一种方法,使它只是粘贴到下一个可用的行..所以我的解决scheme是做2,3,4,5 …等等..如果有人知道如何改变这个以及做这个.. Loop? 说,这将是很大的帮助。 只是循环正在复制的数据量,而不是重复。

这里是一个例子CSV: 媒体火它是干净的,我保证。 感谢您的时间。

macros代码将某个列/行数据单​​元格从一个表格复制到另一个表格到特定单元格

 Sub FormatData() Dim col As Integer For col = 1 To 1 With Worksheets(2) .Cells(2, 2) = Cells(1, col) .Cells(2, 3) = Cells(2, col) & ". " & Cells(3, col) & ". " & Cells(4, col) & ". " & Cells(5, col) & "." .Cells(2, 4) = Cells(7, col) .Cells(2, 5) = Cells(10, col) End With Next col For col = 2 To 2 With Worksheets(2) .Cells(3, 2) = Cells(1, col) .Cells(3, 3) = Cells(2, col) & ". " & Cells(3, col) & ". " & Cells(4, col) & ". " & Cells(5, col) & "." .Cells(3, 4) = Cells(7, col) .Cells(3, 5) = Cells(10, col) End With Next col For col = 3 To 3 With Worksheets(2) .Cells(4, 2) = Cells(1, col) .Cells(4, 3) = Cells(2, col) & ". " & Cells(3, col) & ". " & Cells(4, col) & ". " & Cells(5, col) & "." .Cells(4, 4) = Cells(7, col) .Cells(4, 5) = Cells(10, col) End With Next col For col = 4 To 4 With Worksheets(2) .Cells(5, 2) = Cells(1, col) .Cells(5, 3) = Cells(2, col) & ". " & Cells(3, col) & ". " & Cells(4, col) & ". " & Cells(5, col) & "." .Cells(5, 4) = Cells(7, col) .Cells(5, 5) = Cells(10, col) End With Next col For col = 1 To 1 With Worksheets(2) .Cells(6, 2) = Cells(13, col) .Cells(6, 3) = Cells(14, col) & ". " & Cells(15, col) & ". " & Cells(16, col) & ". " & Cells(17, col) & "." .Cells(6, 4) = Cells(19, col) .Cells(6, 5) = Cells(22, col) End With Next col For col = 2 To 2 With Worksheets(2) .Cells(7, 2) = Cells(13, col) .Cells(7, 3) = Cells(14, col) & ". " & Cells(15, col) & ". " & Cells(16, col) & ". " & Cells(17, col) & "." .Cells(7, 4) = Cells(19, col) .Cells(7, 5) = Cells(22, col) End With Next col For col = 3 To 3 With Worksheets(2) .Cells(8, 2) = Cells(13, col) .Cells(8, 3) = Cells(14, col) & ". " & Cells(15, col) & ". " & Cells(16, col) & ". " & Cells(17, col) & "." .Cells(8, 4) = Cells(19, col) .Cells(8, 5) = Cells(22, col) End With Next col For col = 4 To 4 With Worksheets(2) .Cells(9, 2) = Cells(13, col) .Cells(9, 3) = Cells(14, col) & ". " & Cells(15, col) & ". " & Cells(16, col) & ". " & Cells(17, col) & "." .Cells(9, 4) = Cells(19, col) .Cells(9, 5) = Cells(22, col) End With Next col For col = 1 To 1 With Worksheets(2) .Cells(10, 2) = Cells(25, col) .Cells(10, 3) = Cells(26, col) & ". " & Cells(27, col) & ". " & Cells(28, col) & ". " & Cells(29, col) & "." .Cells(10, 4) = Cells(31, col) .Cells(10, 5) = Cells(34, col) End With Next col For col = 2 To 2 With Worksheets(2) .Cells(11, 2) = Cells(25, col) .Cells(11, 3) = Cells(26, col) & ". " & Cells(27, col) & ". " & Cells(28, col) & ". " & Cells(29, col) & "." .Cells(11, 4) = Cells(31, col) .Cells(11, 5) = Cells(34, col) End With Next col For col = 3 To 3 With Worksheets(2) .Cells(12, 2) = Cells(25, col) .Cells(12, 3) = Cells(26, col) & ". " & Cells(27, col) & ". " & Cells(28, col) & ". " & Cells(29, col) & "." .Cells(12, 4) = Cells(31, col) .Cells(12, 5) = Cells(34, col) End With Next col For col = 4 To 4 With Worksheets(2) .Cells(13, 2) = Cells(25, col) .Cells(13, 3) = Cells(26, col) & ". " & Cells(27, col) & ". " & Cells(28, col) & ". " & Cells(29, col) & "." .Cells(13, 4) = Cells(31, col) .Cells(13, 5) = Cells(34, col) End With Next col For col = 1 To 1 With Worksheets(2) .Cells(14, 2) = Cells(37, col) .Cells(14, 3) = Cells(38, col) & ". " & Cells(39, col) & ". " & Cells(40, col) & ". " & Cells(41, col) & "." .Cells(14, 4) = Cells(43, col) .Cells(14, 5) = Cells(46, col) End With Next col For col = 2 To 2 With Worksheets(2) .Cells(15, 2) = Cells(37, col) .Cells(15, 3) = Cells(38, col) & ". " & Cells(39, col) & ". " & Cells(40, col) & ". " & Cells(41, col) & "." .Cells(15, 4) = Cells(43, col) .Cells(15, 5) = Cells(46, col) End With Next col For col = 3 To 3 With Worksheets(2) .Cells(16, 2) = Cells(37, col) .Cells(16, 3) = Cells(38, col) & ". " & Cells(39, col) & ". " & Cells(40, col) & ". " & Cells(41, col) & "." .Cells(16, 4) = Cells(43, col) .Cells(16, 5) = Cells(46, col) End With Next col For col = 4 To 4 With Worksheets(2) .Cells(17, 2) = Cells(37, col) .Cells(17, 3) = Cells(38, col) & ". " & Cells(39, col) & ". " & Cells(40, col) & ". " & Cells(41, col) & "." .Cells(17, 4) = Cells(43, col) .Cells(17, 5) = Cells(46, col) End With Next col For col = 1 To 1 With Worksheets(2) .Cells(18, 2) = Cells(49, col) .Cells(18, 3) = Cells(50, col) & ". " & Cells(51, col) & ". " & Cells(52, col) & ". " & Cells(53, col) & "." .Cells(18, 4) = Cells(55, col) .Cells(18, 5) = Cells(58, col) End With Next col For col = 2 To 2 With Worksheets(2) .Cells(19, 2) = Cells(49, col) .Cells(19, 3) = Cells(50, col) & ". " & Cells(51, col) & ". " & Cells(52, col) & ". " & Cells(53, col) & "." .Cells(19, 4) = Cells(55, col) .Cells(19, 5) = Cells(58, col) End With Next col For col = 3 To 3 With Worksheets(2) .Cells(20, 2) = Cells(49, col) .Cells(20, 3) = Cells(50, col) & ". " & Cells(51, col) & ". " & Cells(52, col) & ". " & Cells(53, col) & "." .Cells(20, 4) = Cells(55, col) .Cells(20, 5) = Cells(58, col) End With Next col For col = 4 To 4 With Worksheets(2) .Cells(21, 2) = Cells(49, col) .Cells(21, 3) = Cells(50, col) & ". " & Cells(51, col) & ". " & Cells(52, col) & ". " & Cells(53, col) & "." .Cells(21, 4) = Cells(55, col) .Cells(21, 5) = Cells(58, col) End With Next col For col = 1 To 1 With Worksheets(2) .Cells(22, 2) = Cells(61, col) .Cells(22, 3) = Cells(62, col) & ". " & Cells(63, col) & ". " & Cells(64, col) & ". " & Cells(65, col) & "." .Cells(22, 4) = Cells(67, col) .Cells(22, 5) = Cells(70, col) End With Next col For col = 2 To 2 With Worksheets(2) .Cells(23, 2) = Cells(61, col) .Cells(23, 3) = Cells(62, col) & ". " & Cells(63, col) & ". " & Cells(64, col) & ". " & Cells(65, col) & "." .Cells(23, 4) = Cells(67, col) .Cells(23, 5) = Cells(70, col) End With Next col For col = 3 To 3 With Worksheets(2) .Cells(24, 2) = Cells(61, col) .Cells(24, 3) = Cells(62, col) & ". " & Cells(63, col) & ". " & Cells(64, col) & ". " & Cells(65, col) & "." .Cells(24, 4) = Cells(67, col) .Cells(24, 5) = Cells(70, col) End With Next col For col = 4 To 4 With Worksheets(2) .Cells(25, 2) = Cells(61, col) .Cells(25, 3) = Cells(62, col) & ". " & Cells(63, col) & ". " & Cells(64, col) & ". " & Cells(65, col) & "." .Cells(25, 4) = Cells(67, col) .Cells(25, 5) = Cells(70, col) End With Next col For col = 1 To 1 With Worksheets(2) .Cells(26, 2) = Cells(73, col) .Cells(26, 3) = Cells(74, col) & ". " & Cells(75, col) & ". " & Cells(76, col) & ". " & Cells(77, col) & "." .Cells(26, 4) = Cells(79, col) .Cells(26, 5) = Cells(82, col) End With Next col For col = 2 To 2 With Worksheets(2) .Cells(27, 2) = Cells(73, col) .Cells(27, 3) = Cells(74, col) & ". " & Cells(75, col) & ". " & Cells(76, col) & ". " & Cells(77, col) & "." .Cells(27, 4) = Cells(79, col) .Cells(27, 5) = Cells(82, col) End With Next col For col = 3 To 3 With Worksheets(2) .Cells(28, 2) = Cells(73, col) .Cells(28, 3) = Cells(74, col) & ". " & Cells(75, col) & ". " & Cells(76, col) & ". " & Cells(77, col) & "." .Cells(28, 4) = Cells(79, col) .Cells(28, 5) = Cells(82, col) End With Next col For col = 4 To 4 With Worksheets(2) .Cells(29, 2) = Cells(73, col) .Cells(29, 3) = Cells(74, col) & ". " & Cells(75, col) & ". " & Cells(76, col) & ". " & Cells(77, col) & "." .Cells(29, 4) = Cells(79, col) .Cells(29, 5) = Cells(82, col) End With Next col For col = 1 To 1 With Worksheets(2) .Cells(30, 2) = Cells(85, col) .Cells(30, 3) = Cells(86, col) & ". " & Cells(87, col) & ". " & Cells(88, col) & ". " & Cells(89, col) & "." .Cells(30, 4) = Cells(91, col) .Cells(30, 5) = Cells(94, col) End With Next col For col = 2 To 2 With Worksheets(2) .Cells(31, 2) = Cells(85, col) .Cells(31, 3) = Cells(86, col) & ". " & Cells(87, col) & ". " & Cells(88, col) & ". " & Cells(89, col) & "." .Cells(31, 4) = Cells(91, col) .Cells(31, 5) = Cells(94, col) End With Next col For col = 3 To 3 With Worksheets(2) .Cells(32, 2) = Cells(85, col) .Cells(32, 3) = Cells(86, col) & ". " & Cells(87, col) & ". " & Cells(88, col) & ". " & Cells(89, col) & "." .Cells(32, 4) = Cells(91, col) .Cells(32, 5) = Cells(94, col) End With Next col For col = 4 To 4 With Worksheets(2) .Cells(33, 2) = Cells(85, col) .Cells(33, 3) = Cells(86, col) & ". " & Cells(87, col) & ". " & Cells(88, col) & ". " & Cells(89, col) & "." .Cells(33, 4) = Cells(91, col) .Cells(33, 5) = Cells(94, col) End With Next col End Sub 

这是一个重构的Sub

注意事项:

  • 使用variables数组进行循环/数据处理,因为在单元中循环很慢

  • 您可以更改srcBlocks的值以控制要处理的块数,或者从源数据中提取它

  • 通过索引引用目标工作表可能会有问题,如果它被移动。 更安全地按名称引用它Worksheets("SheetName")

 Sub FormatData() Dim rw2 As Integer, rwA As Integer, colA As Integer Dim vDst() As Variant, vSrc As Variant Dim srcBlocks As Integer srcBlocks = 8 ' process 8 blocks of 12 rows vSrc = ActiveSheet.Range("A1:D" & srcBlocks * 12) ReDim vDst(1 To srcBlocks * 4 + 1, 1 To 5) For rwA = 0 To srcBlocks * 12 - 1 Step 12 ' = 0, 12, 24, ... For colA = 1 To 4 ' 4 columns in Src rw2 = (rwA \ 12) * 4 + colA + 1 ' 4 Dst rws per block, = 2..5, 6..9, ... vDst(rw2, 2) = vSrc(rwA + 1, colA) vDst(rw2, 3) = vSrc(rwA + 2, colA) & ". " & _ vSrc(rwA + 3, colA) & ". " & _ vSrc(rwA + 4, colA) & ". " & _ vSrc(rwA + 5, colA) & "." vDst(rw2, 4) = vSrc(rwA + 7, colA) vDst(rw2, 5) = vSrc(rwA + 10, colA) Next colA Next rwA Worksheets(2).Range("A1:E" & CStr(srcBlocks * 4 + 1)) = vDst End Sub 

为源数据中的可变数量的列添加灵活性

 Sub FormatData() Dim rw2 As Integer, rwA As Integer, colA As Integer Dim vDst() As Variant, vSrc As Variant Dim srcBlocks As Integer, srcColumns As Integer srcBlocks = 8 ' process 8 blocks of 12 rows ' srcColumns = 5 ' Columns in source data ' vSrc = ActiveSheet.Range( _ ActiveSheet.Cells(1, 1), _ ActiveSheet.Cells(srcBlocks * 12, srcColumns)) ReDim vDst(1 To srcBlocks * srcColumns + 1, 1 To 5) For rwA = 0 To srcBlocks * 12 - 1 Step 12 ' = 0, 12, 24, ... ' For colA = 1 To srcColumns ' srcColumns columns in Source ' rw2 = (rwA \ 12) * srcColumns + colA + 1 ' srcColumns rows in Destination per Source block ' vDst(rw2, 2) = vSrc(rwA + 1, colA) vDst(rw2, 3) = vSrc(rwA + 2, colA) & ". " & _ vSrc(rwA + 3, colA) & ". " & _ vSrc(rwA + 4, colA) & ". " & _ vSrc(rwA + 5, colA) & "." vDst(rw2, 4) = vSrc(rwA + 7, colA) vDst(rw2, 5) = vSrc(rwA + 10, colA) Next colA Next rwA Worksheets(2).Range("A1:E" & CStr(srcBlocks * 4 + 1)) = vDst End Sub 

这是一个非常紧凑的方法,请注意rindex公式中的斜杠是一个反斜杠:

 Sub FormatData() Dim rw As Integer Dim rindex As Integer With Worksheets(2) For rw = 2 To 33 rindex = (rw - 2) \ 4 .Cells(rw, 2) = Cells(12 * rindex + 1, (rw - 1) - 4 * rindex) .Cells(rw, 3) = Cells(12 * rindex + 2, (rw - 1) - 4 * rindex) & "." & _ Cells(12 * rindex + 3, (rw - 1) - 4 * rindex) & "." & _ Cells(12 * rindex + 4, (rw - 1) - 4 * rindex) & "." & _ Cells(12 * rindex + 5, (rw - 1) - 4 * rindex) & "." .Cells(rw, 4) = Cells(12 * rindex + 7, (rw - 1) - 4 * rindex) .Cells(rw, 5) = Cells(12 * rindex + 10, (rw - 1) - 4 * rindex) Next rw End With End Sub