Book内のシートSheet1,Sheet2,Sheet3を別個のCSVファイルSheet1.csv/Sheet2.csv/Sheet3.csvとして保存したいです。
過去ログを参考に以下のコードで正常に動作しました。
For Num = 1 To 3
SheetName = "Sheet" & Num
Worksheets(SheetName).Copy
ActiveSheet.SaveAs Filename:=myPath & SheetName, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close False
Next
ここで、
決められたセル範囲A1:D5に書かれたデータのみをCSVファイルとして保存する、
といったことをしたいのですが、記述の仕方を教えてください。
その範囲以外が削除されてしまっても構わないので、
その範囲以外をクリアしてから保存を実行、というコードも組んだのですが、
上書き保存されているシートに対して行うとクリアする前の状態のシートをコピーするようで、失敗しました。
Worksheets(SheetName).Copyの部分を、
Sheets(SheetName).Select
Range("A1:D5").Copy
と変えてみたのですが、マクロを実行したファイルが閉じてしまい、巧く動きません。
※myPathには保存先フォルダのパスが入ります。
また、保存の際に「同名のファイルがあるが、上書きするか?」のメッセージを出さずに強制的に上書きにする方法はありますか?
No.2ベストアンサー
- 回答日時:
こんにちは。
以前の私のコードの書き方に、良く似ていますね。特に、.Close False は、私の独特の考えで書いているからです。
ただ、私のオリジナルは、こういう書き方ではなくて、直接、CSVを作ってしまうのですが、あくまでも、掲示板で公開するためのものです。
>保存の際に「同名のファイルがあるが、上書きするか?」
は、Application.DisplayAlart =False
です。
今回は、二種類作ってみました。
TestSample1
>その範囲以外が削除されてしまっても構わないので、
>その範囲以外をクリアしてから保存を実行、というコード
TestSample2
その範囲以外が削除されてしまっては、困る場合
シート名のファイルがない場合は、その範囲のみCSVにします。
------------------------------------------------------
Sub TestSample1()
'規定の範囲のみを残す
Dim Num As Integer
Dim myPath As String
Dim SheetName As String
Dim r As Range
Const MYRNG As String = "A1:D5" '規定の範囲のみを残す
' ="" とすれば、シート全体がコピーされる
'ユーザー任意
myPath = Application.DefaultFilePath & "\"
Application.ScreenUpdating = False
For Num = 1 To 3
SheetName = "Sheet" & Num
If MYRNG <> "" Then
Set r = Worksheets(SheetName).Range(MYRNG)
End If
Worksheets(SheetName).Copy
With ActiveSheet
If MYRNG <> "" Then
.UsedRange.Clear 'シートのデータを削除
r.Copy .Range("A1") 'データのコピー&ペースト
End If
Application.DisplayAlerts = False
.SaveAs FileName:=myPath & SheetName, _
FileFormat:=xlCSV, _
CreateBackup:=False
Application.DisplayAlerts = True
End With
ActiveWorkbook.Close False
Next
Application.ScreenUpdating = True
End Sub
------------------------------------------------------
Sub TestSample2()
'規定の範囲のみを書き換える
Dim Num As Integer
Dim myPath As String
Dim SheetName As String
Dim FileName As String
Dim r As Range
Const MYRNG As String = "A1:D5" '規定の範囲のみを書き換える
'ユーザー任意
myPath = Application.DefaultFilePath & "\"
Application.ScreenUpdating = False
For Num = 1 To 3
SheetName = "Sheet" & Num
Set r = Worksheets(SheetName).Range(MYRNG)
FileName = myPath & SheetName & ".csv"
If Dir(FileName) <> "" Then
With Workbooks.Open(FileName)
r.Copy .ActiveSheet.Range(MYRNG)
End With
Else
Worksheets(SheetName).Copy
With ActiveSheet
.UsedRange.Clear
r.Copy .Range("A1")
End With
End If
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs FileName:=myPath & SheetName, _
FileFormat:=xlCSV, _
CreateBackup:=False
Application.DisplayAlerts = True
ActiveWorkbook.Close False
Next
Application.ScreenUpdating = True
End Sub
回答ありがとうございます。
わざわざ2つもありがとうございます。
後者が理想だったのでこちらを組み込んでいる最中です。
(自分にとっては)コードが長くなってきて混乱し始めました。
変数rに入っている情報はデバッグ時にカーソルを合わせても表示されないようですが、
ここにコピー範囲などが入っているものとして扱っています。
>以前の私のコードの書き方に、良く似ていますね。
過去ログを参考に、と書きましたが、
コードは載っていたもののほぼパクりなので、Wendy02さんの書いた記事だったかもしれません。
No.3
- 回答日時:
#01です。
「コピーしたシートを消す」と「元のブック名を変えない」ようにしました。また同名ファイルがある場合は警告なしで上書きしますFor Num = 1 To 3
SheetName = "Sheet" & Num
Worksheets(SheetName).Range("A1:D5").Copy
WorkSheets.Add
ActiveSheet.Paste
Application.DisplayAlerts = False
ActiveSheet.SaveCopyAs Filename:=myPath & SheetName, _
FileFormat:=xlCSV, CreateBackup:=False
ActiveSheet.Delete
Application.DisplayAlerts = True
Next
No.1
- 回答日時:
For Num = 1 To 3
SheetName = "Sheet" & Num
Worksheets(SheetName).Range("A1:D5").Copy
WorkSheets.Add
ActiveSheet.Paste
ActiveSheet.SaveAs Filename:=myPath & SheetName, _
FileFormat:=xlCSV, CreateBackup:=False
Next
ActiveWorkbook.Close False
ではどうでしょうか。「マクロを実行したファイルが閉じてしまい」はFor~Nextの中でCloseしているからです
「同名のファイルがあるが、上書きするか?」のメッセージを出さない方法として
Application.DisplayAlerts = False
ThisWorkBook.SaveAs …
Application.DisplayAlerts = True
があります。
この回答への補足
回答ありがとうございます。
求めていた部分は正常に動作しました。
ただ、
・実行後、Book内にSheet4~6というシートが残ってしまう
・実行後、Book名がSheet3.csvになってしまう
という新たな問題が発生してしまいました。
最初に挙げたコードでFor~Nextの中でCloseしているのは、
CSVファイルの保存に使ったシートSheet4~6を閉じるつもりで配置したものです。
・Book内にシートを増やさない
・マクロ実行後、マクロを実行したBookを開いている状態に
この2点、なんとかなるようでしたらよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- その他(プログラミング・Web制作) python文字化けエラーが発生しているようです 3 2022/04/13 19:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つのファイルの同...
-
Excelで「変更を保存しますか」...
-
大量のフォルダからひとつのフ...
-
stable diffusionのインストー...
-
コマンドプロンプトのエラーに...
-
コマンドプロンプトの「%1」と...
-
ホームページのリンクからプロ...
-
テキストファイルのタブをカン...
-
画像・動画データを日付毎のフ...
-
テキストファイルのファイル名...
-
exeファイルをデータ転送サービ...
-
拡張子を元に戻す
-
CSSを1ページに1枚作るのって変...
-
バッチファイルの内容を表示さ...
-
エクセル フォルダの画像を画...
-
pcゲームの優先度の設定につい...
-
Windows10にデュアルブートでXP...
-
バッチファイルからVBAに引数を...
-
テキストファイルを直接置換す...
-
ある文字列を含む行の抽出
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つのファイルの同...
-
Excelで「変更を保存しますか」...
-
OpenOfficeでLotus123は開かない?
-
間違えて上書き保存した場合の...
-
slk拡張子のエクセルファイルを...
-
WinCDRで「***.iso」ファイルか...
-
MacのQuarkデータをWinのInDesi...
-
実行b可能な限界を超えています...
-
サポートの終了したExcel.xlsフ...
-
AccessでクエリしたデータをExc...
-
CSVデータの数値の表示
-
フォトショップで作成したpsdデ...
-
《エクセル》マクロとセルのリ...
-
2種類のエクセルファイルから...
-
jpgファイルをaiファイルに戻す
-
CSVファイルををリネームしてxl...
-
画像ファイルのjpegファイルをe...
-
上書き時間を短縮する方法はあ...
-
コマンドプロンプトの「%1」と...
-
バッチでテキストファイルから...
おすすめ情報