2017-11-29 15 views
0

シートをループするコードをシート名に依存したい別の範囲をコピーしたい(シートがリストされない場合はスキップしたい)私はコピーしたい列の数/アドレスを知っていると言うことができます(行の数は​​、私が得た元のファイルに依存します)、私は別の下にcheck_dataというシートに別の下にこれらの範囲をすべてコピーしたいと思います私はこのコードの一部が動作することがありますが、それはシートを通ってループしていないようです。シートをループして特定の範囲をコピーする方法

これまで私はこれを得ました。 vba)

Sub Copy_data() 

Dim wb As Workbook 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim ws3 As Worksheet 


Set wb = ActiveWorkbook 

Set ws1 = wb.Sheets("A") 
Set ws2 = wb.Sheets("B") 
Set ws3 = wb.Sheets("Check_data") 


For Each ws In Worksheets 

If ws.Name = "A" Then 
ws1.Activate 
ws1.Range("A1:Q1").Select 
ws1.Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
ws3.Select 
    If ws3.Range("A1") = "" Then 
     ws3.Range("A1").Select 
     ActiveSheet.Paste 
    Else 
     Selection.End(xlDown).Offset(1, 0).Select 
     ActiveSheet.Paste 
    End If 

ElseIf ws.Name = "B" Then 
ws2.Activate 
ws2.Range("A1:Q1").Select 
ws2.Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
ws3.Select 
    If ws3.Range("A1") = "" Then 
     ws3.Range("A1").Select 
     ActiveSheet.Paste 
    Else 
     Selection.End(xlDown).Offset(1, 0).Select 
     ActiveSheet.Paste 
    End If 
Else 
End If 
Next ws 

End Sub 

ご意見ありがとうございました

答えて

0

ここにいくつかの事があります。常に完全にこのように、これらのオブジェクトとSheetsようワークブックおよびオブジェクトとワークシート、およびpreprendメソッドの両方を指定します。

Dim wb As Workbook 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 

Set wb = ThisWorkbook 

ws1 = wb.Sheets("A") 
ws2 = wb.Sheets("Check_data") 

ws1.Range("A1:Q1").Select 
ws1.Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 

...と同じことを明示的にする必要があることを除いて、あなたが、ペーストする準備ができたら、あなたがに貼り付けるシートアクティブ:

明らか
ws2.Activate 

If ws2.Range("A1") = "" Then 
    ws2.Range("A1").Select 
    Selection.Paste 
Else 
    Selection.End(xlDown).Offset(1, 0).Select 
    Selection.Paste 
End If 

を、これは書き換えあなたの全体のコードスニペットではありませんが、それはあなたが頭にしたい方向だ

+0

再びこんにちは、すべてのあなたとなります。アドバイス私は自分のコードを修正することができましたので、今は動作しますが、解決すべきもう一つの問題があります。たとえば、A1:Q1だけでなくT1:X5など、シートBから2つの異なる範囲をコピーしたいとします。したがって、最終的なコードは、シートAから特定の範囲をcheck_dataというシートにコピーし、次にシートBからは範囲A1:Q1をコピーする必要がありますが、同じシートから別の範囲をコピーしたいので、このcheck_dataシートにT1:X5と言うことができます(まだコピーされている範囲の下にあります) –

+1

あなたはUnionを使って範囲を結合することができます。 – QHarr

+0

Union [here]に関する短い文書(http://www.informit.com/articles/article.aspx?p=2021718&seqNum=11)。 2つの連続した 'Select'と' Selection.Paste'操作を行うこともできますが、Unionはよりクリーンであると思います。 –

関連する問題