Microsoft Excel 2010复制/粘贴编辑想法和帮助请求小细节

Lea*_*aum 5 excel vba excel-vba

是的,我已经在其他人的帮助下为Microsoft Excel编写了这个宏(如果有帮助的话,那就是2010年).我想知道是否有人有办法缩短它,并使其更有效率.然而,它之前仍然得到了相同的结果?我可以在这里找到我需要使用的CSV格式的一个例子......是的,不幸的是,它们必须被放入那些列和单元格中.

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

这是一个示例CSV:Media Fire It's Clean,我保证.感谢您的时间.

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

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
Run Code Online (Sandbox Code Playgroud)

chr*_*sen 2

这是一个重构的Sub

注意事项:

  • 使用变体数组进行循环/数据处理,因为循环单元格很慢

  • 您可以更改 的值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
Run Code Online (Sandbox Code Playgroud)

为了增加灵活性,源数据中的列数可变

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
Run Code Online (Sandbox Code Playgroud)