Vba Excel如果单元格不为空,请将行复制到sheet2中

Vba Excel如果单元格不为空,请将行复制到sheet2中,vba,excel,if-statement,macros,Vba,Excel,If Statement,Macros,我试图弄清楚如何让excel查看工作簿中的单元格,如果该单元格的值大于0,则将该行复制到sheet2中。然后查看列中的下一个单元格 有人知道吗 我需要它查看单元格I10开始,如果I10>0将数据从A10:K10复制到表2,否则查看I11并重复,然后I12。。。直到复制或不复制所有750+行 非常感谢你的帮助 您可以使用范围对象的方法,避免在单元格中循环: Option Explicit Sub Macro1() Dim cell As Range Dim lastRow As Long, i

我试图弄清楚如何让excel查看工作簿中的单元格,如果该单元格的值大于0,则将该行复制到sheet2中。然后查看列中的下一个单元格

有人知道吗

我需要它查看单元格I10开始,如果I10>0将数据从A10:K10复制到表2,否则查看I11并重复,然后I12。。。直到复制或不复制所有750+行

非常感谢你的帮助

您可以使用
范围
对象的方法,避免在单元格中循环:

Option Explicit

Sub Macro1()

Dim cell As Range
Dim lastRow As Long, i As Long

lastRow = Range("I" & Rows.Count).End(xlUp).Row
i = 10 ' change this to the wanted starting row in sheet2

For Each cell In Sheets(1).Range("I10:I" & lastRow)
    If cell.Value > 0 Then
        cell.EntireRow.Copy Sheets(2).Cells(i, 1)
        i = i + 1
    End If
Next

End Sub
Sub Main()
    With Worksheets("OriginWs") '<--| change "OriginWs" to your actual data worksheet name
        With .Range("I9", .Cells(.Rows.Count, "I").End(xlUp))
            If IsEmpty(.Cells(1, 1)) Then .Cells(1, 1) = "dummyheader"
            .AutoFilter Field:=1, Criteria1:=">0"
            If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then .Offset(1, -8).Resize(.Rows.Count - 1, 11).SpecialCells(xlCellTypeVisible).Copy Worksheets("TargetWs").Cells(1, 1) '<--| change "TargetWs" to your actual destination worksheet name
            If .Cells(1, 1).Value = "dummyheader" Then .Cells(1, 1).ClearContents
        End With
        .AutoFilterMode = False
    End With
End Sub


如果您的I9单元确实有一些文本,则可以避免此问题

您尝试了什么?这个要求很简单。在线Excel VBA教程将涵盖您需要了解的所有内容。这个网站是为程序员提供的,他们可以互相帮助开发。你说“750多行”。查找如何查找列的最后一行。你想看看I10,I11,I12。。。Innn,其中nnn是最后一行号。你知道什么是For循环吗?您知道如何使用变量访问单元格吗?本教程将教您所有这些。一两个小时的学习可以让你解决这个问题和下一个问题。@TimothyWinkler,你解决了吗?
If IsEmpty(.Cells(1, 1)) Then .Cells(1, 1) = "dummyheader"
If .Cells(1, 1).Value = "dummyheader" Then .Cells(1, 1).ClearContents