1

持っていない果物を注文できるように、数量がオンでゼロの場合は、名前と説明をコピーしたいと思います。「STOP」が表示されるたびにA2から開始し、停止します。

ここに画像の説明を入力

私はコードを持っています: ここに画像の説明を入力

ただし、コードはそれ自体で停止するわけではなく、実行時にブレークする必要があります。最初の2列だけが必要な場合、行全体と行の間のすべての空の行をコピーします。私の質問は 1. 列 A に "STOP" が表示されたときに停止する必要があることをプログラムに知らせる方法は? 空行がないだけをコピーしますか? 最初の2列(または必要な列の数)のみをコピーしますか?

4

1 に答える 1

2
  1. ループを止めてください
    問題はあなたのWhile句にあります.文字列の長さを文字列と比較しています.TRUE

  2. 空でない行のみをコピー
    する 有効なデータをテストする

  3. 必要な数の列をコピー
    サンプルコードを参照

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

大量のデータの場合、範囲のループは遅くなる可能性があることに注意してください。この場合はおそらく問題ありませんが、速度を向上させる方法があります。

于 2012-05-19T22:12:17.520 に答える