2017-07-31 30 views
0

私は特定の値の列を検索するマクロを持っており、trueの場合、その値を含むすべての行を別のワークシートにコピーします。しかし、特定の値を持つすべての行ではなく、最後の行のみをコピーするので、動作しないようです。コピー貼り付けマクロ

基本的に、私はB列にデータを入力し、C列はVLOOKUPで結果を返し、D列はTRUE/FALSEを返します。 D列で値がTRUEになると、行全体がコピーされて別のシートに貼り付けられます。

Private Sub CommandButton21_Click() 
    Dim LR As Long 
    Dim C As Range 
    Dim Test As Worksheet 
    Dim Pastesheet As Worksheet 

    'Find the last row with data in column C 
    LR = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row 

    'look at every cell in D2 onwards 
    For Each C In Range("D2:D" & LR) 
     If C.Value = True Then 

      'Copy code 
      Set Test = Worksheets("Test Sheet") ' Copy From this sheet 
      Set Pastesheet = Worksheets("Inventory") ' to this sheet 

      C.EntireRow.Copy ' copy the row from column D that meets that requirements 
      Pastesheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats   
     End If  
    Next C 
End Sub 
+0

おそらく 'LR = ActiveSheet.Cells()'を変更してセルをカウントしている実際のシートにしたいと思うかもしれません。また、 'C 'の範囲を指定したいワークシートを追加します。今は 'Range(" D2:D "&LR)'だけでActiveSheetを使用しています。 – BruceWayne

+0

ループの前にPasteSheetの最後の行を取得し、カウンタを定義してループ内にcounter = counter + 1を追加し、行全体を貼り付ける行としてカウンタを使用します。これについての良いことは、あなたが持っていた一致数をカウントすることです – Ibo

+0

ありがとう皆さん、あなたは正確にそれらの提案を配置する場所を入力することができますか?私はマクロを書くのがとても新しいです。それは非常に高く評価されます。 – zshake

答えて

0

私はあなたが列Aに何も持っていないと思います。最後の行を見つけるために別の方法を使用してください。あなたのループが始まるときにあなたのスコープを締めてください。

これは動作するはずです:そのエラー@zshake

Private Sub CommandButton21_Click() 
    Dim LR As Long 
    Dim C As Range 
    Dim Test As Worksheet 
    Dim Pastesheet As Worksheet 
    Dim LastRowOnSheet As Long 

    'Find the last row with data in column C 
    LR = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row 

    'look at every cell in D2 onwards 

     Set Test = Worksheets("Test Sheet") ' Copy From this sheet 
     Set Pastesheet = Worksheets("Inventory") ' to this sheet 

    For Each C In Test.Range("D2:D" & LR).Cells 


    If C.Value = True Then '(you can actually type "if c.value then" but no difference) 

     'Copy code    

     LastRowOnSheet = Pastesheet.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row 

     C.EntireRow.Copy 'copy the row from column D that meets that requirements 

     Pastesheet.Cells(LastRowOnSheet + 1, 1).PasteSpecial xlPasteValuesAndNumberFormats 

    End If 

    Next C 

    End Sub 

シートが定義されていませんでした示したり、シート全体が空白になっています。 findコマンドにエラーはありません。 pasteSheetが有効であることを確認するためのテスト。あなたがエラーを取得しているところ、上記のコードの1行でこれを置くことによってこれを行うことができます。

msgbox Pastesheet.name

ことは、シート名が表示されている場合は、あなたがシートに良いです。

+0

LastRowOnSheet = Pastesheet.Cells.Find( "*"、searchorder:= xlByRows、searchdirection:= xlPrevious).Rowでエラーが発生します。エラー "オブジェクト変数または可変ブロックが設定されていません" – zshake

+0

列Aは空白ですが、コマンドボタンがあります – zshake

+0

列CまたはDは空白ですか? – Robby

関連する問題