首页 > 解决方案 > 具体标准“大于 50000”或“小于 -50000”

问题描述

这就是我到目前为止所拥有的。我想进行一些修改,但我不完全了解如何去做;

  1. 在第 3 行,我希望我的“复制标准”为“大于 50000”或“小于 50000”。

  2. 如何指定 Sheet2 上第一项复制到的单元格?例如,Sheet2!B10?

  3. 然后,如何将符合我的条件的工作表 1 上的行复制的列限制为(例如)来自工作表 1 的 A、B、E、F、H、I、O 和 AG 列?

    a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(x1Up).Row

    For i = 2 To a

        If Worksheets("Sheet1").Cells(i, 3).Value = **>50000 OR <50000** Then

            Worksheets("Sheet1").Rows(i).Copy
            Worksheets("Sheet2").Activate
            b = Worksheets("Sheet2").Cells(Rows.Count, 1).End(x1Up).Row
            Worksheets("Sheet2").Cells(b + 1, 1).Select
            ActivateSheet.Paste
            Worksheets("Sheet1").Activate

        End if

    Next

    Application.CutCopyMode = False
    ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Select

End Sub

标签: excelvbacopyrow

解决方案


您可以使用Abs()功能并仅进行一次检查:

并使用对象的Range属性通过方法选择给定行中的所需列:WorksheetIntersect()

Option Explicit

Sub main()
    Dim a As Long, i As Long
    Dim sht2 As Worksheet

    Set sht2 = Worksheets("Sheet2") ' set a worksheet object for destination sheet

    With Worksheets("Sheet1") ' reference Sheet1
        a = .Cells(.Rows.Count, 1).End(xlUp).Row ' get referenced sheet column A row index of last not empty cell
        For i = 2 To a
            If Abs(.Cells(i, 3).Value) > 50000 Then ' if cell value in current row index and column 3 is greater than 50000 or less then -500000
                Intersect(.Rows(i), .Range("A:B , E:F, H:I, O:O, AG:AG")).Copy
                sht2.Cells(sht2.Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial
                Application.CutCopyMode = False
            End If
        Next
    End With
End Sub

推荐阅读