Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : Excel 2016)
ファイル名の日付から最新のものだけを操作
投稿日時: 19/04/07 10:44:47
投稿者: r6023

お世話になります。
 
この度、仕事で以下のマクロを使用したいと考えております。
 
【実施したいこと】
特定のフォルダ(C:\FMT\コピー元)からフォルダ(C:\FMT\データ)にファイル名で最新の日付のものを識別しコピーする
 
【状況】
・C:\FMT\コピー元 に【YYYYMMDD】在庫.xlsm または 修正【YYYYMMDD】在庫.xlsm というファイルが数個入っている
 
・この中からYYYYMMDDの部分で最新のものを識別しコピー
 
・コピー後のファイル名は在庫.xlsmで統一(日付不要)
 
以上、お手数をおかけしますがお力をお貸しいただきたく存じます。
宜しくお願いいたします。

回答
投稿日時: 19/04/07 15:24:05
投稿者: WinArrow
投稿者のウェブサイトに移動

説明文から推察すると
コードの作成依頼
と受け取られてしまいます。
 
自分で、どこまでコードが作成できるのでしょうか?
 
 
下記を参考にトライしてみましょう
 
(1)フォルダの中のファイルを探す
には、Dir関数がよいでしょう
 Filename = Dir(フォルダ名 & "\*在庫.xlsm")
 Do 〜 Loop の中で目的のファイルを絞り込みます。
 
(2)ループを抜けたら
  FileCopy メソッドで複写。

投稿日時: 19/04/07 16:29:44
投稿者: r6023

WinArrow さんの引用:
説明文から推察すると
コードの作成依頼
と受け取られてしまいます。
 
自分で、どこまでコードが作成できるのでしょうか?
 

 
WinArrow様
 
ご教示いただきまして有難うございます。
 
言葉足らずで申し訳ございませんが、ほぼ初心者であり
コード作成までお手伝いいただけると大変助かります。。。
 
何卒宜しくお願いいたします。

回答
投稿日時: 19/04/07 19:45:57
投稿者: もこな2

r6023 さんの引用:
言葉足らずで申し訳ございませんが、ほぼ初心者であり
コード作成までお手伝いいただけると大変助かります。。。
横からですが、とりあえず、さきに利用規約に目を通すことをおすすめします。
 
Q&A 掲示板ご利用上のお願い さんの引用:
■禁止事項
コード制作依頼
「●●●を実行するようなマクロを作りたいのですが」「●●●をする方法を教えてください」といった、コード制作依頼ともとれるような質問はおやめください。

 
とはいえノーヒントで全部作るというのもキツイと思うのでWinArrowさんのアドバイスを参考に、Dir関数を使って作業用のシートにファイル名一覧を出力するという練習から始めてはどうでしょうか?
Sub test()
    Dim i As Long
    Dim MyFile As String
    
    Stop ' ←ブレークポイントのかわり
    
    MyFile = Dir("C:\FMT\コピー元\*.xls?")
    Do Until MyFile = ""
        i = i + 1
        
        Worksheets(1).Cells(i, "A").Value = MyFile
        
        MyFile = Dir()
    Loop

End Sub

回答
投稿日時: 19/04/07 20:02:58
投稿者: simple

特定のフォルダ内のファイル名を順次取り出す部分については、
こちらのサイトの「即効テクニック」というコーナーの下記記事を参考にしてください。
「フォルダ内のファイル一覧を取得する」
https://www.moug.net/tech/exvba/0060001.html
 
上記を使って、ファイル名をbufという変数に取り込んだものとします。
そのあとの最新のファイルを取得するところは、
例えばこんな感じでしょう。

   '年月日部分を取り出す
    If Left(buf, 2) = "修正" Then
        yyyymmdd = Mid(buf, 4, 8)
    Else
        yyyymmdd = Mid(buf, 2, 8)
    End If
    
    '最新の、つまり最大の年月日であるかを判定し、そのファイル名を保持する
    If CLng(yyyymmdd) > latest Then
        latest = CLng(yyyymmdd)
        latest_filename = buf
    End If
こんな風にすれば、
変数latest_filenameに
日付が最新のファイル名が得られます。
 
あとは、FileCopyを使って、
FileCopy コピー元のファイルのパス,コピー先のファイルのパス
のようにすれば終わりです。
 
確認が必要なのは、同一日付で"修正"の有り無しが2つあるということはないんですか?
その時はどうするのですか?"修正"付きだろうと思いますが、
そうした心配は無しですか?
 
--------------------------------
こちらのサイトは、株式会社 オデッセイ コミュニケーションズ社の方針で、
丸まるの作成依頼は遠慮して頂いているものと思います。
「Q&A掲示板ご利用上のお願い」をお読み下さい。
 
まるまる依頼するのではなく、
できているところまでを一部分でも良いので提示してもらい、
具体的な不明点や今後の方針を助言することで、
ユーザーのスキルアップに貢献できると考えているものと思います。
そのほうが効果が大きいと考えているものと思います。
 
トライしてみてください。
また上記で不明な点は、具体的に質問して下さい。遠慮無くどうぞ。
 
# もこな2さんからの発言と被ってしまっていますが、修正せずに作成済みのものをアップします。
# 了解下さい。

回答
投稿日時: 19/04/15 07:21:41
投稿者: simple

よく読んで頂けば、ほとんどまるまるの回答をしているのと実質同じ事です。
つなげて、固有名詞部分を修正するだけなんですがねえ。
そういうこともしたくない、ということなんでしょうか。
少なくとも、質問したまま放置しないようにしていただければと思います。

トピックに返信