2

昨日私は以下について援助を求めました:

  1. 新しいワークブック、ワークブック'B'を作成するVBAマクロから
  2. ワークブック「A」からワークブック「B」へのデータの行のコピー
  3. ブック「B」を閉じる前に適切な形式で保存する

昨日の投稿(VBA-Excelの行をあるブックから別のブックにコピーする方法は?)は、私の問題に対する確実な解決策を示しました。

それ以来、私は自分のコードをさらに進歩させ、新しい要件を持っています。ワークブック「A」sheet1のセルAiの値がワークブック「B」sheet1のセルAiの値と一致するかどうかに応じて、ワークブック「B」からコピーされた行を削除するコードのセクションが必要になります(iはインクリメントされる整数変数)。このコードは、行にコピーされたコードのセクションのかなり後に実行され、その後、プライマリ行が新しい情報で更新されたため、これが少し逆に見える場合があります。

私が以下に持っているものはあなたに私が持っているもののアイデアを与えるはずです:

...
Do Until IsEmpty(newBk.Sheets("Bad Records").Range("A" & extFileRowCount))
     If newBk.Sheets("Bad Records").Range("A" & extFileRowCount) = _
        mainBk.Range("W" & sdRow).Value Then
        'then delete the row and reinsert
        '***** Stuck here. How do I remove the row? *****'    
         newBk.Sheets("Bad Records").Range _
            ("A" & extFileRowCount).remove '???
            newRowCount = newRowCount + 1
            mainBk.Rows(sdRow).Copy newBk.Sheets _                
                 ("Bad Records").Rows(newRowCount)
      Else
           extFileRowCount = extFileRowCount + 1
      Loop
...

アルゴリズムは正しいと思いますが、行を削除する方法に固執しています。どんな助けでも大歓迎です。

QF

4

1 に答える 1

1

この行がループにある理由がよくわかりません

mainBk.Rows(sdRow).Copy newBk.Sheets _                
("Bad Records").Rows(newRowCount)

ただし、行を削除するには、このコードを使用できます ( UNTESTED )

Sub Sample()
    Dim i As Long
    Dim Delrange As Range

    Application.ScreenUpdating = False

    '
    '~~> Rest of the code
    '

    For i = extFileRowCount To 1 Step -1
        If newBk.Sheets("Bad Records").Range("A" & extFileRowCount) = _
           mainBk.Range("W" & sdRow).Value Then

            If Delrange Is Nothing Then
                Set Delrange = newBk.Sheets("Bad Records").Rows(i)
            Else
                Set Delrange = Union(Delrange, newBk.Sheets("Bad Records").Rows(i))
            End If
        End If
    Next i

    If Not Delrange Is Nothing Then Delrange.Delete

    '
    '~~> Rest of the code
    '

    Application.ScreenUpdating = True
End Sub

HTH

于 2012-04-20T10:59:51.627 に答える