ここから本文です

VBAを始めたばかりで申し訳ないのですが・・・ やりたいことがうまくExcelのVBA...

ben********さん

2019/3/1723:14:50

VBAを始めたばかりで申し訳ないのですが・・・

やりたいことがうまくExcelのVBAで組むことがきません。
どうかご教授ください。

【やりたいこと】
フォルダーに下記のファイルがあります。
・2019データ
・2018データ
☆20190101データ
☆20190101データ

「20190101データ」を「2019データ」に上書き保存。
「20180101データ」を「2018データ」に上書き保存。
をしたいのですが、
☆のファイルは2019の後ろの4桁が毎日変わります。
前日の数字だったり、前々日の数字だったりとランダムです。

ワイルドカードを使ってやってみたのですが、
「ファイル名がみつかりません」というエラーが出てしまい、できませんでした。

変数を使わなければいけないのでしょうか?
変数を使う場合は、その記述の仕方も教えていただけないでしょうか?

お願い致します。

閲覧数:
99
回答数:
3
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2019/3/1723:52:33

とりあえず、「上書き保存」のように一旦開くのではなく、開かずに上書きコピーする例です。

Sub sample()
Dim xFile As String, xNew As String, xPref As String, xLen As Long
Const cPath As String = "C:\HogeHoge\Hoge\"
xFile = Dir(cPath & "*.xlsx")
Do While xFile <> ""
xPref = Val(xFile)
xLen = Len(xPref)
If xLen > 4 Then
xNew = Left(xFile, 4) & Mid(xFile, xLen + 1)
FileCopy cPath & xFile, cPath & xNew
End If
xFile = Dir()
Loop
End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

lgk********さん

2019/3/2206:40:15

20190101データ、20190102データ、の様に、複数データがあった場合、ファイル名の大きい方(この場合、20190102データ)を残せばいいですね。
この場合、コマンドプロンプトのコピーを使った方がよくないですが。これならワイルドカードが使えます。
2018、2019のみコピーしたいなら、Macro1の様にして、
全てやりたいならMacro2を使えばいいです。
'
Sub Macro1()
'
    ChDrive "D"
    ChDir "D:\Test"
'
    Shell "Cmd /C Copy 2018*データ.xls* 2018データ.xls*"
    Shell "Cmd /C Copy 2019*データ.xls* 2019データ.xls*"
End Sub
'
Sub Macro2()
'
    ChDrive "D"
    ChDir "D:\Test"
'
    Shell "Cmd /C Copy *データ.xls* ????データ.xls*"
End Sub

tad********さん

2019/3/1812:49:17

『「20180101データ」を「2018データ」に上書き保存』の意味を確認したいのですが、

「2018データ」を削除して「20180101データ」を「2018データ」という名前で保存する、

で合ってますか?

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる