2017-12-22 12 views
1

ワークシート内のボタンで駆動され、行をコピーして貼り付けることができるマクロを開発しています。特定の列内で特定の基準が満たされている場合は別のワークシートです。マクロをコピーして別のワークシートにペーストせずにページに貼り付けます

問題は、マクロを実行すると、他のスプレッドシートにコピー&ペーストしても、8000行目に貼り付けられているということです。目的地シート。

さらに、これは8000番目の行にペーストするだけで、すでに行内にあるものを上書きします。

マクロを同時に実行して、毎回次の使用可能な行に貼り付けるだけで、他の行を上書きするのではなく次の新しい行を探し続けるようにします。

私はログ内で書式設定をしていますが、境界線とデータ検証のドロップダウンリストの2つしかありません。

私が開発したコードは以下の通りです:

Dim xRg As Range 
Dim xCell As Range 
Dim I As Long 
Dim J As Long 
Dim K As Long 
I = Worksheets("Demand Log").UsedRange.Rows.Count 
J = Worksheets("Change Log").UsedRange.Rows.Count 
If J = 1 Then 
    If Application.WorksheetFunction.CountA(Worksheets("Change Log").UsedRange) = 0 Then J = 0 
End If 
Set xRg = Worksheets("Demand Log").Range("O5:O" & I) 
On Error Resume Next 
Application.ScreenUpdating = False 
For K = 1 To xRg.Count 
    If CStr(xRg(K).Value) = "Change Team" Then 
     xRg(K).EntireRow.Copy Destination:=Worksheets("Change Log").Range("A" & J + 0) 
     xRg(K).EntireRow.Delete 
    End If 
Next 
Application.ScreenUpdating = True 

誰もが、それははるかに高く評価されるだろう。このマクロの開発を支援することができます。

マクロがコピー先のスプレッドシートにコピー&ペーストできるだけでなく、ソースシートから行を削除する前にその行を第3のスプレッドシートにコピーすることもできます。

感謝

+0

以下はJ + 0を達成するだろうか?何もない。それはJです.J = 0のときはどうなりますか?私はあなたが存在しない行0で作業しようとしていることを心配しています。 – QHarr

+1

私はOn Error Resumeを疑う次は閉じていないがエラーを隠しているので、私はUsedRangeを使って行を決定することに注意します。 – QHarr

+0

そして、行を逆方向に削除すると、間違って削除されることがあります。 – QHarr

答えて

1

は、あなたが「使用」であるとして検討する必要はありませんフォーマットされた細胞を持っている場合は特に、スプレッドシートの最後に使用された行を見つけるためにUsedRangeを使用しないでください。より信頼性の高い方法のようなものだろう

:(あなたはそれが常に「使用」の行のデータが含まれています持っているものは何でもコラムで"A"を置き換える)

J = Worksheets("Change Log").Cells(Worksheets("Change Log").Rows.Count, "A").End(xlUp).Row 


あなたのコードですJを1回計算してから、そのJ番目の行に常に新しい情報を貼り付けます。行を宛先に書き込むたびにJをインクリメントする必要があります。おそらく、

使用:

J = J + 1 

をちょうど

xRg(K).EntireRow.Copy Destination:=Worksheets("Change Log").Range("A" & J) 

前に(あなたの質問に記載されていない行の削除、で起こるであろう問題は、で対処することができますそれを解決できない場合は別の質問がありますが、Stack Overflowにはすでに多くの質問/回答があり、その問題に対処しています)

+0

あなたがアドバイスしたものを組み込むためにVBAを編集しました。しかし、私が4つのタスクを横に貼り付ける必要がある場合は、2つのタスクを削除しますが、1つを貼り付けるだけであれば、現在は機能しています。これが起こることを私のコードに示唆するものはありますか? – Adamlh77

+0

@ Adamlh77はい、逆方向ではなく、最初の行から最後の行まで削除を処理しています。おっと - いいえ、それはすべてがコピー/削除されているわけではなく、コピーされずに削除されるものではないことを説明します。 – YowE3K

+0

返信いただきありがとうございます。どうすれば変更できますか? – Adamlh77

関連する問題