質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1174閲覧

【VBA】ファイル名の保存について

g20tm016

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2021/08/25 13:23

前提・実現したいこと

ファイル名を保存するのをセルに示されている日付にしたいです.

ActiveWorkbook.SaveAs "C:\Work\ " & Format(ws.Range("A4"), "yyyy\年mm\月dd\日") & ".xlsx"
の部分で下記のようなエラーが生じされます.
解決策をご教授頂きたいです.

発生している問題・エラーメッセージ

実行時エラー9 インデックスが有効範囲にありません vba

Sub データ整理()

Dim i As Long
i = 1

Do Until i > 3

Dim j As Long
j = 4 + (i - 1) * 144
Dim k As Long
k = 147 + (i - 1) * 144

'//1日ごとのデータコピー
ThisWorkbook.Activate
Range(Cells(1, 1).Address & ":" & Cells(3, 28).Address & "," & Cells(j, 1).Address & ":" & Cells(k, 28).Address).Select
Application.CutCopyMode = False
Selection.Copy
'//新しいブックを製作
Set wk = Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
'//日付と時刻の修正
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormatLocal = "yyyy/m/d"
Range("B4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormatLocal = "h:mm;@"
Range("A4").Select
Application.CutCopyMode = False

'//名前を付けて保存
With CreateObject("Scripting.FileSystemObject")
If Not .FolderExists("C:\Work") Then .CreateFolder "C:\Work"
End With
Dim ws As Worksheet
Set ws = Sheets("Sheet1")
ActiveWorkbook.SaveAs "C:\Work\ " & Format(ws.Range("A4"), "yyyy\年mm\月dd\日") & ".xlsx"←ここでエラー
ActiveWorkbook.Close

i = i + 1 Loop

End Sub

ソースコード

試したこと

なぜか一度だけうまくいきました.けど2回目以降エラーが生じました.

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2021/08/25 17:22

> 【VBA】ファイル名の保存について どこに保存するのだろうと思ったら、日本語が間違ってますね。 「保存するファイル名について」の間違いのようですね。
guest

回答2

0

Format関数を修正してみました。

VBA

1ActiveWorkbook.SaveAs "C:\Work\" & Format(ws.Range("A4").Value, "yyyy年mm月dd日") & ".xlsx" 2'ActiveWorkbook.SaveAs "C:\Work\ " & Format(ws.Range("A4"), "yyyy\年mm\月dd\日") & ".xlsx"

投稿2021/08/25 13:51

TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

g20tm016

2021/08/25 13:55

回答ありがとうございます。すみません,コードを変更しても同様のエラーが表示されます,,
TanakaHiroaki

2021/08/25 14:01

そうですか。 ws.Range("A4").Value や Format(ws.Range("A4").Value, "yyyy年mm月dd日") の値を確認してみてください。
g20tm016

2021/08/25 14:06

ご返信ありがとうございます。値を確認したのですが、A4のセルには日付があり問題ないと思われます。
TanakaHiroaki

2021/08/25 14:08

ステップイン実行し、イミディエイトウィンドウでDebug.Printで確認してみてください。 Debug.Print ws.Range("A4").Value
g20tm016

2021/08/25 14:34

ステップインを実行した結果,Set ws = Sheets("Sheet1")で上記のようなエラーが確認できました。こちらの不手際で申し訳ないのですが、どこに問題があるかわからなくなってしまいました。何かアドバイスいただけますと幸いです。
guest

0

ベストアンサー

どちらが正しいかはわかりませんが、以下のいずれかにしてみてはいかがでしょうか。

VBA

1 Set ws = ThisWorkbook.Sheets("Sheet1") 2 Set ws = wk.Sheets("Sheet1")

投稿2021/08/25 22:44

jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

g20tm016

2021/08/26 04:44

助かりました.本当にありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問