- ベストアンサー
シートを分離して他ブックに移動して保存する方法
- あるブックにあるシートを検索してシート名に○○○が含まれているという条件で該当したシートを他ブックに移動する方法を探しています。
- マクロ、VB等を使用して実施することが可能です。
- 例えば、設計書.xlsにあるシートの中から名前に「テスト」が含まれるシートを他のブックに移動して保存することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
やり口は色々考えられますが例えば。 sub macro1() dim bk0 as workbook dim bk1 as workbook dim w as worksheet ’最初に作業対象のブックを取得すること set bk0 = activeworkbook 'もしくは =workbooks("設計書.xls") for each w in bk0.worksheets if w.name like "テスト*" then ’該当のシートを移動すること on error goto errhandle w.move after:=bk1.worksheets(bk1.worksheets.count) on error goto 0 end if next ’保存する bk0.save if not bk1 is nothing then bk1.saveas "設計書テスト.xls" exit sub ’一枚目の該当シートで移動先ブックを作ること errhandle: w.move set bk1 = activeworkbook resume next end sub といったカンジで。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
出来るか? 出来る。VBAの経験あるのか。 (1)質問の内容がはっきりしないが 複数ブックの中から○○○○が含まれるシートを1つのブックにまとめるのか。 それなら在るフォルダのすべてのエクセルファイル名をとらえ、そのブック内のそのシート名を見て○○○○が含まれるシートは何か1つのブックに集める。(1シートを別ブックにするのか質問ではっきりしない。 しっかり説明のこと。 Google[ででも「VBA フォルダ ファイル 取得」で照会して勉強すること。 (2)1つのブック内のシート名を見て○○○○が含まれるシートは何か1つのブックに集めるとすると この場合は Sub test01() For Each sh In Worksheets p = InStr(sh.Name, "Sh") If p <> 0 Then MsgBox sh.Name End If Next End Sub のようなのをやってみれば、やり方が判るだろう。テストではSheet1-Sheet5などの中に名前を変えたシートを作って実験してみて。
- mt2008
- ベストアンサー率52% (885/1701)
VBAでやるならこんな感じで。 設計書.xlsにこのコードを入れて見てください。 サンプルなのでエラー処理一切していません。あしからず。 Sub Sample() Dim ws As Worksheet Dim sName() As String Dim i '*****シート名に「テスト」を含む物を探す i = 0 For Each ws In Worksheets If InStr(ws.Name, "テスト") > 0 Then ReDim Preserve sName(i) sName(i) = ws.Name i = i + 1 End If Next ws '*****探し出したシートをMOVE If i > 0 Then Sheets(sName()).Move ActiveWorkbook.SaveAs Filename:="C:\設計書テスト.xls" End If End Sub
お礼
imogasiさん 助言ありがとうございます。 質問は、(1)を想定して記述しました。 (2)のことは考えていませんでした・・・。