Excel VBA循环代码

标签 excel vba

我需要有关循环代码的帮助,以从 R 列复制一个单元格并粘贴到 C 列的下一个空单元格中。

C栏

12345                      
12345                      
12345                      
(paste 1 in here)   
12346   
12346   
(paste 2 in here)   
12347   
12347   
12347   
12347   
(paste 3 in here)   

R栏
1

2

3

我使用了这段代码,但是当我有 500 条记录时,似乎不可能将此代码重复 500 次。
Range("R2").Select
Selection.Copy
Range("C1").Select

If IsEmpty(ActiveCell.Offset(1, 0)) Then
    ActiveCell.Offset(1, 0).Select
Else
    ActiveCell.End(xlDown).Offset(1, 0).Select
End If

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False

最佳答案

尝试这个:

Option Explicit

Public Sub CopyAndPaste()

    Dim colToPaste  As New Collection
    Dim rngCell     As Range

    With Worksheets(1)
        For Each rngCell In .Range("B1:B5")
            colToPaste.Add rngCell
        Next rngCell

        For Each rngCell In .Range("A1:A500")
            If IsEmpty(rngCell) Then
                If colToPaste.Count = 0 Then Exit Sub
                rngCell = colToPaste(1)
                colToPaste.Remove (1)
            End If
        Next rngCell
    End With

End Sub

一般来说,这就是我们所拥有的:
  • 一个集合colToPaste ,其中包含 B1:B5 范围内的所有值.您可以根据 B 列中的最后一行更改收集范围并使其具有变量。 .见这里 - https://www.rondebruin.nl/win/s9/win005.htm
  • 遍历范围 A1:A500 的循环,它将检查每个单元格,无论它是否为空。如果它是空的,它会像这样给它列表中第一个的值 - rngCell = colToPaste(1) .然后它会删除它。
  • 为了知道何时停止,我添加了 If colToPaste.Count = 0 Then Exit Sub . =0部分可以删除,但这样更容易理解。

  • enter image description here

    关于Excel VBA循环代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44135015/

    相关文章:

    vba - Excel VBA删除方法不删除标题

    excel - 使用 PowerShell 移动 xlsx 文件中的列

    vba - 如何检测单元格格式的变化?

    excel - 为什么我不能在 Excel 2016 VBA 中 ReDim 索引为 LongPtr 或 LongLong 的数组

    excel - *.xlsx 文件何时以及为何包含 *.bin 文件?

    vba - 将电子邮件附件名称添加到我的报告 Outlook

    vba - 计算函数在 vba 中是否正常工作

    java - 如何在不使用 EOMONTH 的情况下在 Excel 中查找上个月的最后一天

    r - 如何在 r studio 中的多个 Excel 工作表上使用脚本

    excel - 在 VBA 中比较日期的各个部分