2017-10-22 11 views
0

私はテーブルの中の会社の名前のリストを持っており、私はこのリストでデータシートに、会社名とシートを移動し、表。私は、各comapnyのためにそれを15回するコードを作りました、そして、私は誰が私に特定のシートを検索し、私が必要とするデータをコピーする特定のループを見つけることができるかに幸運になります。ここExcel VBAループの名前のリストによるシートの一部を介して

は各シートに15のコードの2のサンプルです:

Sheets("Comapny1").Activate 
Range("H2").End(xlDown).Select 
Range(Selection, Selection.End(xlToRight)).Copy 
Sheets("Data").Activate 
Range("A2", Range("A2").End(xlDown)).Find("Comapny1").Activate 
ActiveCell.Offset(0, 1).PasteSpecial (xlPasteValues) 

Sheets("Comapny2").Activate 
Range("H2").End(xlDown).Select 
Range(Selection, Selection.End(xlToRight)).Copy 
Sheets("Data").Activate 
Range("A2", Range("A2").End(xlDown)).Find("Comapny2").Activate 
ActiveCell.Offset(0, 1).PasteSpecial (xlPasteValues) 
+0

私は '選択 'を使用しないことをお勧めします。コピーするときに書式設定が必要ですか?範囲( "A1")。値 ' – Maldred

+0

私はあなたの解決策を理解していませんでした –

+0

それはありません(「シート1」)。解決策。 – jsotola

答えて

1
Option explicit 

Sub LoopThroughCompanies() 

    Dim Company as Range 
    Dim Companies as Range 

    Set Companies = Thisworkbook.Worksheets(NameOfSheetWithCompaniesOnIt).range(TableName[ColumnName]) 

    For each Company in Companies 
     With thisworbook.worksheets(company.value2) 
      .activate 
      .Range("H2").End(xlDown).Select 
      .Range(Selection, Selection.End(xlToRight)).Copy 
     End with 
     With thisworkbook.workSheets("Data") 
      .Activate 
      .Range("A2", .Range("A2").End(xlDown)).Find(company.value2,,xlvalues,xlwhole,).Activate 
      ActiveCell.Offset(0, 1).PasteSpecial (xlPasteValues) 
     End with 
    Next Company 

End sub 
これを試してみてください

携帯電話で未テストで書かれています。フォーマットが正しくないと申し訳ありません。あなたはactivate/selectを使うべきではありませんが、動作していることが分かっていれば元のコードをあまりにも編集したくありませんでした。

あなたのワークブックごとに、NameOfSheetWithCompaniesOnItを実際の名前に置き換えてください。

ブック名[ColumnName]は、ワークブックごとに実際のテーブル名とカラム名に置き換えてください。

希望します。

+0

これは、行:、 '.Range(" A2 ")、End(xlDown))でエラーで停止します。(company.value2、、xlvalues、xlwhole)をアクティブにします。企業とそれはまだ動作しません –

+0

それは動作します!私が作った小さな変更はありません。ありがとうございました。それはうまくいきませんでした。残念ですが、よろしくお願いします。 –

+0

たぶん私は(間違って)あなたのシートや何かのレイアウトについてあまりにも多くを仮定した。 – chillin

1

は、シート名とあなたは企業のリストを持っている範囲を変更した後

Sub test() 

    Dim companies As Range 
    Dim cell As Range 

    Set companies = Sheets("CompnayNamesSheet").Range("A1:A10") 

    For Each cell In companies 

     Sheets(cell.Value).Activate 
     Range("H2").End(xlDown).Select 
     Range(Selection, Selection.End(xlToRight)).Copy 

     Sheets("Data").Activate 
     Range("A2", Range("A2").End(xlDown)).Find(cell.Value).Activate 
     ActiveCell.Offset(0, 1).PasteSpecial (xlPasteValues) 

    Next cell 

End Sub 
+0

'.Select'を使わないでください。 – Maldred

+0

絶対に!私が投稿したソリューションは、シート名をループするためのもので、他のコードは変更されていません。 –

+0

ラインシート(セル)でエラーが発生して停止します.Activate –

関連する問題