こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルでのマクロの作成(コピー、ファイル展開)

自身で作成しようとしたのですができなかったので質問させていただきます。


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    

                          ○○←コピー対象                          


=============================================

どなたか、ご存知の方が居られればお教え願います。
よろしくお願いいたします。

投稿日時 - 2011-12-13 01:04:51

QNo.7186804

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

この質問は質問文が長く、自分でやれる部分(自分でやるべき部分)まで含めているが、切り分けて、自分でやるべきです。
まずマクロの記録を取れば骨格はわかる(下記の部分)。
>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)に貼り付ける
などぐらい、質問回答で、教えてもらわなくても判るか、マクロの記録を取ればコードはわかるだろう。

投稿日時 - 2011-12-13 09:54:31

ANo.1

>条件に合う該当ファイルをリストアップ

×「条件」が一体何なのか説明がありません
×ご質問の説明では「リストアップ」していません
×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

投稿日時 - 2011-12-13 02:00:24

補足

質問に不備があり申し訳ありません。
条件とは
C:\Users\・・・のフォルダ内の.csvファイルをのみを対象としたいという意味です。
また、リストアップについては表現が悪く申し訳ありません。上記のフォルダ内の対象ファイルのみを対象としたいということを伝えたく記載いたしました。

シートに関してはAは“出力”、Bは“sheet1”です。
エクセルのバージョンはOffice2003を利用しています。

ファイルの拡張子はAが“.xls”,Bが“.csv”です。


最後に日付に関してですが、Aファイルは日付ごとにファイルがあり、Bファイルは同一フォルダ内に異なるファイルネームにて(20101010-XXX , 20101011-xxx)存在する状態であったため、区別する際に役立つかもと考えていました。

また、Keithin様のおっしゃるとおり、日付は書式によって20101010と表示して見せています。理由は上述した内容と同じでBファイルを選ぶ際に使えるかもと考え書式を変更しました。しかし、それではマクロが作動しない場合があることを知りませんでした。

投稿日時 - 2011-12-13 06:47:23

あなたにオススメの質問