• ベストアンサー

EXCEL VBA

1月から3月までの12シートからなる複数のファイルがあります。 そのファイルを上書き保存したときに書式と値だけをコピーした「ファイル名+シート名」で別ファイルに保存をかけたいのです。 (例) 営業課月次.xlsの4月シートに入力をして、上書き保存をかけた時点で月次4月.xlsにシート名=営業課月次4月で書式と値だけ保存する。 こんな都合のよいVBAがありましたら教えていただきたいと思います。宜しくお願いします。 (VBAに関しては入門編ぐらいの知識しかありません。)

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

次の通り操作してみてください。 ・新しいブックを開きます。 1行目に見出しとして A1="部課ファイル名"  B1="月別月次ファイル作成月" A2="営業課"       A3="業務課" A4="管理部門" A5="支店"   ・ (必ずファイル名と同じにします。.xlsは不要)   ・ (中間に空白がないこと。あればその前で終わりと見なします。)   ・ B2 には、集計する際、月数を入れますから、セルのバックに色を着け、 太線で囲むなどしてください。 C2="月分" シートの準備は以上で、次にVBAの設定します。 ・使用しているシートのシート名タブを右クリックして「コードの表示」を  指定します。 ・開いたコードウィンドウに下記コードをコピーして貼り付けます。 ・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 ・以上で設定完了です。  集計の操作方法は、セルB2 に集計する 月を入力し<Enter>します。 入力した B2のセルを「ダブルクリック」すると集計を開始します。 ピッ となった後、完了のメッセージが出ますのでファイルを確認して ください。 「*月分」のファイルが出来て、各部課の月次シートが出来ています。 たぶん、このような集計を希望しているものと思います。 違う部分とかありましたら、その旨書き込んでみてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target _     As Range, Cancel As Boolean) Dim Rng As Range Dim R As Range Dim Opbk As Workbook Dim Newbk As Workbook Dim Fpath As String Dim tuki As Integer Cancel = True If Target.Address <> "$B$2" Then Exit Sub tuki = Range("B2").Value If Not (tuki >= 1 And tuki <= 12) Then   MsgBox "月の指定が、正しくありません。", vbExclamation   Exit Sub End If Fpath = ThisWorkbook.Path & "\" Set R = Range("A2", Range("A2").End(xlDown)) Application.ScreenUpdating = False Application.DisplayAlerts = False Set Newbk = Workbooks.Add On Error Resume Next For Each Rng In R   Workbooks.Open Filename:=Fpath & Rng.Value & ".xls"   If Err.Number > 0 Then ' Err1004     MsgBox Rng.Value & _     ".xls のファイルが、見つかりません。", vbExclamation     Newbk.Close     Exit Sub ' Err.Clear   Else     Set Opbk = ActiveWorkbook   End If   Sheets(tuki & "月").Cells.Copy   If Err.Number > 0 Then ' Err9     MsgBox Rng.Value & ".xls に " & _     StrConv(tuki, vbWide) & _       "月 のシートが、見つかりません。", vbExclamation     Opbk.Close     Newbk.Close     Exit Sub ' Err.Clear   End If   Newbk.Activate   If Rng.Row = 2 Then     Sheets.Add before:=Worksheets(1)   Else     Sheets.Add after:=Worksheets(Rng.Row - 2)   End If   Selection.PasteSpecial Paste:=xlValues   Selection.PasteSpecial Paste:=xlFormats   ActiveSheet.Name = Rng.Value & tuki & "月"   ActiveSheet.Range("A1").Select   Opbk.Close Next Rng ActiveWorkbook.Sheets(1).Select ActiveWorkbook.SaveAs Fpath & tuki & "月" ActiveWorkbook.Close Beep Application.ScreenUpdating = True Application.DisplayAlerts = True MsgBox StrConv(tuki, vbWide) & _   "月分の月次ファイルを作成しました。" Set R = Nothing Set Rng = Nothing Set Newbk = Nothing End Sub

butaichi
質問者

お礼

お礼の返事が遅くなり申し訳ありません。 なんてお礼をいったらいいのか分からないぐらい感動しています。そうです!これがやりたかったんです!すごすぎます! 今まで毎月手作業でシートのコピーをかけていたんです。うれしくて今も顔がニヤけたまんまです。 今の私にはこのVBAが解読できませんが、少しずつ覚えたいと思っています。 本当に、本当にありがとうございました。m(_ _)m

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

なるほど・・・そうですか。(例)に頼りましたからね。 「各ファイルから同じ月のシートを集めて1個のファイルを作る」という ことですよね。 それでは、「ファイルを上書き保存したときに実行」というのは、 意味がなくダメだと思います。 他のファイルからも持ってこないとダメですから・・・ あと、何も4月分だけ という訳じぁないんですよね。 ひとつの案ですが、例えば「月別月次作成.xls」を作り、ここに A列に部課名一覧を作り、テキストボックスとコマンドボタンを各1個 配置し、テキストボックスに何月分かを入れ、コマンドボタンを押すと その月の月次ファイルが出来るというのは、どうでしょうか。 部課名一覧がないとちょっと大変です。ファイル名からも出来ないことは ないですが、手間がかかります。 こんな感じでどうでしょうか。 ちょっと時間が掛かりますね。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.1

次のようなコードで如何でしょうか。 1ヶ所でも変更が、あると全シート分のブックを上書きします。 日付/時刻関数を使用していると、開いてから何も内容を変更しなくても 各シート毎のファイルは、1回は上書されます。 各シート毎のファイルは、基のブックと同じフォルダに作成されます。 ご存知かも知れませんが、一応コード設定方法を書いておきます。 1.Alt + F11 で VBE(Visual Basic Editor)を開きます。 2.「プロジェクト」ウィンドウ(表示されていなかったらCtrl+R )で   「ThisWorkbook」をダブルクリックします。 3.モジュールウィンドウに下記コードをコピーして貼り付けます。 4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 以上で設定終わりです。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim Newbk As Workbook Dim Bkn As String Dim Shn As String Dim N As Integer If ActiveWorkbook.Saved = True Then Exit Sub Shn = Left(ThisWorkbook.Name, InStr(ThisWorkbook.Name, ".") - 1) Application.ScreenUpdating = False Application.DisplayAlerts = False For N = 1 To Worksheets.Count   Bkn = "月次" & Sheets(N).Name & ".xls"   Sheets(N).Cells.Copy   Set Newbk = Workbooks.Add   Cells.PasteSpecial Paste:=xlValues   Cells.PasteSpecial Paste:=xlFormats   Newbk.Sheets(1).Name = Shn & Sheets(N).Name   Range("A1").Select   ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Bkn   ActiveWorkbook.Close Next N Beep Application.ScreenUpdating = True Application.DisplayAlerts = True Set Newbk = Nothing End Sub

butaichi
質問者

補足

たった今実行しました。感動です。ありがとうございます。 でも私の説明が悪かったです。 営業課月次.xls 業務課.xls 管理部門.xls 支店.xls・・・・(まだ続く) と各部門ごとに12ヵ月のシートがありまして、シートの4月分を月次4月.xlsのシートに全部並べて保存したいのです。つまり、4月.xlsには 営業課月次4月 業務課月次4月 管理部門月次4月 支店月次4月・・・・とシートが並ぶような感じです。 説明が下手で申し訳ないです。 宜しくお願いします。

関連するQ&A

  • Excel97VBA

    Excel97のVBAでマクロを作っています。 1.xlsというファイルを、2.prn(スペース区切りテキスト)で保存し、再度1.xlsというファイルで元のファイルに上書き保存したいのですが、1というファイル名を任意に変更したいので、保存形式とファイル名を元のファイルと同じにして元のファイルに上書きする、ということは可能でしょうか?

  • EXCEL VBAで別ファイル作成

    エクセル97です。 エクセルファイル AAA.xls のすべてのワークシートのうち、セルA1に TRUE がはいっているもの、(枚数はそのときにより不定です。)のみをコピーして、別のエクセルファイルを作成したいのです。 その際、新しいファイルに貼り付けるのは書式と値のみで、シート名は 元ファイルのシート名と同じにしたいのです。 どのようなVBAを書けばよいかご教示ください。 (AAA.xls にはワークシート以外にグラフシートやダイアローグシートが入っています。)

  • VBA 1フォルダーの中の該当するファイルを開く

    OS : WindowsXP Excel : 2003 一つのフォルダーの中に複数のExcelファイルがあります。 その複数のファイルの中から該当するものだけを開くようなマクロの書き方を教えてください。 例えば、 ひとつのフォルダーの中に以下のExcelファイルが保存されています。 C:\営業部\営業2課\売上\2011/11/28.xls C:\営業部\営業2課\売上\2011/11/29.xls C:\営業部\営業2課\売上\2011/11/30.xls C:\営業部\営業2課\売上\2011/12/01.xls C:\営業部\営業2課\売上\2011/12/02.xls C:\営業部\営業2課\売上\2011/12/05.xls C:\営業部\営業2課\売上\2011/12/06.xls C:\営業部\営業2課\売上\2011/12/07.xls C:\営業部\営業2課\売上\2011/12/08.xls C:\営業部\営業2課\売上\2011/12/09.xls C:\営業部\営業2課\売上\2011/12/12.xls C:\営業部\営業2課\売上\2011/12/13.xls C:\営業部\営業2課\売上\2011/12/14.xls C:\営業部\営業2課\売上\2011/12/15.xls C:\営業部\営業2課\売上\2011/12/16.xls C:\営業部\営業2課\売上\2011/12/19.xls C:\営業部\営業2課\売上\2011/12/20.xls C:\営業部\営業2課\売上\2011/12/21.xls C:\営業部\営業2課\売上\2011/12/22.xls C:\営業部\営業2課\売上\2011/12/23.xls C:\営業部\営業2課\売上\2011/12/26.xls C:\営業部\営業2課\売上\2011/12/27.xls C:\営業部\営業2課\売上\2011/12/28.xls C:\営業部\営業2課\売上\2011/12/29.xls C:\営業部\営業2課\売上\2011/12/30.xls C:\営業部\営業2課\売上\2012/01/04.xls C:\営業部\営業2課\売上\2012/01/05.xls 上記ファイル名の数字は日付を表しています。 その中から2011年12月のファイルを全て開くマクロを組みたい。 また、月次処理で使用するため、翌月には2012年1月のファイルを開きます。 どなたか、よろしくお願いします。

  • VBA どのように記述すれば良いか教えてください。

    はじめて、質問させていただきます。 まだExcel VBAの勉強を始めたばかりの者です。 下記のようなツールを作ることになったのですが、非常に困っています。どなたかわかる方がみえましたら、どうか教えて下さい。(Excel2003を利用) <すべてAという同じフォルダ内> book1.xls book2.xls ・  ・ book*.xls →ファイル数は変動します。集計.xls以外のファイルはすべて同じシート名で構成されて         います。すべてのファイルのシート名 ”結果”が対象です。 集計.xls →このファイルにマクロを作りたいです。        シート名が1、2、3・・と116まで用意されています。 __________________________________________________________________________________________________________________________________ Aフォルダ内の複数ファイルの同じシート名(”結果”)というシートのみコピーをし、同じフォルダ内のファイル「集計.xls」のシートへ値貼り付けをしたいのですが、 一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け、2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け。。3番目にコピーしたシートは「集計.xls」の3という名のシートへ値貼り付け。。というのを、シート数分繰り返す。。という記述を教えて頂きたいのです。 ループ??ですが、【一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け】 次に【2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け】というのを一連の流れにしてループ処理したいのです。 こんなこと出来るのでしょうか??  初心者とはいえ丸投げは駄目だと、1週間ほどネットやいろいろなテキストで自分で何とかできないかと頑張ってみたのですが、部分部分しか記述できず時間だけが過ぎていき。。すっかり行き詰ってきてしまいました。 どうかお力を貸してください。宜しくお願い致しますm(uu)m

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • EXCELのVBAについて教えて下さい。

    VBA初心者です。 EXCEL操作は今まで何度もやっていて大体のことは分るのですが、この度、仕事の関係でマクロ、VBAを初めて使わなくてはいけなくなりました。早速はじめからつまずいています。どうか私にご教授くださればと思います。 やりたいことというのが、 (1)毎日の仕事として、まず、サーバーにあるデータを集計しcsvファイルとして保存します。 (2)そのcsvファイル(ファイル名:今日落としたファイルなら○○050620.csv)を××.xlsというファイルのワークシートにコピーします。 (3)その集計した表をピボットテーブルでさらに分りやすく分別。 (4)そのピボットテーブルからでてきた数字を××.xlsのSheet1の表のあてはまるところに数字をコピーし貼り付けていきます。 それによってグラフができます。 この操作の流れのうち(2)(3)(4)の部分をマクロニ組んでしまいたいのです。なかなかうまくいかないので良い方法を教えてください。ちなみにcsvファイルは毎日の作業なので年月部分のファイル名が毎日の日付が入ります。

  • Excelで値貼り出力をするVBAは作れますか?

    Excelで値貼り出力をするVBAは作れますか? Excel2003を業務で使用しています。 SUMPRODUCTなどのいろんな関数を使って売上げ報告書を集計し、 取引先に送っているのですが、計算式や参照式でファイルが重くなっているので、 値貼りをしたファイルを作成したいのです。 そこで、VBAを使って以下のどちらかを実現することは可能でしょうか。 ・報告書の全シートの全書式(罫線・色)と値を別ファイルに出力 ・書式のみ、全て空欄の別ファイルに全シートを値貼り これが出来るととても助かるので、ご教示ください。宜しくお願いいたします。

  • Excel VBA ファイルをまとめる

    Excel2003にてフォルダにある複数ファイル(8個)の各1番左のシートを 指定したファイルにまとめるVBAを組みたいと思います。 まとめる際、ファイル名の一部を取得し、シート名にしたいのですが可能でしょうか? 例: ファイル名:20110927_△△△△株式会社.xls ⇒ シート名:△△△△株式会社 ※ファイルの個数は固定ですが、年月の部分は変わります。 簡単なVBAの経験しかなく、キーワード検索でもしっくりこないものばかりで どのようにコードを記述してよいのか非常に困っています。

  • EXCEL VBAでファイル名取得

    A1のセルにユーザー定義で書式設定をしたものをそのファイルの名前にしようと思ってます。 書式は「1」と入力すれば「001」と表示されるようになっています。 そのままセル+".xls"で保存しようとすると、「型がちがいます。」というエラーになり、そのセルを変数にしてvalueで表示すると、そのまま「1.xls」というファイル名になってしまします。 「001.xls」というファイル名にするにはどうしたらよいでしょうか? どなたかよろしければ、回答お願いします。

  • Excelで他Excelファイルのセルの値をVBAで参照したい時

    こんにちは。 Excelで他Excelファイルにあるセルの値をVBAで参照したい時って、 場所をどう指定したらいいのでしょうか。 やろうとしている事ですが、 c:\1.xlsに記述するVBAで c:\2.xlsのsheet1のA1の値を参照して、 それとc1.xlsのsheet1のA1の値が一致した時に、 c:\2.xlsのsheet1のB1の値を、 C:\1.xlsのsheet1のB1に書き出そうとしています。 派遣就業先でAccessで作ればいいものを なぜか社員の方たちでExcelで作ってしまったため、 そのメンテに四苦八苦しています。(笑) ご存知の方ぜひ教えてください。 よろしくお願いします!

専門家に質問してみよう