- ベストアンサー
エクセルVBA【ワークシートのコピー】について
以下のVBA記述で、とあるエクセルファイルのシートをCSV化しようとしております。記述の場合、すべてのワークシートが対象となっていますが、10個くらいあるWorkSheetの【sheets(8)】のみを対象としたいのですが、どのようにしたら良いのでしょうか? お手数ですがご教授下さい。 Sub test() Dim sh As Worksheet Dim fname As String Application.ScreenUpdating = False For Each sh In ActiveWorkbook.Worksheets fname = "C:\temp\" & sh.Name & ".csv" sh.Copy With ActiveWorkbook .SaveAs Filename:=fname, FileFormat:=xlCSV .Close savechanges:=False End With Next sh Application.ScreenUpdating = True End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>【sheets(8)】のみを対象としたいのですが 左から8番目のシートという理解でよろしいですか? Sub test() Dim sh As Worksheet Dim fname As String Application.ScreenUpdating = False Sheets(8).Activate fname = "C:\temp\" & ActiveSheet.Name & ".csv" ActiveSheet.Copy With ActiveWorkbook .SaveAs Filename:=fname, FileFormat:=xlCSV .Close savechanges:=False End With Application.ScreenUpdating = True End Sub
その他の回答 (2)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 こんな感じの方が楽かもしれません。 Option Explicit Sub Sample() ' 選択した(作業グループ)シートを CSV ファイルとして保存する Dim Wb As Workbook Dim Sh As Worksheet Dim strBasename As String Set Wb = ActiveWorkbook With Wb strBasename = .FullName strBasename = Left$(strBasename, InStrRev(strBasename, ".") - 1) End With Application.ScreenUpdating = False ActiveWindow.SelectedSheets.Copy For Each Sh In ActiveWorkbook.Worksheets Sh.SaveAs Filename:=strBasename & "(" & Sh.Name & ").csv", _ FileFormat:=xlCSV Next Sh ActiveWorkbook.Close SaveChanges:=False Wb.Activate Set Wb = Nothing End Sub
ほとんど、質問者が書かれたコードのまんまです。 Option Explicit Private Sub CommandButton1_Click() SaveToCSV 2 End Sub Public Sub SaveToCSV(ByVal intIndex As Integer) Dim sh As Worksheet Dim fname As String Application.ScreenUpdating = False Set sh = ActiveWorkbook.Worksheets(intIndex) fname = "C:\temp\" & sh.Name & ".csv" sh.Copy With ActiveWorkbook .SaveAs Filename:=fname, FileFormat:=xlCSV .Close savechanges:=False End With Application.ScreenUpdating = True End Sub ※Excel は、操作したことがない門外漢です。 ※一応、CSVファイルは作成されました。
お礼
ありがとうございました。 教えて頂いた内容でできました。 自分で調べろといわれてしまいそうですが、 (ByVal intIndex As Integer)どのような宣言になるのでしょうか?
お礼
ありがとうございます。 動作確認できました。 シンプルだしこれでいくことにします。 お手数おかけしました。