【VBA】任意のファイルの一括操作方法

このQ&Aのポイント
  • VBAを使用して、任意のファイルを一括操作する方法について質問します。
  • 指定のフォルダ内のExcelファイルを別のフォルダにコピーし、ファイル名やセルの値を変更する方法を知りたいです。
  • 条件が単純で繰り返し処理が必要なので、一括で処理するためのコードがあれば教えてください。
回答を見る
  • ベストアンサー

【VBA】任意のファイルの一括操作について

こちらの識者の方々にはいつもお世話になっております。 VBAで教えていただきたいことがあり質問いたします。 C:\aaa\に下記のexcelファイルがあります。 【見本】東京.xls 【見本】埼玉.xls 【見本】神奈川.xls 【見本2】千葉.xls これを 1.C:\bbb\へコピーし、 2.ファイル名の【見本】と【見本2】の文字列を削除し、 3.拡張子の前に本日の日付をyyyymmdd形式で追加し、 4.それぞれのexcelファイルのsheet1のa1セルにyyyymmdd形式で本日の日付を入力する。 というマクロを組みたいと思っています。 一つ一つnameステートメントでファイル名を変更したり、 open→Range("A1").Value→closeとやってもできるんですが、 条件もすこぶる単純ですし、一括でできるようなコードはないかと思っています。 最終的な期待するファイルのフルパスは↓のようになります。 C:\bbb\東京20130426.xls C:\bbb\埼玉20130426.xls C:\bbb\神奈川20130426.xls C:\bbb\千葉20130426.xls C:\bbb\へコピーするところまでは調べてできたのですが、 その先がこれというものを見つけられず。 どなたかご教示いただけないでしょうか。 宜しくお願い致します。 Sub Test() Dim objFSO As FileSystemObject Const cnsSOUR = "C:\aaa\*.xls" Const cnsDEST = "C:\bbb\" Set objFSO = New FileSystemObject objFSO.CopyFile cnsSOUR, cnsDEST, True Set objFSO = Nothing End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 お示しの作業順序ではなくて、下記のようなことでお考えになってみてはいかがでしょうか? 1)C:\aaa\にある「下記」のexcelファイルを開く。 2)sheet1のa1セルにyyyymmdd形式で本日の日付を入力する。 3)ファイル名の【見本】と【見本2】の文字列を削除し、 4)拡張子の前に本日の日付をyyyymmdd形式で追加し、 5)C:\bbb\に保存する。 Sub Macro1()     Dim myDate As String     Dim myPath As String     Dim myName1 As String     Dim myBook As Workbook     Dim myName2 As String     myDate = Replace(Date, "/", "")     myPath = "c:\aaa\"     myName1 = Dir(myPath & "*.xls")     Do While myName1 <> ""         If myName1 Like "【見本*】*.xls" Then             Set myBook = Workbooks.Open(myPath & myName1)             myBook.Sheets("Sheet1").Cells(1, 1) = myDate             myName2 = "C:\bbb\" & Replace(Mid(myName1, InStr(myName1, "】") + 1), ".xls", myDate & ".xls")             myBook.SaveAs myName2             myBook.Close         End If         myName1 = Dir     Loop End Sub

rihitomo
質問者

お礼

なるほど! 先にFileSystemObjectを使ってフォルダ内の.xlsファイルを全てコピペするのを見つけたので、提示した順番に拘ってしまいました。 見方を変えるとは正にこのことですね。 なぜこれで期待する動作になるのか自分でも調べてみたいと思います。 ありがとうございました。

関連するQ&A

  • Excel VBAでフォルダ作成及び一括移動

    特定のフォルダの中身を別フォルダに一括移動させるVBAを作りたいと思っています。 実行の都度、移動先のフォルダ内に年月日時分秒のフォルダを作成して、そこに ファイルを移動させたいのですが、フォルダの作り方がわかりません。 固定フォルダで一括移動はいろいろなサイトを回って以下のような感じでできたのですが。 Const cnsSOUR = "C:\Users\abc\Desktop\SAMPLE\*.*" Const cnsDEST = "C:\Users\abc\Desktop\SAMPLE2\" Dim objFSO As FileSystemObject Set objFSO = New FileSystemObject ' FSOによるファイルコピー objFSO.MoveFile cnsSOUR, cnsDEST Set objFSO = Nothing お詳しい方ご教授願います。

  • ExcelVBAでセルの値利用してフォルダ間の移動

    フォルダ「A」から「B」への移動は以下の内容で実施できることまではわかりましたが、移動させたいファイルはセルA1からA10にあるものを参照して計10個のファイルを「A]から「B」に移動したいのです。(ファイル名は先頭の4文字のみが一致すればそれ以下の文字列はワイルドカード「*」で実施したいのです。 以下の 内容で ファイル名「1111*」となっている部分に セルのA1からA10にあるものを自動で取得させたいのです。 Sub 番号一致の移動() '一つ目 Const cnsSOUR = "C:\Users\aaa\Desktop\A\1111*.xlsx" Const cnsDEST = "C:\Users\aaa\Desktop\B\" Dim objFSO As FileSystemObject Set objFSO = New FileSystemObject objFSO.MoveFile cnsSOUR, cnsDEST Set objFSO = Nothing End Sub

  • Excel vba ファイルの移動について

    excelのvbaでファイルを管理するツールを作り始めました。vba自体初めて間もないのですが、ファイル移動に関してわからなかった点がありますので、質問させていただきます。 インターネットで調べたところ、固定のファイルを移動及びファイル名の変更をする場合には以下の記述でできそうなんですが、 ************************************************ Option Explicit Private Const cnsSOUR = "C:\AAA\SAMPLE1.txt" Private Const cnsDEST = "C:\BBB\SAMPLE2.txt" Sub MOVE_SAMPLE1() Name cnsSOUR As cnsDEST End Sub ************************************************** この"C:\AAA\SAMPLE1.txt"及び"C:\BBB\SAMPLE2.txt"を 変数で記述するとエラーになってしまい、プログラムが通りません。 何かいい方法がございましたら、ご教授ください。 過去の質問を調べてもいまいちわかりませんでした。

  • CSVファイル

    CSVファイルを1行ずつ比較して読み込み、一致した行を別ファイルに記述していこうと思っています。 現在、csvファイルを読み込む所まで出来ています。 比較して別ファイルに記述する方法を教えて下さい。 もしくはアドバイスください。 【ファイルの中身】 "09/09/2005 0:00:00,aaa,bbb,ccc" 【比較条件】 当日の日付を取得し、年月日だけで比較する Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") Do while objFile.ReadLine <> ""         'IF文を記述(条件:日付)        '別ファイルに記述する Loop objFile.close Set objFileSystem = Nothing Set objFile = Nothing

  • 【Excel VBA】古いファイルを削除する

    Excel2003を使用しています。 ファイルを保存する際に、ファイル名の後に日付を入れて保存したく、下記のようにコードを書きました。 それで、保存するときに、古いファイルは削除するようにしたいのですが、どのようにコードを追加すればいいでしょうか? Killを使用するのかな~?とは思っているのですが。。。 よろしくお願いします。 -------------------------------------------------- Sub 保存()   ActiveWorkbook.SaveAs _    "C:\○○\××" & Format(Date, "yyyymmdd") & ".xls" End Sub

  • 【大至急】excel2003 VBAマクロの質問

    excel2003でのVBAマクロを作っているのですが、いまいちよくわからないのです 下記条件を満たすサンプルコードのご教示をお願いします。 ■初期状態 仮にフォルダ、ファイル配置が下記の通りだとします C:\マクロ.xls C:\template.xls C:\aaa\ C:\bbb\bbb_test.xls C:\ccc\ . . . C:\nnn\ ■動作要件 (1)マクロ.xlsは自分のファイルパスを検索する (2)マクロ.xlsと同じフォルダにあるサブフォルダ配下に、各々フォルダ名_test.xlsというファイルを作成する (3)上記(2)で.xlsファイルを作成するとき、template.xlsをコピーして作成する (4)既にサブフォルダ配下に***_test.xlsファイルが存在する場合は作成しない <マクロ実行後の状態> C:\マクロ.xls C:\template.xls C:\aaa\aaa_test.xls ←template.xlsからコピー作成 C:\bbb\bbb_test.xls ←ファイル作成、上書きはしない C:\ccc\ccc_test.xls ←template.xlsからコピー作成 . . . C:\nnn\nnn_test.xls ←template.xlsからコピー作成 (5)上記(1)-(4)を、フォルダがなくなるまで繰り返す 以上です。よろしくお願いします。

  • 複数のファイルコピー

    初めて質問をいたします。 VBAの勉強中なのですが、複数のフォルダの中にある特定のファイルを、別のフォルダにコピーをしたいのですが、どのようにしたら良いのでしょうか。 例えは、C:\aaa\bbb\cccの中へ C:\aaa\bbb\ddd\eee\fff\Jggg.xls、 C:\aaa\bbb\ddd\hhh\iii\Jjjj.xlsをコピーする感じです。 どのようにしたら、可能でしょうか。 C:\aaa\bbbフォルダ以下全てのフォルダの中から、「J」の付くxlsファイルを全てコピー等出来るのでしょうか。 よろしくお願いします。

  • VBAでファイルを消したい

    こんばんわ! VBAでエクセルファイルをバックアップしながら使用しているのですが、10個以上ファイルが溜まったら一番古いものを消したいです。 途中まではできているのですが、古いファイルを選択する方法が分かりませんToT 途中までのソースを乗せますので、アドバイスの程よろしくお願いいたします。 ================== Private Sub backup_bot_Click() Dim Path As String, WSH As Variant Dim fc As Long Dim fn As String 'マイドキュメントにバックアップ Set WSH = CreateObject("WScript.Shell") Path = WSH.SpecialFolders("MyDocuments") & "\test" If Dir(Path, vbDirectory) = "" Then MkDir (Path) End If 'ファイルコピー FileCopy "c:test_date\aaa.xls", Path & "\aaa" & Format(Now, "yyyymmdd") & ".xls" 'ファイル数確認 fn = Dir(Path & "\aaa*.xls") Do While fn <> "" fc = fc + 1 fn = Dir() Loop '10件以上消去 If fc > 10 Then 'ここが分かりません! End If End Sub ================== あ~ちなみにoffice2003エクセルを使用しています。 XP以降のOSで動かしたいです!

  • excelマクロ 別ファイルの特定列をコピーしたい

    C:\testの配下にexcelファイル「aaa.xls」「aaa_yyyymmdd.xls」「bbbxls」があります。 「aaa_yyyymmdd.xls」は「aaa.xls」のバックアップファイルです。 又、「bbbxls」にマクロを記述しようと思います。 ☆処理内容☆ 「aaa.xls」「aaa_yyyymmdd.xls」が開いていない状態で、「aaa.xls」のシート「sheet1」内の E列をコピーして「bbbxls」のシート「sheet3」のA列に貼り付け。 「aaa_yyyymmdd.xls」のシート「sheet1」内の E列をコピーして「bbbxls」のシート「sheet3」のB列に貼り付け。 その後、張り付けたA列を正としB列と比較して、差異があった場合はB列の差異があった部分の セルに色つけをした後、「aaa_yyyymmdd.xls」をC:\test:\oldフォルダに移動する。 上記のようなexcelマクロを作成中なのですが、できなくて困っております。 有識者の方、助けを貸してください。 よろしくお願い致します。

  • ExcelVBAでセルに入力された値をみて複数のファイルコピーするマクロ

    VBA初心者です。関連する質問はみたのですが、組み合わせが他と違い うまくできませんでした。 EXCELのマクロを使って、それぞれ格納場所が異なる2つのエクセルファイル(格納元D:\AAA\123A.xlsと格納元D:\BBB\123B.xls)をコピーして指定のフォルダ(格納先D:\ZZZ\)内へ2つファイルを保存したいのですが・・ Private Const cnsSrc = "D:\AAA\123A.xls" Private Const cnsDst = "D:\ZZZ\123A.xls" Sub COPY_Func() ' ファイルをコピー FileCopy cnsSrc, cnsDst End Sub まで考えたんですが 複数のファイルまでコピーさせることができませんでした。 また、それぞれのフォルダ内には○○○A.xlsと○○○B.xlsが複数あるため コピーするファイル名は選択させたく、sheet1のA1セルに入力された"123"を みて123A.xls123B.xlsをコピーさせたいのですが、可能でしょうか? 宜しくお願い致します。

専門家に質問してみよう