- ベストアンサー
EXCEL VBA マクロ
3つの同じフォーマットのファイルがあります。 それぞれ、 東京支店 大阪支店 本社 とします。 (1)A列に日付が入ってます。 (2)但し、日付はランダムです。 (3)B~H列までに、その日付に入(1/1)と終了日(1/15)を入力して、その期間の情報(1/1~1/15のA列からH列の情報)を本社のファイルにコピペすることはマクロで可能でしょうか。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
しまった誤記ました。 sub macro2() dim d1 as date dim d2 as date dim a, s ’準備 a = array("東京支店.xls", "大阪支店.xls") workbooks("本社.xls").worksheets(1).range("4:65536").delete shift:=xlshiftup ’日付の入力 on error resume next d1 = workbooks("本社.xls").worksheets(1).range("H1").value if d1 = 0 then exit sub d2 = workbooks("本社.xls").worksheets(1).range("H2").value if d2 = 0 then exit sub ’抽出とコピー for each s in a with workbooks(s).worksheets(1) .range("A:H").autofilter field:=1, criteria1:=">=" & d1, operator:=xland, criteria2:="<="&d2 .autofilter.range.offset(1).copy workbooks("本社.xls").worksheets(1).range("A65536").end(xlup).offset(1) .autofiltermode = false end with next end sub 失礼しました。
その他の回答 (3)
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
同じフォルダにある、複数のファイルを開いて読む、コレは極単純な、Dir-Do-Open-Dir-Loop、で処理できる。 検索すれば、同じようなサンプルはいくらでも手に入る。 こんなのも、、、 閉じたブックからデータを取得する http://www.moug.net/tech/exvba/0060037.html
- keithin
- ベストアンサー率66% (5278/7941)
イチイチ足りないところを全部丁寧に聞いてから「アナタの仕事を請け負う」のはお断りなので、次の通りにしてください。 ●大阪支店、東京支店、本社の各ブックは「先に開いておいたところから」マクロを実行する ●3冊のブックの名前は「東京支店.xls」「大阪支店.xls」「本社.xls」の通りとする ●シートは1枚だけとする ●3枚のシートともフォーマットは「同じ」とする 1行目2行目は使用しない 3行目にタイトル行 4行目から実データ A列は日付 BからH列にデータ 本社ブックのH1、H2に日付を記入する sub macro2() dim d1 as date dim d2 as date dim a, s ’準備 a = array("東京支店.xls", "大阪支店.xls") workbooks("本社.xls").worksheets(1).range("4:65536").delete shift:=xlshiftup ’日付の入力 on error resume next d1 = workbooks("本社.xls").worksheets(1).range("H1").value if d1 = 0 then exit sub d1 = workbooks("本社.xls").worksheets(1).range("H2").value if d2 = 0 then exit sub ’抽出とコピー for each s in a with workbooks(s).worksheets(1) .range("A:H").autofilter field:=1, criteria1:=">=" & d1, operator:=xland, criteria2:="<="&d2 .autofilter.range.offset(1).copy workbooks("本社.xls").worksheets(1).range("A65536").end(xlup).offset(1) .autofiltermode = false end with next end sub これ以上の変更、続きはそろそろご自分でやってください。 #更に補足 >本社のブックのH1に1/1、H2に1/15と入力 その時点で東京や大阪シートと「フォーマット」が食い違う、という事に気が付いていませんね? どのように整合したいのでしょうか。 各シートでフォーマットが違う事にしたいなら、どう違うのかキチンと正確に示さないと「そのまま使えるマクロ」の回答は寄せられませんよ。 こんな指摘をするのも、 >>本社のブックのH1に1/1、H2に1/15と入力 これは回答済みのマクロの単なるバリエーションでしかないのに、それを自分でちょっとやってみようという様子もまるで見えない、「答えだけ教えて」の丸投げを繰り返すからです。 それにそもそも、H列までデータがあるのにどうしてH1やH2に日付を入れられるのですか。思い付きでテキトーやってるので、こういう所ですぐにおかしな事になります。 もひとつ。 >3つの同じフォーマットのブック(シートは一つ)があります。 ファイルは一体どこに保存してあるんですか?ブックを開くところからマクロを書いてほしいなら、その旨情報提供が必要です。 ファイル名も、拡張子とかブックの情報が足りてません。
- keithin
- ベストアンサー率66% (5278/7941)
準備から説明するのはメンドクサイので、1冊のブックの中に「東京」シートと「大阪」シートと「本社」シートの3枚のシートが同じフォーマットで束ねてあることにします。 「同じフォーマット」って具体的に1行目はタイトル行、2行目からデータ。A列が日付。H列までデータ。 sub macro1() dim d1 as date dim d2 as date dim a, s ’準備 a = array("東京", "大阪") worksheets("本社").range("2:65536").delete shift:=xlshiftup ’日付の入力 on error resume next d1 = inputbox("start date (yyyy/mm/dd)") if d1 = 0 then exit sub d2 = inputbox("end date (yyyy/mm/dd)") if d2 = 0 then exit sub ’抽出とコピー for each s in a with worksheets(s) .range("A:H").autofilter field:=1, criteria1:=">=" & d1, operator:=xland, criteria2:="<="&d2 .autofilter.range.offset(1).copy worksheets("本社").range("A65536").end(xlup).offset(1) .autofiltermode = false end with next end sub #補足 一体どこにファイルがあるのかも不明 それぞれのファイルがそもそもエクセルブックなのかも不明 エクセルブックだとしてシート名も不明 同じフォーマットはいいけど、肝心のいったいどんなレイアウトなのかも不明 ご利用のエクセルのバージョンも、ファイルの保存形式も不明 そういった説明の手抜きはまぁさておいても、一番キモの >その日付に入(1/1)と終了日(1/15)を入力して どこにどういう具合にそれらの日付を「入力」したいのか、一番肝心なヤリタイ事も不明。 といった具合にナイナイ尽くしのご相談です。次回のご相談ではもうちょっとキチンと、目に見えるような情報を提供するようにしてください。 言いかえると >…することはマクロで可能でしょうか。 上述したような「不明内容」に対応するような具体的な事実と、それらからアナタがホントにヤリタイ事をキチキチ筋道立てて考えてしまえば、マクロを書く事自体は片目をつむってでも出来てしまう楽勝作業です。
お礼
早速ありがとうございます。 別のブックという想定でした・・ 今後は、もう少し、丁寧な説明にしたいと思います。
補足
3つの同じフォーマットのブック(シートは一つ)があります。 それぞれ、 東京支店 大阪支店 本社 とします。 (1)東京と大阪のA列に日付が入力されており、B列以降にその日に入荷された商品の情報が入力されています。 (2)同じ日付の列も存在します。 (3)例えば本社のブックのH1に1/1、H2に1/15と入力した場合に、その期間に該当する、東京と大阪支店の行を本社のブックにコピペしたいと思います。 どのように、マクロを記述するかをお願い致します。