• ベストアンサー

フォルダ内のxlsをシートごとに別ファイルにしたい。

現在開いているブックのシートごとにブックにするマクロはあったのですが フォルダ内のブックを一気にばらすことはできませんか? ---元--- ./甲.xls(シートa,シートb,シートc) ./乙.xls(シートa) ./丙.xls(シートa,シートb) ---元--- ---先--- ./甲a.xls(シートa) ./甲b.xls(シートb) ./甲c.xls(シートc) ./乙.xls(シートa) ./丙a.xls(シートa) ./丙b.xls(シートb) ※シート名もしくはseqをつけて分割 ---先--- まとめてPDFを作ろうかとしたら複数シートがうまく行かないので 1ブック1シートの形式にできればと思ってます。 (通常時は複数シートがいいので1ファイルづつ作業は考慮したくない) できましたらお願いいたします。

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

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

多分VBA類を使わないと実現できないでしょう。質問者はどれぐらいVBAの勉強をしたかわからないが、多分荷が重過ぎると思う。 基本的にはFor Eachの2重ループになると思う。 それにエクセルVBAのほかに、VBScriptを使うことになると思う。回答者に完成品を作ってくださいというレベルだろう。 参考までにカレントパスに問題の(エクセル)ファイルがあるとして、エクセルファイルばかりで、その全ファイルかつ全シート名を捉えるコードをやってみた。結構試行錯誤の結果です。 残るは下記のMsgBox sh.Nameのところに、現に捉えている1シートの内容を新規1ブックとして保存するコードを考えて追加してください。 とりあえず下記を実行してみて、あとを考えてください。 標準モジュールに Sub test01() Dim objfile As Object Dim sh As Object cd = CurDir Set objfs = CreateObject("scripting.filesystemobject") Set objfolder = objfs.Getfolder(cd & "\") Set app = CreateObject("Excel.Application") For Each objfile In objfolder.Files 'MsgBox objfile.Drive MsgBox objfile.Path 'MsgBox objfile.Name Set wb = app.Workbooks.Open(objfile.Path) For Each sh In wb.Worksheets MsgBox sh.Name Next wb.Close Set wb = Nothing Next Set app = Nothing End Sub

jhayashi
質問者

お礼

VBAの勉強はしてません。画面操作もよく分からない状態で3,4時間試行錯誤しておりました。 ActiveSheetの切り替え等サッパリ分からない状態で 上記内容を元にMsgBox sh.Name のタイミングでファイル名、シート名、保存したいファイル名をセルに入れてしまい 再度ブックを開きながら対象外シートを削除し保存のループ組んで どうにか出来上がりました。 非常に参考になりました。ありがとうございます。

その他の回答 (1)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

>現在開いているブックのシートごとにブックにするマクロはあったのですが フォルダに.xlsブックがいくつあるか知らないが、適当な数読込んで、 for each w in workbooks 対象でないブックは除いて 現在開いているブックのシートごとにブックにするマクロ next でできる。

jhayashi
質問者

お礼

別のブックを開いたときにそちらに制御を移すのがどうも分かりませんでした(^^; どうにか解決いたしました。ありがとうございます。

関連するQ&A

  • エクセルで、品物毎に詳細を纏めたい

    いつもお世話になっています。 早速ですが、下記のようなことをしたいのですが、エクセルでできるでしょうか?  sheet1  │ A  │ B  ----------------------- 1│品 名│ 詳細 ----------------------- 2│ 甲 │ a ----------------------- 3│ 乙 │ b ----------------------- 4│ 丙 │ c ----------------------- 5│ 乙 │ い ----------------------- 6│ 丙 │ う ----------------------- 7│ 甲 │ あ -----------------------    ↓  sheet2  │ A  │ B  ----------------------- 1│品名 │ 詳細  ----------------------- 2│ 甲 │ a ----------------------- 3│ 甲 │ あ ----------------------- 4│ 乙 │ b ----------------------- 5│ 乙 │ い ----------------------- 6│ 丙 │ c ----------------------- 7│ 丙 │ う ----------------------- A列に品名、B列にその詳細を入力します。 「品名甲~丙、それ以降」は、その時々で詳細が微妙に変わりますが、順番に入力していきますので、例えば詳細の変化した「甲」が下の方で追加されます。 それがsheet1です。 sheet1を基に「甲の詳細がどう変わったか?」を纏める表(sheet2)を作りたいのですが、 これが自動的に出来上がるような方法はあるでしょうか? sheet2の「Bの2」にsheet1を範囲にしたVLOOKUPを入れ、「Aの2」に「甲」と入れると「Bの2」には「a」と表示されます。 が、「Bの2」をドラッグして「Aの3」に「甲」と入れても「Bの3」には「a」と表示され「あ」は表示されません。 「Bの3」には「あ」と表示したい、つまりsheet2は品名ごとに詳細を上下に纏めた一覧表にしたいのですが、その方法について何か良い知恵はございませんでしょうか? 関数には拘っておらずマクロでも何でも構いませんので、お知恵をお持ちの方がいらっしゃいましたらご教示下さい。

  • excel:あるsheet Bからその中の情報で別のsheetを表示する。

    (問題概要)あるsheet Bからその中の情報で別のsheetを表示する。 Mydocの中のAというフォルダに、ExcelのBOOKが複数個(A1~A5とB)あり、また各bookには複数個のシートが入っています。 ブックBの中に表形式で   B.xlsのsheet1   (表) 各book名 各sheet名 A1.xls     A1-1sheet  A1.xls A1-2sheet A1.xls A1-3sheet A2.xls A2-1sheet ~ A5.xls   A5-1sheet A5.xls   A5-2sheet などと入っています。 やりたいことは、この表のsheetの所などをクリックしたときに(方法はプログラムを作り安い方法でよいのですが)、当該シートを開き表示するようにしたいが、マクロがいいですか。その場合マクロはどんなふうに書けばいいでしょうか。 またBの表を作るため、BOOK内のsheet名の情報を採集する(コピー)方法はありますか

  • エクセル フォルダ内の.xlsファイルの集計

    エクセルで、複数の.xlsファイルの特定セルを集計するマクロを組みたいのですが、VBA勉強しはじめでうまくいかず、皆様の知識をお借りできればありがたいと思い質問させていただきます。 作業としては あるフォルダに複数の.xlsファイル(それぞれのファイルは同一形式で、sheet1およびsheet2は作業用シート。sheet3以降がデータの入ったシートとする)を置いておき、それぞれのデータ入りシート(シート数はファイルにより異なる)の特定セルを集計したものを、新たなブックに書き込む という形です。 その際に、各シートの特定セルの内容により出力するセルを変えたいと思っています。 実際には、 AAA.xlsというファイルの3枚目以降のシートで、L2セルに「B」と記述があれば別ブックのB3セルに、「C」と記載されていれば別ブックのC3セルに、それぞれD4セルの数値を集計する。 次にBBB.xlsというファイルに関しても同様に集計し、その結果はB4セルとC4セルに出力する これを当該フォルダに入っているファイル全てについて行う ※L2セルには「B」「C」以外の文字は入りません。 こういった作業ができればと思っています。 お時間のある方がおられましたら、ご教授いただけますでしょうか。 参考になるサイトなどがありましたら、アドレスだけでも御教えいただけると幸いです。 質問の仕方が悪いようでしたら、ご指摘いただければ再度説明させていただきます。拙劣な説明ですがどうかよろしくお願いします。

  • Book1.xlsとBook2.xlsのエクセルファイルが有ります。

    Book1.xlsとBook2.xlsのエクセルファイルが有ります。 VBAを作成しているのはBook2.xlsで操作しています。 Book1 Sheet1 A B C 1 6 4 2 2 8 5 3 3 5 1 4 . Book1のシートのB列とC列には整数が入力されています。 A列には計算式が入ります。 例)A1の計算式 =B1+C1 A2の計算式 =B2+C2 A列の結果をBook2 Sheet1 のA列に反映しようとした場合に、 以下のVBAだと、計算式のコピーになってしまうので、計算結果の値を反映する事が出来ません。 A列の計算結果(上記の例だと、6,8,5)をまとめて反映させる方法はありますか? Sub tashizan() Dim thisBook As Workbook Dim workBook1 As Workbook Set thisBook = ThisWorkbook Set workBook1 = Workbooks.Open("C:\Documents and Settings\Book2.xls") thisBook.Worksheets("Sheet1").Range("A1:A100").Copy workBook1.Worksheets("Sheet1").Range("A1") workBook1.Close End Sub 初心者ですので、宜しくお願いします。

  • 三者間での土地の交換 所得税の交換特例は受けられる?

    三者間での土地の交換 所得税の交換特例は受けられる? 甲・乙・丙がそれぞれ、A・B・Cの土地を持っています(それぞれ先祖代々伝わる土地です)。 甲:A 乙:B 丙:C という状況です。これを、三者間で交換して、 甲:B 乙:C 丙:A というふうにしたいのですが、所得税の交換特例を受けたいので、 まず、甲と乙が交換をして、 甲:B 乙:A 丙:C という状況にします。この年に甲と乙が所得税の交換特例を受けます。(丙はこの年は関係ありません) ここまでは問題ないと思います。 さて、 それから1年以上立ってから、乙と丙が交換をします。 すると、 甲:B 乙:C 丙:A というふうになります。この年に乙と丙が所得税の交換特例を受けることは可能でしょうか?乙は大丈夫だと思いますが、丙が受けられるかどうかがわかりません。 1回目の交換で乙が取得したA土地が「交換のために取得したもの」に該当してしまうのか否かが鍵だと思いますが、どうでしょうか? (なお、その他の交換特例の適用要件は満たしているものとします。)

  • エクセルで複数条件当てはまる対象の個数を数えるには?

     countifは、一つの検索条件でしか数えられないと思いますが、複数の条件に該当するセルの個数を数える関数はあるのでしょうか?  2万件程度のデータから検索する必要がありまして、よろしくお願いします。  趣旨は、以下のとおりです。 ---------------  種別1 種別2  a    甲 b    乙 b    甲 c    甲 c    丙 a    乙 ----------------  という一覧表から ----------------   甲 乙 丙 a  1  1  0 b  1  1  0 c  1  0  1 ----------------  のような個数の一覧表を作成したいということです。

  • Excel2003 マクロでブックを開かずにコピペ

    Excel2003でC:\にあるブックBを開かずに、 開いているブックAの指定したセルをコピーしたいのですがうまくいきません。 具体的なイメージは 開いているコピー先のブックA:いろは.xls コピー先のシート:Sheet1 コピー元のブックB:らりるれろ.xls コピー元のシート:らりるれろ (ブックBの名前(らりるれろ.xls)とシート名が同じなのはシステム上の仕様です。) ブックBのC6をブックAのC5に、 ブックBのI6をブックAのC6に、 ブックBのK6をブックAのC7に、 ブックBのH6をブックAのC8にコピーしたいと考えています。 宜しくお願いします!

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

    エクセル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の中だけで編集したかのように) シートをコピーするにはどうしたら よいのでしょうか?  長くなってすいません。  よろしくおねがいいたします。  

  • エクセルでデータ.xlsから1行毎に元シート.xlsへコピーし1行毎に多数ファイルを作成したい。

    現在、以下のような繰り返し作業をカット&ペーストで何度も行わないといけません。 手が疲れて困っています。 エクセルマクロで簡単にできる方法を教えてください。 以下の例のようにデータ.xlsは、一番上の行に元シート.xlsに差込む位置、 次の行から1行ごとのデータがあります。 データ.xls A B C D E F 1 A2 A3 B3 C2 D2 D3 <- 元シート.xlsにコピーする位置 2 test 123 456 789 012 345 3 test2 456 789 012 345 678 4 test 456 123 789 012 345 ... 元シート.xlsは固定文字や罫線等があります。 元シート.xls A B C D 1 ------------------------------ 2 3 4 abcdefg 9876543 5 ------------------------------ 元シート.xlsに、データ.xlsの1行ごとのデータを、指定したセルに入れ、 A列の名前で多数のファイルを作成したいのです。 ただし、A列で同じファイル名がある時は、ファイル名の後に_2等を付けて保存したいのです。 以下のような多数のファイルを自動的に作成する方法を教えて下さい。 宜しくお願い致します。 test.xls ------------------------------ test 789 012 123 456 345 abcdefg 9876543 ------------------------------ test2.xls ------------------------------ test2 012 345 456 789 678 abcdefg 9876543 ------------------------------ test_2.xls ------------------------------ test2 789 012 456 123 345 abcdefg 9876543 ------------------------------ ...

  • EXCEL2003で別ブックのシートの名前の定義を使いたいのですが

    EXCEL2003を使っています。 A.xlsというブックのAAAというシートに「商品」という名前の定義をしたテーブルがあります。このシートAAAをB.xlsというブックにコピーし、B.xlsのシートBBBの中で入力規則の元の値として、VLOOKUPの範囲名として使いたいのですが、入力規則の場合は、「元の値はエラーと判断されます。続けますか?」というメッセージが出て使用できません。 このとき、A.xlsは別場所なので存在しません。名前の定義のあるシートを他のブックにコピーして使用するのは無理でしょうか?

専門家に質問してみよう