2017-12-19 4 views
1

こんにちは皆さんは、特定の範囲内で名前が付けられた特定のワークシートのリストをループし、それらのシートのデータをサマリー・シートにコピーしようとしています。ワークシートのリストをループして、データをサマリー・シートにコピーしてください

は、これまでのところ、私はこのコードを持っている:

Sub MacroToDoTheWork() 

Dim ws As Worksheet 
Dim ZeileUntersucht As Integer 
Dim ZeileEintragen As Integer 
Dim sheet_name As Range 


ZeileUntersucht = 17 
ZeileEintragen = 2 

For each sheet_name in Sheets("Frontend").Range("L21:L49") 

For ZeileUntersucht = 20 To 515 
    If ws.Cells(ZeileUntersucht, 238).Value = "yes" Then 
     Worksheets("Market Place Output").Cells(ZeileEintragen, 1) = ws.Cells(ZeileUntersucht, 1) 
     ZeileEintragen = ZeileEintragen + 1 

    End If 
Next ZeileUntersucht 

Next sheet_name 

End Sub 

ザ・ループのために作業し、選択したシートが基準をチェックする範囲と別のシートに値を貼り付けを通過されます。私が問題を抱えているのは、For each loopです。このループをワークシートのリストに対して機能させる。フロントエンド範囲L21:L49は、ワークシート名が格納されている範囲です。

あなたはこのようにそれをしようとした場合、あなたはさらに情報が必要な場合は、

答えて

0

あなたはRangesheet_namesへの配列からすべてのシート名を読み取ることができます。

SheetsThisWorkbookにループすると、ループ内の現在のシートがMatch機能を使用してアレイ内の名前の1つに一致するかどうかを確認できます。

:あなたはSheets("Frontend").Range("L21:L49")にシート名をループ、それを他の方法を行い、その後、シートの名前を使用しようとするシート名が勝った場合、あなたは、実行時エラーを取得することができますあなたのワークブック内のどのシートにも見つかりません。

私は私の問題をより明確にすることができるかどうかの提案のためのコード

Dim Sht As Worksheet 
Dim sheet_names As Variant 

' getting the sheet names inside an array 
sheet_names = Application.Transpose(Sheets("Frontend").Range("L21:L49").Value) 

' loop through worksheets 
For Each Sht In ThisWorkbook.Sheets 
    ' use Macth function to check if current sheet's name matches one of the sheets in your Range 
    If Not IsError(Application.Match(Sht.Name, sheet_names, 0)) Then 
     ' do here your copy Paste 


    End If 

Next Sht 
+0

あなたの提案をありがとう私はそれを即座にテストします – Tim

+0

@Timフィードバック?あなたが意図したとおりに働いていますか? –

0

を依頼してください、私は正確にあなたの問題を理解していなかったが、私はそれが固定されるだろうとします

For Each sheet_name In Sheets("Frontend").Range("L21:L49") 
    Set ws = Worksheets(sheet_name.Text) 
    For ZeileUntersucht = 20 To 515 
     If ws.Cells(ZeileUntersucht, 238).Value = "yes" Then 
      Worksheets("Market Place Output").Cells(ZeileEintragen, 1) = ws.Cells(ZeileUntersucht, 1) 
      ZeileEintragen = ZeileEintragen + 1 
     End If 
    Next ZeileUntersucht 
Next sheet_name 

をあなたのアイデアがある場合sheet_nameがワークシートの名前であれば、それはうまくいくはずです。


つのアイデア:VBAでの変数名で_を使用して

+0

感謝を修正しました。私は、ワークシートのリストをループし、2番目のForループをマクロで実行する作業ループを作成することができませんでした。私は今あなたの解決策をテストします。 – Tim

+1

あなたの有益なヒントをありがとう、私はあなたのソリューションを実装し、マクロが実行されますが、しばらくしてから、 "下付き文字が範囲外"と言っているマクロを取得しても、チェックする必要があるデータのこれをよりスムーズにする方法はありますか? – Tim

+0

@Tim - https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba – Vityata

関連する問題