2017-12-08 5 views
0

を特定のタイトルのシートをフィルタリングするマクロExcelを作成します。これらのシートは、生データと編成データサマリーに編成されています。私は〜50枚の異なるシートを含むExcelワークブックを持つ新しいブックへ

データサマリは、Accessデータベースにアップロードしようとしているシートであり、これらのシートにはすべて、その名前の一部として「要約」または「合計」という文字列が含まれています。私はVBAの新人です。私は、シートをフィルタリングするスクリプトを設定して、ワークシートの一部として未加工のデータシートではなく要約シートだけを残す方法があるのだろうかと思います。

生のデータを失いたくないので、理想的には、新しいExcelブックに要約用紙をコピーします。どんな助け?それとも不可能なのでしょうか?

+0

まだマクロを記録しようとしましたか?それはいくつかのコードを取得し始めるのに適しています。 – braX

+0

これは始めるには良い場所だと思います。参考にしたところでは、「sum」や「summary」という文字列が名前の一部として含まれているシートのみを識別しようとしています –

答えて

2

InStr()機能を使用すると、これに最適です。ボーナスはここにはシートが隠されており、ではないが削除されます。

"概要"には既に "合計"という文字列が含まれているため、そのためのロジックを入れても構いませんでした。

"和" ALLシート携帯に書かれたテストされていない

Sub ShowSheets() 

    Dim sht As Worksheet 

    For Each sht In Worksheets 
     sht.Visible = xlSheetVisible 
    Next 

End Sub 
0
Option explicit 

Sub CopySumSheetsOver() 

Const SUBSTRING as string = "Sum" 'Change this to whatever string you want to search for.' 

With thisworkbook 

Dim ws as Worksheet 
Dim SheetNames() as string 
Redim SheetNames(1 to .worksheets.count) 

Dim SheetIndex as long 

For each ws in .worksheets 
SheetIndex = SheetIndex + 1 
SheetNames(SheetIndex) = ws.name 
Next ws 

Redim preserve sheetnames(1 to sheetindex) 

SheetNames = filter(sheetnames,SUBSTRING,True,vbTextCompare) 'vbBinaryCompare is faster, but case-sensitive, use whichever one you need.' 

Dim DestinationWorkbook as workbook 
Set DestinationWorkbook = application.workbooks.add 

.worksheets(SheetNames).copy destinationworkbook.worksheets(destinationworkbook.worksheets.count) 

End with 

End sub 

を表示するマクロ

Sub HideSheets() 

    Dim sht As Worksheet 

    For Each sht In Worksheets 
     If (InStr(sht.Name, "Sum")) Then 
     sht.Visible = xlSheetHidden 
     End If 
    Next 

End Sub 

を含むシートを非表示にするマクロ。申し訳ありませんがフォーマットが正しくありません。

関連する問題