アプリ版:「スタンプのみでお礼する」機能のリリースについて

タイトルの件、ご存じの方は教えて下さい。
フォルダAの中には、エクセル、ワード、PDFの複数のファイルが入ってきます
数は5~10個でランダムです。

そこから、どれでもいいので、1つだけのファイルを
Bフォルダへ移動するVBAご存じの方、教えて下さい。

出来たら、複数あるファイルから1つだけ移動する選定
基準は、更新日時が古いものを、移動したいです。

ご存じの方、宜しくお願い致します。


【フォルダAのパス】
C:\Users\2020\Desktop\フォルダA

【フォルダBのパス】
C:\Users\2020\Desktop\フォルダB

A 回答 (2件)

No1です。



>Q13061880() の名前も関係あるんですか?
関係ありません。
変更する際に、何か別の部分も変えていたりしませんか?

>どのような練習をすれば出来るようになりますか?
私自身では、ほぼVBAを使いませんし独学です。
練習と言えば、ここの質問に回答してみるくらいです。
(それなりの練習にはなっているのかもしれません)
記憶もしていませんので、この回答を作成する際にも、M$DNで調べながら作成しています。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
参考書を読んだことはありませんが、上記サイトはよく利用します。


ご質問の内容も、それだけを書けばさほどのものではないのですが、「指定フォルダが存在しない場合」、「コピー先に同名のファイルが既に存在する場合」なども考慮してゆくと、ほとんど必要ない(かも知れない)コードが増えて、思ったよりも長いものになってしまいました。
    • good
    • 1

こんにちは



まともにやると、それなりに面倒ですね。
ざっと、こんな感じでしょうか?

Sub Q13061880()
Dim f, fo, dt As Date, i As Long
Dim fn As String, ex As String, tmp As String

Const pathA = "C:\Users\2020\Desktop\フォルダA"
Const pathB = "C:\Users\2020\Desktop\フォルダB"

With CreateObject("Scripting.FileSystemObject")
If Not (.FolderExists(pathA) And .FolderExists(pathB)) Then
MsgBox "指定フォルダが存在しません"
Exit Sub
End If

dt = Now + 1
For Each f In .getfolder(pathA).Files
If f.DateLastModified < dt Then
dt = f.DateLastModified
Set fo = f
End If
Next f

If Not fo Is Nothing Then
ex = "." & .GetExtensionName(fo.Name)
fn = Left(fo.Name, Len(fo.Name) - Len(ex))
tmp = .BuildPath(pathB, fn & ex)
i = 1
While .FileExists(tmp)
i = i + 1
tmp = .BuildPath(pathB, fn & "(" & i & ")" & ex)
Wend

.MoveFile fo.path, tmp
End If
End With
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。ちゃんと動きました。
2つ質問です。

●マクロの名前を変更したら、うごきませんでした。
 Q13061880() の名前も関係あるんですか?

●こんなにすぐおいVBAはどのような練習をすれば
 出来るようになりますか?
⇒オススメの参考書とかありますか?

お礼日時:2022/07/25 22:17

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