【问题标题】:Copy and Paste Loop in VBA based on cell values根据单元格值在 VBA 中复制和粘贴循环
【发布时间】:2014-02-21 20:30:40
【问题描述】:

我正在尝试创建一些代码来查看一系列单元格,并将符合特定参数的单元格复制并粘贴到工作簿中的不同位置。

我想从“sheet5”复制任何带有字母 L 的内容,并将特定范围复制到“sheet1”

我的代码的循环部分一定有问题,因为只有单元格区域的顶部被复制。我希望粘贴从第 5 行开始并继续向下移动。这是否意味着我正确地将 IRow = IRow + 1 放在粘贴函数下方?

Sub Paste_Value_Test()

Dim c As Range
Dim IRow As Long
Dim rDestination As Excel.Range

Application.ScreenUpdating = False
Sheets("sheet5").Activate
For Each c In Sheets("sheet5").Range("b2", Range("N65536").End(xlUp))
    If c.Value = "L" Then
        Sheets("sheet5").Cells(c.Row, 2).Copy

        Set rDestination = Worksheets("sheet5").Cells(5 + IRow, 12)

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

        IRow = IRow + 1

    End If
Next c

End Sub

我非常感谢您对此提供的任何帮助。我对 VBA 比较陌生,将开始认真研究。

【问题讨论】:

  • 所以“L”可以在列B:N 中的任何位置?当你发现你想从该行的 Col 2 复制值时?
  • 您在代码中从 Sheet5 复制到 Sheet5?

标签: vba excel for-loop


【解决方案1】:

这是你正在尝试的吗?我已经对代码进行了注释,因此您理解它应该没有任何问题。

Sub Paste_Value_Test()
    Dim c As Range
    Dim IRow As Long, lastrow As Long
    Dim rSource As Range
    Dim wsI As Worksheet, wsO As Worksheet

    On Error GoTo Whoa

    '~~> Sheet Where "L" needs to be checked
    Set wsI = ThisWorkbook.Sheets("Sheet5")
    '~~> Output sheet
    Set wsO = ThisWorkbook.Sheets("Sheet1")

    Application.ScreenUpdating = False

    With wsI
        '~~> Find Last Row which has data in Col B to N
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            lastrow = .Columns("B:N").Find(What:="*", _
                          After:=.Range("B1"), _
                          Lookat:=xlPart, _
                          LookIn:=xlFormulas, _
                          SearchOrder:=xlByRows, _
                          SearchDirection:=xlPrevious, _
                          MatchCase:=False).Row
        Else
            lastrow = 1
        End If

        '~~> Set you input range
        Set rSource = .Range("B2:N" & lastrow)

        '~~> Search for the cell which has "L" and then copy it across to sheet1
        For Each c In rSource
            If c.Value = "L" Then
                .Cells(c.Row, 2).Copy
                wsO.Cells(5 + IRow, 12).PasteSpecial Paste:=xlPasteValues

                IRow = IRow + 1
            End If
        Next
    End With

LetsContinue:
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

【讨论】:

  • 非常感谢您提供的帮助。这非常适合我想做的事情。我的解释令人困惑,因为我从另一篇文章中获取了我没有为我的场景编辑得足够多的代码。我正计划阅读完整的 VBA 教程,但如果您有任何对学习 VBA 中的数据操作有用的资源,那将非常有帮助。
  • 很高兴它有帮助:) 什么样的数据操作? Stackoverflow 有很多关于数据操作的例子。如果你知道如何搜索的话,谷歌会有很大的帮助:)
  • 知道了。我认为这是最好的选择。计划是通过一个教程来确保我可以调试并对 VBA 有一个大致的了解。然后在项目的基础上学习东西。这是一个很棒的论坛。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 2018-02-02
  • 2014-12-27
相关资源
最近更新 更多