• 締切済み

【2003】VBA 別ファイル特定シートへのコピペ

下に書いてあるようなことをしたいのですが、勉強するのも初めてで 現段階の自分の知識ではどうにもなりません。 一応、自力でできたのはフォルダ内の.xlsファイルがなくなるまですべて開くというとこだけでしょうか・・・ お手数かけますが、ご教授お願いします。 参照するシートやファイルは既に存在しているものとします。 <固定値> C:\blue\red\ 'ここをカレントディレクトリと呼ぶ C:\yellow         '集計ファイルはこのディレクトリに置いてある' C:\yellow\集計_2011.xls <ファイル配置> カレントディレクトリ配下にはデータファイルがn個入っている。 1_data.xls 2_data.xls 3_data.xls ・ ・ <数字>_data.xls ◆マクロの動作内容 (1)C:\yellow\集計_2011.xlsが開かれていない場合はファイルを開き 既に開いている場合は(2)へ進む。 (2)カレントディレクトリ配下の*_data.xlsファイルを開く (3)開いたファイルのシート名「Second」を開き、セルC5を参照する (4)下記の通り分岐する((3)の結果) C5=one ならば yellow\集計_2011.xlsのシート名「English」を選択 C5=eins ならば yellow\集計_2011.xlsのシート名「German」を選択 C5=un ならば yellow\集計_2011.xlsのシート名「French」を選択 (5)dataファイルのA6を起点とし、下記の範囲をコピーする 行:A6~(上から数えて最後に空白でないセルA*) 列:A列からZ列まで →A6:Z*の範囲をコピー(これを#とする) (6) #をyellow\集計_2011.xlsに追記形式でコピペする →(4)で選択したシートに貼り付ける →貼り付けるセルは、B10を上から数えて最初に空白のセルを起点として、#を貼り付ける (7)開いていたdataファイルを閉じる (8) カレントディレクトリのdataファイルがすべてに(2)から(7)を繰り返す

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

質問が整理されているのは良いが、どういうコード技術が要るかの観点に踏み込んでいない。 それは質問者の書いた文章にある。エクセルで手操作でやる場合のことを思い浮かべ、順を追って文章箇条書きすることにヒントがある。1つのサイクルの場合を極めて、それから繰り返しに持っていくのが鉄則。 エクセルは最終的にはシート(とそのセルかセル範囲)の「学」(学習)なので、このシートオブジェクトをコードで捕まえる技術を学ぶ必要がある。 今回はコピペする段階では (1)<数字>_data.xlsの1シート(このブックのシート1つSecondだけをたいしょうにするのだな) (2)yellow\集計_2011.xlsのシート(En,Gr,Frの3つ) これをどうコードで捕まえるか Set (オブジェクトの変数名)=ワークシート とするか ブックから連ねて記述する方法(ブック名).(シート名).Range(・・)にするか ーー (処理の流れ・繰り返し) yellow\集計_2011.xls  のブックは開いておく。 フォルダの中のエクセルブックすべてについて下記繰り返し エクセルブックを開く(Workbooks.Open) シートSecondを選択(Select)   Secondシートの有効データ行の範囲指定ーーX C5セルの値で処理分岐(IFステートメントやCase文)=>集積するシートを別にする   集計シートの最終行の次からXの有効データ行を貼り付ける。 ブックを閉じてつぎの繰り返しへ ーー 下記のようなことをやってみたら 初心者はマクロの記録を思い出せ WEB照会を有効に使え (1)「VBA エクセル ブック 開く 」Google照会かマクロの記録 (2)フォルダのファイルをずつ捕まえる  「VBA フォルダ ファイル すべて」 http://homepage2.nifty.com/kasayan/vba/dir.htm (3)  シートのデータの最終行の補足  「VBA 最終行を捕まえる」 http://www.niji.or.jp/home/toru/notes/8.html (4)処理の場合を分ける  「VBA 処理 分岐」  「VBA 場合分け」 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_if_select.html (5)コピペ  「VBA コピペ」 http://excelvba.pc-users.net/fol2/2_8.html (6)ファイルのクローズ  「VBA ファイル クローズ」 ちょっと毛色が違うのは、ブックが既に開いて居るか、だが 「vba ブック 開いているか 判定」で照会 http://officetanaka.net/excel/vba/tips/tips108.htm 初心者は、この条件を省いて、はじめは考えては。開いていたら閉じてテストする。 ーー 3つのシートに分けるなども、はじめは分けないでコードを作り、うまく行っているような段階になって、3つに分けるとよいのでは。 コードに修正するなど、やさしい内容に(仕様を省略)して、まず全体が一応終わるように漕ぎ着けることだ。 ーーー 丸投げしないで、上記ぐらいWEBで照会して、勉強してから、疑問点を絞って、ここへ質問するもんだ。 質問コーナーに聞けば誰かが全面回答してくれるというのはよくない。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

単なる慣れの問題です。やるべき事を淡々とマクロに書き起こしてください。 丸投げじゃなくピンポイントに「こういう事をするマクロは?」と質問できるよう,頑張ってください。 sub macro1()  dim myPath as string  dim myFile as string  dim w as workbook  dim s as worksheet  mypath = "C:\blue\red\" ’開いていても気にする必要なし  workbooks.open filename:="c:\yellow\集計_2011.xls" ’ファイルを調査する  myfile = dir(mypath & "*_data.xls")  do until myfile = ""  ’ファイルを開く   set w = workbooks.open(filename:=mypath & myfile)  ’貼り付け先を指定する   select case w.worksheets("Second").range("C5")   case "one"    set s = workbooks("集計_2011.xls").worksheets("English")   case"eins"    set s = workbooks("集計_2011.xls").worksheets("German")   case "un"    set s = workbooks("集計_2011.xls").worksheets("French")   case else    msgbox "unexpected data"    stop   end select  ’各シートに事前に準備がしてあれば次の行は不要   s.range("B9") = "title"  ’対象範囲を取得してコピーし,貼り付け先を取得して貼り付ける   w.worksheets(1).range("A6:Z" & w.worksheets(1).range("A65536").end(xlup).row).copy _    destination:=s.range("B65536").end(xlup).offset(1)  ’閉じて繰り返す   w.close savechanges:=false   myfile = dir()  loop end sub

関連するQ&A

  • エクセル(マクロ) 特定セルのファイル間コピペ

    マクロで下記内容の処理を行いたいと思っております。 どのようなコードにすればよいかご教授よろしくお願い致します。 1.A.xlsを開く 2.B.xlsを開く 3.B.xlsの特定セルの値をコピーする。(特定セルを仮にB4、C7、D9とする) 4.A.xlsのC列にあるファイル名リストから「B.xls」というファイル名の入ったセルを検索する。 5.仮に5行目に「B.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE5、F5、G5とする)に3.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 6.B.xlsを閉じる 7.C.xlsを開く 8.C.xlsの特定セルの値をコピーする。(特定セルはB.xlsと同じB4、C7、D9) 9.A.xlsのC列にあるファイル名リストから「C.xls」というファイル名の入ったセルを検索する。 10.仮に7行目に「C.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE7、F7、G7とする)に8.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 11.C.xlsを閉じる 12.D.xlsを開く 以下、同じ処理を繰り返す。

  • 別ファイルのシート名表示

    教えてください。 シート名表示ですが、開いているファイル(製造データ1.xls)の シート名表示 =MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,31) にて可能ですが、別ファイル(製造データ2.xls)のシート名を関数にて表示させる方法を教えてください。 製造データ1.xlsのA1セルに表示させたいのですが・・・ (製造データ2.xlsのシートは1つのみです) 製造データ1と製造データ2は同一フォルダに格納されてます。 よろしくお願いします。

  • excel vbaでVlookup的な集計したい

    お世話になります。 デスクトップに[集計]というフォルダ作って、その中に[集計.xls]というファイルがあります(画像参照) さらに[個別]というファイルダ内に[実績A.xls]というファイルがあります。 実際には実績B.xls、実績C.xlsと複数ファイルが存在します。 集計.xlsにボタンを作ってクリックすると下記のような動きを実現したいのです。 [個別]フォルダ内の実績A.xlsファイルを開いて[集計.xls]のA列(支店名)、B列(商品番号)と合致したデータを次のように挿入していきたいのです。 集計.xls  実績A.xls C列  ← D列の値 D列  ← E列の値 E列  ← F列の値 F列  ← G列の値 この作業を実績A.xlsファイルの全シートに対して実施したいのです。(マスターというシートは抜かして左から右へ)。全シートREADし終わったら閉じて次の実績B.xlsファイルを開いて、また同じ作業を繰り返し、[集計.xls]もA2のデータから再びREAD、という動きです。 わかりにくい説明で大変恐縮ですが、業務で求められ困っております・・ どなたかご教授いただけますでしょうか。 何卒よろしくお願い致します。 Excel2013 Windows7

  • VBAでたくさんのファイルを一つにまとめる

    いつもお世話になっています。VBAでファイルを順番に起動、処理を行いたいと思っています。 集計001.xls~集計100.xlsというファイルがあります。1ファイルにそれぞれの支店と数値があって、それを総合.xlsファイルに支店シートを作って貼り付けます。 つまり、集計001.xlsには 東京 大阪 福岡 100 100  100 200 300  500 100 400  600 400 500  100 とあり他ファイルも同じように入っています。(数値は適当です) それを総合.xlsでは東京シートに 集計001 集計002 集計003 100   400   500  200   300   400 100   400   300 400   200   400 と各支店にシートを貼付します。他に大阪シートや福岡シートもできます。 今、「総合.xlsの各支店シート作成」と「集計001.xlsの支店数値→総合ファイル支店シート貼付」はできています。即興で作ったのでかなりいい加減ですが。 問題は「数あるファイルを順番に開いては閉じること」と「ファイル名を取得して各列の1行目にその名前を代入」です。 総合.xlsは常に起動していますが、集計ファイルは途中なかったりします。 そのために、いちいち手動で集計ファイルを起動して、コピペマクロを動かし、手動で集計ファイルを閉じています。 かなりわかりにくい説明だとは思いますが(やっている私もたまに勘違いしています)、ファイルを順番に動かすいい方法ってないでしょうか?できれば001 → 100の順番でいきたいんです。手動だとある時順番を間違えそうだし、ファイル名を1行目に入力するのも面倒なので。 すごくわかりにくいですよね。どうやったら文字列のファイル名をカウントする感じで動かしていくのかわからなくて・・・。どうかお知恵を貸してください。よろしくお願いします。

  • VBAを使い、同一フォルダにあるファイルの特定のシートの情報を取得したい

    はじめまして。 書籍や過去の質問等を調べましたが、類似するものを見つけられなかったため質問させていただきます。 Xというエクセルファイルで、Xと同一フォルダ内にある、ファイル名に特定の文字列(例えば「月報」)を含んだ全てのエクセルファイルの、特定の文字列(例えば「○年○月」)を含んだ全シートの、一定のセル範囲をひとつのシートにまとめたいと思っています。 X内のコマンドボタンで動かす予定ですが、複数のボタンになると自分では思っています(ボタンAでファイル名の取得、ボタンBでシートの取得、ボタンCでセルに貼り付け、みたいな感じで。ボタンの数は特に制限はないです) 要点としては a, 定定の文字列を含んだファイル名の取得 b, aで取得したファイル内の特定の文字列を含んだ全てのシート内の一定のセル範囲の取得(シートの数はファイルによる。必ずしも1つというわけではない。) c. bで取得した一定のセル範囲のデータを、1つのシートにまとめる。 あとはこれらのデータをtxtやcsvなどに出力できるようにするつもりです。 私がやってできたのは、同一フォルダ内にあるファイル名に特定の文字列を含むファイルの全てのファイル名を指定したセルに吐き出すことしかできませんでした。 なんか、ややこしい表現かもしれませんが、ご指導お願いします。 環境はxp、エクセル2003です。 よろしくお願いします。

  • 複数のエクセルブックから特定シートの特定セル抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル値を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 よく似ている質問、回答を読んだのですが、私のレベルではとても応用できず質問させていただきます。 【前提】 ・実行する端末のOSはWindows XP(SP3)、Excelは2003 ・対象フォルダはネットワーク接続フォルダ「\データ解析\データ」  この中に、複数のExcelブックがあります。 ・抽出したい対象は、各ブック内のシート(シート名はファイル名と同じ)の「BO6からBW16までの□の範囲」で統一されています。 【抽出一覧作成イメージ】 ・「集計.xls」ブックの「Sheet1」の2行目から抽出した結果を一覧表示する。 ・表示はA列に抽出元ブック名(=ファイル名)、B列に抽出元BO6セルの値。以降,C列・D列と 順に値を入れていきたい。 ・BO6~BW16までのセル値を「集計.xls」ブックの「Sheet1」に貼り付ける際には「値で貼り付ける」が望ましい。 というようなイメージです。 とても勝手なお願いではありますが、宜しくお願いいたします。

  • Excelデータを別のExcelファイルに引っ張ってシート別に一括で変更したい

    教えてください。 Excelのファイルから別のExcelファイルにデータを引っ張りたいのですが ='[ファイル名.xls]1'!$A$1 と入力するとデータを引っ張ってこれるのですがこのデータ元のファイルの別ページの 同じセルからもデータを引っ張って来たいのですがシートが複数ページあり 1つ1つのリンク先を変更していくのが面倒です ↓↓↓↓↓ ='[ファイル名.xls]1'!$A$1 ='[ファイル名.xls]2'!$A$1 ='[ファイル名.xls]3'!$A$1 ='[ファイル名.xls]4'!$A$1 ='[ファイル名.xls]5'!$A$1 ↑こんな感じで一気に変更したいのですが 何か簡単なやり方はありますでしょうか?? ちなみにExcelは2003です。

  • エクセル 別ファイルから シートを リンクを張らずに コピーしたい

    エクセル2003 1~4  はファイルの状態の説明です。 やりかたを質問したい部分は 5です。  1、ファイル(ブック)A.xls → 計算式が大量に入った数シートからなるファイル があるとする。 2、A.xls を そのままコピーし コピーされたファイルは B.xls に リネーム。 3、A.xls は 計算式等は変更しないが、データを変更し通常業務で使用。 4、A.xls の新バージョンを作るために B.xls を使って計算式等を編集。 (複数あるシートのうち一部シート(シート名 「あいうえ」 とする)のみの変更に加え さらに新シート「さしすせ」を作成) 5、A.xls のシート名 「あいうえ」をB.xlsで作った シート名 「あいうえ」と置き換え、 さらに新シート「さしすせ」もB.xlsからコピーして追加する。   普通にシート名 「あいうえ」や 新シート「さしすせ」を選択し  コピーを行うと B.xls からリンクを張った状態でコピーされて  しまう。たとえば シート「あいうえ」セルA1の中身を見ると  =[B.xls]あいうえ!A1*2+1 といったように [B.xls]が付いて  コピーされる。  これを回避して、単にそのまま丸ごと(A.xlsの中だけで編集したかのように) シートをコピーするにはどうしたら よいのでしょうか?  長くなってすいません。  よろしくおねがいいたします。  

  • セルに表示されている 別ファイルのシートのセルを参照するには?

    たとえば data.xlsの セルB1には "12345" と入力された別ファイルがあるとして セルA1に data.xls セルA2に Sheet1 セルA3に B1 セルA4に ( =[data.xls]Sheet1!$B$1 )  "12345" を表示したい セルA4にはどのように記入すればいいのでしょうか VBAは使いたくありません よろしくお願いします。EXCEL2000

  • 複数あるブックの特定シートの特定範囲を1つにしたい

    EXCEL2010を使用しています。 あるフォルダに格納されている複数のブックの、特定シートを、1つのシートにまとめたいです。 複数のブックの作りは同じです。 1つのブックに、複数シートがあり、"(配置)"というシートだけを、新規のシートにまとめたいです。 <今ある各ブック> ファイル名は、2014年度特定措置_●●.xlsで、●●だけ、ブック名が違います。 シート名が"(配置)"です。 c3セルに部署名が入っています。 b4セルからe10セルまで数式が入っています。 <行いたいこと> 新規のシートのa列に、各ブックにあるc3セルの部署名を持ってきたい。 b列からe列に、各ブックにあるb4セルからe10セルまでの数式を値張りし、取り込みたい。 以上です。 つたない説明で恐縮ですが、大変困っております。 どうか、ご回答の程、どうぞよろしくお願いいたします。

専門家に質問してみよう