ループを止めてください
問題はあなたのWhile
句にあります.文字列の長さを文字列と比較しています.TRUE
空でない行のみをコピー
する 有効なデータをテストする
必要な数の列をコピー
サンプルコードを参照
FWIWあなたのコードは少し改善することができます-あなたの要件に対する私の見解は次のとおりです
Sub CopySample()
Dim shSrc As Worksheet
Dim shDst As Worksheet
Dim rSrc As Range
Dim rDst As Range
Dim numCol As Long ' number of columns to copy
On Error GoTo EH
numCol = 2
' select source and dest sheets
Set shSrc = ActiveWorkbook.Worksheets("Sheet1")
Set shDst = ActiveWorkbook.Worksheets("Sheet2")
' Select initial rows
Set rSrc = shSrc.Cells(2, 1)
Set rDst = shDst.Cells(23, 1)
' loop over source
Do While rSrc <> "STOP"
' Test Source row, Qty = 0 and Name is not blank
With rSrc
If .Offset(0, 2) = 0 And .Value <> "" Then
'Copy
.Resize(1, numCol).Copy rDst.Resize(1, numCol)
Set rDst = rDst.Offset(1, 0)
End If
End With
Set rSrc = rSrc.Offset(1, 0)
Loop
Exit Sub
EH:
MsgBox "Error " & Err.Description
End Sub
大量のデータの場合、範囲のループは遅くなる可能性があることに注意してください。この場合はおそらく問題ありませんが、速度を向上させる方法があります。