- ベストアンサー
他のブックからシートを自ブックに取り込む方法
- 従業員からの当月月報を簡便に集計するために、他のブックから特定のシートを自ブックに取り込む方法について教えてください。
- 従業員が提出する月報のファイルを個別に開き、就業時間が記載された対象シートを自ブックにコピーし、その後開いたファイルを一括して閉じる作業をマクロ化したいです。
- マクロ作成の途中で問題が発生しており、選択したシートを自ブックにコピーする段階で先に進めなくなっています。解決方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
根本的に構文が間違っていました、すみません 他にも不具合があったので修正してみました Private Sub CommandButton1_Click() '1,ファイル名の取得 Dim myFolder As String 'ドライブ、フォルダ Dim filename As String 'ファイル名 Dim myfile As String 'ファイル名 Dim myWS As Worksheet Dim 自ブック As Workbook Dim 開いたブック As Workbook Set 自ブック = ActiveWorkbook myFolder = "C:\Documents and Settings\nobita\デスクトップ\月報集計" filename = Dir(myFolder & "\" & "*月分*.xls") If filename = "" Then Exit Sub myfile = filename Do Workbooks.Open filename:=myFolder & "\" & myfile Set 開いたブック = Workbooks(myfile) For Each myWS In 開いたブック.Worksheets If myWS.Name Like "*月分*" Then '4,3で選択されたシートを自ブックにコピー myWS.Copy After:=自ブック.Sheets(自ブック.Sheets.Count) End If Next '5,2で開いたファイルを閉じる 開いたブック.Close SaveChanges:=False myfile = Dir() Loop Until myfile = filename Or myfile = "" End Sub 参考まで
その他の回答 (2)
- hige_082
- ベストアンサー率50% (379/747)
#2の補足読みました 最初の質問と違う内容の質問になる場合は 一度閉じて再質問してくださいね Sub test() Dim st As Worksheet Application.DisplayAlerts = False For Each st In Worksheets If InStr(st.Name, "月分") > 0 Then st.Delete End If Next Application.DisplayAlerts = True End Sub このマクロに関して補足等がある場合は再質問でお願いします
お礼
>#2の補足読みました >最初の質問と違う内容の質問になる場合は >一度閉じて再質問してくださいね 大変申し訳ございませんでした。 一度、質問を終了し、新たに質問をするよう気をつけます。 また、懇切丁寧なご回答を毎々、有難うございました。
- hige_082
- ベストアンサー率50% (379/747)
こんな感じでは? 試してないので、エラー出るかも Private Sub CommandButton1_Click() '1,ファイル名の取得 Dim myFolder As String 'ドライブ、フォルダ Dim filename As String 'ファイル名 Dim myfile As String 'ファイル名 Dim myWS As Worksheet Dim 自ブック As Workbook Dim 開いたブック As Workbook Set 自ブック = ActiveWorkbook myFolder = "C:\Documents and Settings\nobita\デスクトップ\月報集計" filename = Dir(myFolder & "\" & "*月分*.xls") If filename = "" Then Exit Sub myfile = filename Do Workbooks.Open filename:=myFolder & "\" & myfile Set 開いたブック = ActiveWorkbook For Each myWS In 開いたブック.Worksheets If myWS.Name Like "*月分*" Then '4,3で選択されたシートを自ブックにコピー myWS.Copy After:=自ブック.Sheets.Count '5,2で開いたファイルを閉じる 開いたブック.Close SaveChanges:=False End If Next myfile = Dir() Loop Until myfile = filename End Sub 参考まで
補足
hige_082 様 早急なご回答有難うございました。 早速、実行致しましたが、実行時エラー'1004': 'copy'メソッドは失敗しましたとエラーになりました。 '選択されたシートを自ブックにコピー myWS.Copy After:=自ブック.Sheets.Count ← この部分が黄色くなっておりました。
お礼
hige_082 様 ご教授いただきました修正版で望み通りの動作が得られました。 何日も悩み、解決できなかったことなので大変、助かりました。 また、事前準備の効率が格段に上がりました。 ありがとうございました。 ついでになってしまい、申し訳ないのですが、取り込みの終わった各シートから 必要な数値を別シートに抜き取り、処理を終えた時点で取り込んだ「*月分」を含む シートのみを自ブックから消去したいのですが、ご教授いただけますでしょうか? 動作の制御は新たな CommandButton2 を作成して行うつもりです。 お手数ですが何卒、宜しくお願い致します。