2017-08-01 20 views
0

特定のセルの値に基づいて行全体をコピーし、それらの行を別のシートに貼り付けるマクロがあります。しかし、2番目のシートではB1セルに貼り付けられますが、B2に貼り付けてヘッダーを含めることができます。マクロを特定のセルに貼り付ける方法

(試験シートはBからである:E)、2から始めるのでj = 2のではなくする

Dim C As Range 
Dim Test As Worksheet 
Dim Pastesheet As Worksheet 
Dim j As Integer 

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

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

'look at every cell in D2 onwards 

j = 1 

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

If C.Value = True Then 

     'Copy code 

     C.EntireRow.Copy Pastesheet.Rows(j) ' copy the row from column D that meets that requirements 

     j = j + 1 

    End If 

Next C 


End Sub 
+2

「行(j)」ではなく「行(j + 1)」です。 – pnuts

+2

'j = 1'を' j = 2'に変更します。または1から始まり、@ pnutsが示唆するように 'j + 1'を使います。あるいは 'j = j + 1'行を' Copy'行の前に移動してください。それらのいずれかが動作します。 – YowE3K

答えて

0

ソリューションは、単にあなたのペーストの行を変更しているj = 1

私も追加されます、もしあなたドンコピーされた選択項目のセルの書式を引き出す必要がありません(値が必要な場合のみ)。コピー機能の使用を避けることをお勧めします。大きなデータセットに対してかなり遅くなる可能性があります。それは確かにそうであるならば、次は非常にうまく動作します:

... 

j = 1 

For Each C In Test.Range("D2:D" & LR) 
    If C.Value = True Then 

     Pastesheet.Range(Pastesheet.Cells(j, 2),Pastesheet.Cells(j, 5)).Value = Test.Range(Test.Cells(C.Row, 2),Test.Cells(C.Row, 5)).Value 

     j = j + 1 
    End If 
Next C 

... 

注:私はあなたがデータから行ったと述べているので、コピーしたいデータが4列にのみあると仮定していますB:Eですが、これは単にカラム番号を調整するだけで、必要に応じてもっと多くのカラムをキャプチャするように調整することができます

コード自体はペーストコマンドよりもややエレガントに見えますが、少しの処理時間。

+0

ありがとうございます。それは良いアドバイスです。 1つの問題は、そのコードを試した後、TestからColumn 2のみがPastesheetに貼り付けられます。どのようにして2から5までの列を貼り付けることができますか? – zshake

+0

私はそれを解決したと信じています。 Value = Test.Range(Test.Cells(C.Row、2)、Test.Cells(C.Row、2)、Pastesheet.Cells(j、2)、Pastesheet.Cells(j、5) 5))。値 ' – zshake

+0

うん、私は行と列を混在させた。良いキャッチ(それを修正するための答えを編集する) – RGA

関連する問題