• ベストアンサー

エクセルマクロ 指定したフォルダ内のファイルをコピーしたい

エクセルのセルに入力されたフォルダを参照して、 wordファイルを別のフォルダにコピーするようなマクロがあれば、 ぜひ教えてください。 ・A1には、="パス名"&A2 と元々入力してあり、  A2には実行する前に"dd.mm"と入力。 ・このdd.mmフォルダから、yyyyフォルダに*.docをコピー。 A1セルを参照する方法がわかればいいのですが、何分初心者なもので ご指導いただければと思います。

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

  • ベストアンサー
  • kuma3f
  • ベストアンサー率63% (28/44)
回答No.2

次のような方法はいかがでしょうか。 マクロにコードを記述して実行します。 A2、B2のセルを選択して右クリック  ↓ 「セルの書式設定」をクリック  ↓ 「表示形式」で「文字列」を選択し「OK」をクリック (フォルダ名が月日になると思われるので02.09だと 2.09になってしまうためです。)  ↓ A1に「="パス名"&A2」、A2に「mm.dd」、 B1に「="パス名"&B2」、B2に「yyyy」を入力 (※パス名はの後ろには必ず\を付けてください。   例:C:\TEST\ )  ↓ メニューバーの「ツール」→「マクロ」→「マクロ」をクリック  ↓ マクロのダイアログが表示されたらマクロ名に 自由に名前を入力してください。(例:WORDCOPY)  ↓ 名前を入力しましたら、「作成」をクリック  ↓ Microsoft Visual Basicの画面が開きますので Sub WORDCOPY()の下に次のコードをコピーして 貼り付けてください。 Dim ファイル名 As String 'ファイル名 Dim パス名1 As String 'コピー元パス名 Dim パス名2 As String 'コピー先パス名 パス名1 = Range("A1") & "\" ' パスを設定します。 パス名2 = Range("B1") & "\" ' パスを設定します。 ファイル名 = Dir(パス名1 & "*.doc") ' ←最初のファイル名を返します。 Do While ファイル名 <> "" ' ←ファイル名を全て見るまで繰り返す FileCopy パス名1 & ファイル名, パス名2 & ファイル名 '←ファイルのコピー ファイル名 = Dir ' ←次のファイル名を返します。 Loop Range("A1").Select MsgBox "コピーしました。" '****コピー貼り付けはここまで **** Microsoft Visual Basicの画面を×で閉じます  ↓ Excel画面のメニューバーの「ツール」→「マクロ」→「マクロ」をクリック  ↓ 先ほど付けたマクロを選択して「実行」をクリック  ↓ dd.mmフォルダから、yyyyフォルダに*.docがコピーされていると思います。

usakumya
質問者

お礼

ご丁寧な回答ありがとうございます! こちらの方法で、めでたく解決しました。 本当にありがとうございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >・このdd.mmフォルダから、yyyyフォルダに*.docをコピー。 dd.mm =A2 が、「送り元」で、A1=yyyy が「送り先」ですか? その順番は、必ず確認してくださいね。 エラーチェックをいくつか施しました。 以下は、なるべく、標準モジュールに設定してください。 Sub TestMacro1()   Dim srcFolder As String   Dim dstFolder As String   'フォルダ名チェック   '送り先   dstFolder = Range("A2").Value   If Right(dstFolder, 1) <> "\" Then dstFolder = dstFolder & "\"      '送り元   srcFolder = Range("A1").Value   If Right(srcFolder, 1) <> "\" Then srcFolder = srcFolder & "\"      If srcFolder = "" Or dstFolder = "" Then Exit Sub      'ディレクトリチェック   If Dir(srcFolder, vbDirectory) = "" Then     MsgBox srcFolder & " が見つかりません", 48     Exit Sub   End If   If Dir(dstFolder, vbDirectory) = "" Then     MsgBox dstFolder & " が見つかりません", 48     Exit Sub   End If   If Dir(srcFolder & "*.doc") = "" Then     MsgBox "送り元には、Wordドュキメントがありません。", 48     Exit Sub   End If          With CreateObject("Scripting.FilesystemObject")     .Copyfile srcFolder & "*.doc", dstFolder   End With End Sub

usakumya
質問者

お礼

ご回答ありがとうございます! こちらの方法でも私のやりたいことができ、1つの問題に対して 複数の方法があるのだと実感しました。 これかも勉強していきたいと思います。 ありがとうございました。

回答No.1

あらかじめ、フォルダは作成してあるものとして。 yyyyフォルダは仮にC:\yyyyとしてあります。 ----------------- Sub FolderCopy() 'A1 を取得します OrgFolder = Range("A1") 'Copy先 をセットします CopyFolder = "C:\yyyy" 'フォルダオブジェクトを取得 Set SourcFolder_Object = CreateObject _ ("Scripting.FileSystemObject").GetFolder(OrgFolder) 'OrgFolder内の全ファイルをCopy先にコピー 'サブフォルダも対象になります SourcFolder_Object.Copy CopyFolder MsgBox "完了しました" End Sub

usakumya
質問者

お礼

ご回答、ありがとうございます! さっそく試してみたところ、yyyyフォルダ内に新たにA1のフォルダコピーが作成されました。 ファイルだけをコピーすることはできないでしょうか・・・? よろしくお願いします!

関連するQ&A

  • Excel97の日付の書式設定

    現在Excel97で日付入力をしたいのですが、 最終的に演算に使用する日付で yyyy/mm/ddとyyyy/mmどちらでも入力できる書式設定を探しています。 yyyy/mm/ddの指定にするとyyyy/mmと入力してもyyyy/mm/01となってしまいます。 yyyy/mmのセルとdd専用のセルを別に作ると、ddを入力した時に 閏年のエラーチェックなどがかけられないので演算部分(1年後該当日前日の指定等)がうまく働きません。 いい方法がありましたら教えてください。

  • Excelマクロで不要な行を繰り返し処理で削除する

    下記の図表【事前】のA列に時間(シリアル値)が入力されていますが、 これをマクロを使って不要な時間帯のデータを行ごと削除したいです。 それを実行するためのマクロをご教示頂けますでしょうか? 削除対象の条件 ・9:00:00~18:00:00以外の夜間や早朝の時間帯は削除する。 その他 ・データが入力されている行数分繰り返し処理 ・秒数、分数は全て0 ・列は3列(B、C列は任意) ・Excelのバージョンは2007 【事前】   A                        B      C 1 yyyy/mm/dd 01:00:00 ※削除対象 2 yyyy/mm/dd 23:00:00 ※削除対象 3 yyyy/mm/dd 09:00:00 4 yyyy/mm/dd 15:00:00 5 yyyy/mm/dd 17:00:00 6 yyyy/mm/dd 19:00:00 ※削除対象 7 yyyy/mm/dd 04:00:00 ※削除対象 【事後】   A                        B      C 1 yyyy/mm/dd 09:00:00 2 yyyy/mm/dd 15:00:00 3 yyyy/mm/dd 17:00:00

  • エクセルマクロの質問です。

    こんばんわ!! エクセルマクロのデータ形式で、うまく設定できず困っています。 下記のようにA1セルにユーザーフォームのデータを入力しました。 Range("a1") = UserForm1.TextBox1 TextBox1にはyyyy/mm/dd形式でデータを入力しています。 0を1899/12/31にするのはできるのですが、1899/12/31を0とするデータ(シリアル値?)に直したいのですが、どうすればよいでしょう? アドバイスの程よろしくお願いいたします。

  • エクセル マクロ 特定のフォルダ内 ファイルコピー

    エクセルのセルに入力されたフォルダを参照して、 CSVファイルを シート1・2・3・4に1度にコピーしたいのですが 例えば C\ドキュメント¥フォルダA |-フォルダB |-フォルダC                 |-フォルダD                 |-フォルダE                        |-フォルダ1                             |-CSVファイルA                         |-フォルダ2                             |-CSVファイルB                          |-フォルダ3                             |-CSVファイルC                         |-フォルダ4                              |-CSVファイルD 上記のアドレスで シート1のA1セルに フォルダEを入力し  シート2に CSVファイルA シート3に CSVファイルB シート4に CSVファイルC シート5に CSVファイルD それぞれすべての内容を貼り付けたいのですが 何分初心者なもので ご指導いただければと思います。  ちなみに A1セルの入力は変わるため各シートは1度削除した上で再度貼り付けを行いたいです。     

  • エクセル 西暦のセルと月日のセルを合わせる

    西暦(yyyy)のセルと月日(mm/dd)のセルが分かれて存在しています。 これらを合わせて(yyyy/mm/dd)と表示したいのですが、 何か簡単に行う方法はありますか? 現在手入力していますが、データの量が膨大で困っています。 よろしくお願いします。

  • Excel VBAについて

    Excel VBAについて ExcelのセルA1に日付データ(yyyy/mm/dd hh:mm)が入っています。 このエクセルファイルを開いている間、セルA1の日付(時分)が更新されたらマクロを実行するようにしたいのですが、どのようにしたらよいのでしょうか。 セルA1の日付データが更新されるタイミングは決まっていません。 セルA1の日付データが更新されたらマクロ実行というのが難しいのであれば、 10秒おきにマクロを実行というようなことができないでしょうか。 ご教授願います。

  • yyyy/mm/ddの日付に一括変換するマクロ

    [セルの書式設定] の [表示形式]が標準(日付ではない)で単なる文字列となっている「mm-dd-yyyy」や「mm/dd/yyyy」のデータをマクロで「yyyy/mm/dd」の日付データに一括変換するマクロを教えてください。 たとえば、日付データが列Aにある場合にはDATE関数で、 =DATE(RIGHT(A2,4),LEFT(A2,2),MID(A2,4,2)) でも変換可能ですが、対象ファイルが多数、各ファイルにも対象の列が多数、そしてファイルの更新頻度も多いため、DATE関数を使用することは現実的ではない事情があります。 このためマクロを使用して処理させたいです。 添付のサンプルの例で一括変更するマクロを教えてください。 なお、Excelは2007を使用しています。

  • エクセルでランダム表示したい

    エクセルのセルA1からセルA20までとか「MM/DD/YYYY hh:mm:ss」の形式でランダム表示させる関数なんてあるでしょうか? できれば、3月1日~5月31までとか期限を制限してランダムに表示できたらうれしいです。

  • EXCEL VBAでのCSV出力について

    EXCELに入力されたデータをCSV出力するプログラムを作成しました。データには日付が入っており年月日がYYYY/MM/DDの形で入力されています。これをハンド作業で名前をつけて保存でCSVに出力すると年月日はそのままの状態で保存されますが、VBAで保存するとMM/DD/YYYYの形になってしまいます。この状態で保存されると、次にEXCELで読み出すと年月日が文字列扱いになってしまいます。新しいマクロの記録で行っても結果は同じでした。 VBAで保存する際、YYYY/MM/DDで保存する方法はないでしょうか。 また、MM/DD/YYYYで保存されたCSVを日付としてEXCELに認識させる方法はあるでしょうか。 教えてください。よろしくお願いします。

  • エクセルVBA セルの書式につい

    ユーザーフォームのテキストボックスに入力した日付(yyyy/mm/ddの形式)をA1セルに入れるとします。  Range("A1").Value = Me.txt日付 A1セルの表示形式は書式設定でユーザー定義の"d"で表示されるように設定していますが、 テキストボックスに入力した形式のまま(yyyy/mm/dd)でA1セルに表示されてしまいます。 上記のみではNGでしょうか? ちなみに、yyyy/mm/ddと入力されたA1セルを一旦編集モード([F2]キーを押した状態)にして[Enter]を押すと"d"(書式設定で指定している書式)に変わります。 参考:A1セルの日付をみて別シートの一覧からVlookup関数で値を検索したいところが、yyyy/mm/ddで表示されるためにエラーとなってしまいます) ご存知の方教えていただきたいです。

専門家に質問してみよう