【问题标题】:Copy range based on a condition根据条件复制范围
【发布时间】:2020-01-19 00:49:31
【问题描述】:

我想编写一个宏来仅复制具有数据的单元格范围并忽略值为NA的单元格

我已经构建了一个帮助工具,以确保从多个来源收集的数据放置在正确的相应列中,然后我从那里复制这些列并将其粘贴到主工作表中。填充这些值的范围是A3R,而在R 列中是Vlookup

我想编写一个宏,这样我就可以按下启用宏的按钮来复制该范围内的单元格,并在 Vlookup 停止返回值的位置结束。到目前为止,我已经能够编写它,因此它会复制到 Vlookup 的末尾,但它仍在收集包含 R 中的公式的结果。

目前撰写:

Sub Copy()
    Dim ws As Worksheet
    Set ws = Sheets("Sheet1")
    ws.Range(ws.[A:R], ws.Cells(Rows.Count, "R").End(xlUp)).Copy
End Sub

【问题讨论】:

  • 顺便说一句,我通常不会这么说,但似乎您可能不知道如何将 asnwer 标记为已解决。不要编辑问题并在此处输入solved。使用正确的方式如图HERE

标签: excel vba


【解决方案1】:

一种方式。

  1. 使用自动过滤器。
  2. 过滤掉不是#N/A的值
  3. 一次性复制过滤后的范围。

这是你正在尝试的吗?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim rng As Range, filteredrng As Range
    Dim lrow As Long

    Set ws = Sheet1 '<~~ Change this to the relevant sheet

    With ws
        .AutoFilterMode = False

        lrow = .Range("R" & .Rows.Count).End(xlUp).Row

        Set rng = .Range("A3:R" & lrow)

        With rng
           .AutoFilter Field:=18, Criteria1:="<>#N/A"
            Set filteredrng = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
        End With

        If Not filteredrng Is Nothing Then
            '~~> COPY RANGE CODE HERE
        End If

        .AutoFilterMode = False
    End With
End Sub

【讨论】:

  • 感谢您的回复。我插入了它,它现在正在正确选择和复制,但是当我从它正在复制的内容中粘贴时,它会导致它将选定的单元格和空白单元格粘贴到第 104888 行。知道为什么这样做而不是只粘贴选定的单元格?
  • '~~&gt; COPY RANGE CODE HERE 如果你把它换成Debug.Print filteredrng.Addres,你会看到什么?
  • 已解决:我必须将 .End(xlUp) 添加到我的范围代码中。感谢您的帮助,我一直试图解决这个问题
猜你喜欢
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2018-09-16
相关资源
最近更新 更多