- ベストアンサー
Excel vbaで、一行ずつコピーし連続保存する
- Excel vbaを使用して、一行ずつ別のシートにコピーし、連続で保存する方法を教えてください。
- コードの一部を変更した後、保存されるファイルの内容が全て最終行のものになってしまいます。解決策を教えてください。
- エラーに遭遇したため、情報が不足しているかもしれません。必要な情報を教えていただければ幸いです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
テンプレートファイルを作って流し込みした方がいいと思います。下記のような。 ■ファイル Book1.xlsx (下の保存マクロとマスタデータ(全員データシート)があること) テンプレート.xlsx (個人別シートがあること、個人別データシートを参照した印刷シートも用意できる。 Book1.xlsx と同じフォルダにあること。) ■マクロ Sub 保存() Dim テンプレート As String Dim 保存先 As String Dim 最終行 As Long Dim 該当行 As Long ' 設定変数 テンプレート = ThisWorkbook.Path & "\テンプレート.xlsx" 保存先 = ThisWorkbook.Path & "\個人別フォーム" 最終行 = Worksheets("全員データ").UsedRange.Rows.Count 該当行 = 2 ' 処理対象の開始行を設定 ' 以下、主処理 Application.ScreenUpdating = False ' 画面更新を抑制 Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") ' テンプレートファイルの存在チェック If Not fso.FileExists(テンプレート) Then Set fso = Nothing MsgBox "テンプレートファイルが見つかりません。処理を中止します。" & テンプレート & "を作成してください。", Title:="エラー" Exit Sub End If ' 保存先フォルダの存在チェック If Not fso.FolderExists(保存先) Then fso.CreateFolder (保存先) End If Dim ms As Worksheet ' マスタSheet Dim tb As Workbook ' テンプレートBook Dim ts As Worksheet ' テンプレートSheet Set ms = ThisWorkbook.Worksheets("全員データ") ' このシート名も設定変数にしておいたほうがいい While 該当行 <= 最終行 Set tb = Workbooks.Add(テンプレート) Set ts = tb.Worksheets("個人別データ") ' このシート名も設定変数にしておいたほうがいい(2) ts.Range("a2:c2").Value = ms.Range(ms.Cells(該当行, 1), ms.Cells(該当行, 3)).Value Dim filename As String filename = 保存先 & "\個人別データ" & ts.Range("A2") & ts.Range("B2") & ts.Range("C2") & ".xlsx" If fso.FileExists(filename) Then ' ファイルがすでに在ったら(とりあえず)削除。(結果として上書き) fso.DeleteFile filename ' ヒント ここで、ファイル名を別名にすることもできます。 End If tb.SaveAs filename:=filename, FileFormat:=xlOpenXMLWorkbook tb.Close ' 処理状況をステータスバーに表示 ' 注意 件数ではなく行番号です。(まぎらわしいかも) Application.StatusBar = "(" & 該当行 & "/" & 最終行 & ")" & filename & "を保存しました。" Set tb = Nothing 該当行 = 該当行 + 1 Wend MsgBox "保存処理が終了しました" Application.StatusBar = False Application.ScreenUpdating = True Set fso = Nothing End Sub
お礼
とてもご丁寧な回答、ありがとうございました。 まだまだ勉強を始めたばかりであり、理解するのに時間がかかるため、 まずは一つ一つしっかり確認して、試させていただきたいと思います。 一人で路頭に迷っていたところなので、とても助かります。 ありがとうございました。