dポイントプレゼントキャンペーン実施中!

タイトルの件、やりたい事は

●1つの原本ファイルを
●名前を明日の日付にして
●3つのフォルダ【あ、い、う】へコピーしたいです

各フォルダパスは下記のとおりです。
1つのファイルを、名前を変更して、別フォルダに
コピーするコードは分かりました。

名前は、明日の日付の名前にしたいです。
今回事例ですと、本日12月30日とし、ファイル名前は
明日の日付⇒20221231 とししたいです。

ご存じの方、いらっしゃいましたら、ご指南
宜しくお願い致します。


【動くコードです】⇒1つの原本ファイルを1つのあフォルダにコピーは出来ます
Sub ファイルコピ()


FileCopy "C:\Users\2020\Desktop\実験\あ.xlsx", "C:\Users\2020\Desktop\実験\あ\20221231.xlsx"

End Sub




【要件】
実行する日付:20221230
⇒1つのファイルを3つのフォルダへ明日の日付に名前を変更して
ファイルコピーしたいです


【原本ファイル】
C:\Users\2020\Desktop\実験\原本.xlsm


【あフォルダ】
C:\Users\2020\Desktop\実験\あ\20221231.xlsm


【いフォルダ】
C:\Users\2020\Desktop\実験\い\20221231.xlsm



【うフォルダ】
C:\Users\2020\Desktop\実験\う\20221231.xlsm

A 回答 (5件)

> 【動くコードです】⇒1つの原本ファイルを1つのあフォルダにコピーは出来ます



日付が固定だから、今日の日付から明日の日付を作成するようにしたい?
手元にExcel無くて確認できないけど、

Dim dt as Date
Dim fn as String

' 今日の日付
dt = Now()
' 明日の日付に変更
dt = dt + 1

' ファイル名を生成
fn = Format(dt, "yyyymmdd") & ".xlsm"

' ファイルコピー
FileCopy "C:\Users\2020\Desktop\実験\あ.xlsx", "C:\Users\2020\Desktop\実験\あ\" & fn
FileCopy "C:\Users\2020\Desktop\実験\あ.xlsx", "C:\Users\2020\Desktop\実験\い\" & fn
FileCopy "C:\Users\2020\Desktop\実験\あ.xlsx", "C:\Users\2020\Desktop\実験\う\" & fn

とか。
    • good
    • 0
この回答へのお礼

ありがとうございます。やりたかった事ができました。
ちなみに

2回実行すると→すでに同じファイルがあります みたいな
メッセージをだせませんでしょうか。

今は、同じファイルや上書きはされずに、何も
表示されません

お礼日時:2022/12/13 22:43

こんにちは


ほぼ解決に近いと思いますが・・疑問があるのでコメントをします
初めに謝ります 水を差すような回答でごめんなさい

暗黙の共通認識がないと成立しないような気がして・・
FileCopy "C:\Users\2020\Desktop\実験\あ.xlsx", "C:\Users\2020\Desktop\実験\あ\20221231.xlsx"
出来ました・・・これは理解できます(マクロ実行ブックでないから)

>やりたかった事ができました。
腑に落ちないのですが・・・考えすぎかな?

【要件】にある出力ファイルは.xlsmです
と言う事はどのファイルが元ファイルなのでしょう?
もし、あ.xlsxならば.xlsmにする必要が無いように思います(理由があるかも知れません)
原本.xlsmでしょうか? もし原本.xlsmとなると
VBA実行ブックを原本.xlsmにすることは出来ませんので
(FileCopyは開いているファイルを対象に出来ないはず) 
他のVBAブックが必要になりますね
とすると元ファイルの存在確認なども必要になりますね・・
元ファイルを作成する等で対応も出来るけど要件にないからどうか・・
もちろん行先ファイルの同名チェックもそうですがね
開いているファイルをFileCopyできたら記憶違いなので忘れてください

まあ、出来ているとの事なのでやっぱり考えすぎですね

実験でしょうから良いのですが、
回答や参考・解説サイトでは判り難くなるので定数を使っていますが
実務的なコードを考えると出来るだけ 不特定(変更される可能性の高い)
名前などを定数にする事はあまり賛成できないです
だって、変わる度にマクロを書き直す事になるので‥
なので、定数にするならコード内で判り易くConst宣言するとか
シートセルを活用して参照するとか、変数としてCreateObjectなどで取得するのが良いと思います(なんとなく記憶して頂ければ、すぐに使えなくなるVBAを書かなく済む可能性が上がると思います)

すみません 長文になってしまいました
    • good
    • 0

>2回実行すると→すでに同じファイルがあります みたいな


>メッセージをだせませんでしょうか。

そのメッセージを表示したした後、どのようにされたいのでしょうか。
①そのファイルのコピーをスキップし、次のファイルのコピーを行う。
②そのファイルのコピーを行う。(ファイルは上書きされる)
③処理を打ち切る。(そのファイルも、以降のファイルもコピーされない)

等が考えられます。
    • good
    • 0

No1です。



>2回実行すると→すでに同じファイルがあります みたいな
>メッセージをだせませんでしょうか。
ファイルコピーする前に、保存先のファイルが既に存在しているかをチェックすれば可能です。

ファイルの存在はDIR関数を利用すれば、チェックできます。
https://learn.microsoft.com/ja-jp/office/vba/lan …


ファイルのパスは基本的に文字列ですので、コピー元やコピー先を変えたい場合には、文字列計算でパスを作成することで、実際の内容を変えることも可能です。
例えば、変数 SourceFile, DestFile にそれぞれコピー元、コピー先のフルパスが入っているとして、
 FileCopy SourceFile, DestFile
を実行すれば、その時の変数の内容に応じた処理がされることになります。
    • good
    • 0

こんばんは



>1つのファイルを、名前を変更して、別フォルダに
>コピーするコードは分かりました。
わかったのなら、それを応用しましょう。

コピー先を変えて繰り返せば良いのでは?
1行コードになっているみたいですから、3か所に保存したいのなら、3行書けば良いだけですけれど・・

繰り返しのようなものなので、ループしても良いですけれど、3か所程度だとベタで記述したほうが簡単です。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

3回同じことをかけばよいだけですね。
できました。ありがとうございます。

お礼日時:2022/12/13 22:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!