2016-11-12 8 views
-1

セルに0より大きい値があり、その行をシート2にコピーすると、ワークブック内のセルをどのように見えるかを調べようとしていました。次に列内の次のセルを調べます。Excelセルが空白でない場合、シート2に行をコピーします。

誰でも知っていますか?

I10> 0の場合、I10> 0の場合はA10からデータをコピーします。それ以外の場合はI11を見て繰り返し、次にI12 ...は750+のすべての行がコピーされるかどうかです。

ありがとうございました。

+1

何を試しましたか?この要件はとても簡単です。オンラインのExcel VBAチュートリアルでは、知っておく必要があるすべてをカバーします。このサイトはプログラマーが互いに助け合うためのサイトです。あなたは「750+行」と言います。列の最後の行を見つける方法を調べてください。あなたはI10、I11、I12、... Innnを見たいと思います。ここで、nnnは最後の行番号です。 Forループが何であるか知っていますか?変数を使ってセルにアクセスする方法を知っていますか?このチュートリアルでは、このすべてを教えてくれるでしょう。 1時間か2つの研究では、この問題と次の問題を解決することができます。 –

答えて

0
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 
0

あなたがRangeオブジェクトのAutoFilter()メソッドを使用して細胞をループを回避することができます

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 

ところで、文:

If IsEmpty(.Cells(1, 1)) Then .Cells(1, 1) = "dummyheader" 

If .Cells(1, 1).Value = "dummyheader" Then .Cells(1, 1).ClearContents 

が可能アボあなたのセルI9に何らかのテキストがある場合は片側

+0

@TimothyWinkler、それを乗り越えましたか? – user3598756

関連する問題