- 締切済み
エクセルでのマクロの作成(コピー、ファイル展開)
自身で作成しようとしたのですができなかったので質問させていただきます。 ExcelでAファイルからマクロを実行させて、Bというファイルを開き一部のセルをコピーし、 Aファイルの条件に該当するセルにペーストするマクロを組みたいと考えています。 以下にさらに具体的に内容を記載いたします。 「Xフォルダ内にAファイルとBファイル(20101010-XXX)があり、Aファイル内にてマクロを実行させる。」 1:指定したフォルダ内にある、条件に合う該当ファイルをリストアップする(名前順) 2:リストの一つ目のファイル(Bファイル)を開く 3:Bファイル内のセルF9を選択し、コピーする。 4:Bファイルを閉じる 5:Aファイルの指定セル(C6)に貼り付ける 6:リストの二つ目のファイル(Bファイル)を開く 7: : (3、4は同様) 8:Aファイルの指定セル(C306)[以降C6+300ごとに増やす]に貼り付ける 9:リストの三つ目のファイル(Bファイル)を開く : 以下リストアップされたファイルを繰り返し処理し、全て終えたら終了。 簡単ですが例も記載します。 ================(例 Aファイル)================== A B C 行 4 20101010←日付 時間 Bセル値 6 10:00 F9(Bファイル一つ目)←貼り付け対象 : : : 306 20:00 F9(Bファイル二つ目) : : : 606 30:00 F9 : : : ============================================= XXXにはAファイルBセルの時間と一致するようにする↓ ================(例 Bファイル(20101010-XXX))=== A B C D F ○○←コピー対象 ============================================= どなたか、ご存知の方が居られればお教え願います。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
この質問は質問文が長く、自分でやれる部分(自分でやるべき部分)まで含めているが、切り分けて、自分でやるべきです。 まずマクロの記録を取れば骨格はわかる(下記の部分)。 >ExcelでAファイルからマクロを実行させて、Bというファイルを開き一部のセルをコピーし、 Aファイルの条件に該当するセルにペーストするマクロを組みたいと の部分だ。 ーー >指定したフォルダ内にある、条件に合う該当ファイルをリストアップする 在るフォルダ内のエクセルファイルの名前を列挙するのは、WEBでも調べてみたか。 沢山の記事がある Googleででも「vba フォルダ ファイル一覧」で照会すれば http://itpro.nikkeibp.co.jp/article/COLUMN/20060120/227645/ http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html など ファイルの中身まで踏み込むとファイルを読まないといけないが、名前と拡張子のレベルで判別できるのか。 また >一部のセル >Aファイルの条件に該当するセル の部分はどういう条件なのか、書いてないが、自分でコードを書いてみて考えること。 その過程でわからない個所だけに絞って、各々別質問にでもして、質問すること。 この質問では丸投げで、文章を長々書いて、回答者に時間を取らすのは、困るし、質問者のためにもならない。 丸投げにしないためには、自分の課題を丸投げでなく、判るところ、WEBや本を見れば判るところは質問の記述から省いて、質問例にすること。 >2:リストの一つ目のファイル(Bファイル)を開く 3:Bファイル内のセルF9を選択し、コピーする。 4:Bファイルを閉じる 5:Aファイルの指定セル(C6)に貼り付ける などぐらい、質問回答で、教えてもらわなくても判るか、マクロの記録を取ればコードはわかるだろう。
- keithin
- ベストアンサー率66% (5278/7941)
>条件に合う該当ファイルをリストアップ ×「条件」が一体何なのか説明がありません ×ご質問の説明では「リストアップ」していません ×AやBのファイルの何て言うシートを対象にして作業したいのか説明がありません ×ご利用のエクセルのバージョンも不明です ファイルの拡張子も不明なので,マクロでファイルを正しく開けない可能性があります ×AファイルのB4は「日付」と称していますが20101010という値のただの数字のようです 実は正しく「日付」が記入してあって書式によって20101010と表示して見せている場合は,マクロが正しく作動しない可能性が高くなります 手順: Aファイルに次のマクロを登録し,実行する sub macro1() dim myPath as string dim myFile as string dim i as long dim h as range mypath = thisworkbook.path & "\" with thisworkbook.worksheets("Sheet1") for i = 6 to .range("B65536").end(xlup).row step 300 set h = .cells(i, "B") myfile = .range("B4").text & "-" & format(h, "hhmm") & ".*" myfile = dir(mypath & myfile) if myfile <> "" then workbooks.open filename:=mypath & myfile h.offset(0, 1).value = activeworkbook.worksheets(1).range("F9").value activeworkbook.close false end if next i end with end sub
補足
質問に不備があり申し訳ありません。 条件とは C:\Users\・・・のフォルダ内の.csvファイルをのみを対象としたいという意味です。 また、リストアップについては表現が悪く申し訳ありません。上記のフォルダ内の対象ファイルのみを対象としたいということを伝えたく記載いたしました。 シートに関してはAは“出力”、Bは“sheet1”です。 エクセルのバージョンはOffice2003を利用しています。 ファイルの拡張子はAが“.xls”,Bが“.csv”です。 最後に日付に関してですが、Aファイルは日付ごとにファイルがあり、Bファイルは同一フォルダ内に異なるファイルネームにて(20101010-XXX , 20101011-xxx)存在する状態であったため、区別する際に役立つかもと考えていました。 また、Keithin様のおっしゃるとおり、日付は書式によって20101010と表示して見せています。理由は上述した内容と同じでBファイルを選ぶ際に使えるかもと考え書式を変更しました。しかし、それではマクロが作動しない場合があることを知りませんでした。