シートを一つのブックにまとめる方法と注意点

このQ&Aのポイント
  • 質問者はマクロを使ってデスクトップの経理フォルダ内のシートを一つのブックにまとめたいと思っています。具体的には、仕入.xlsxと売上.xlsxの2つのシートをまとめ.xlsmにコピーしたいです。
  • ただし、質問者が作成したマクロは動作しないため、どこにこのworkbook.pathを配置すべきかわかりません。希望する動作は、まとめ.xlsmのシート1に記載されているファイル名とシート名に該当するシートをまとめ.xlsmにコピーすることです。
  • 質問者はみなさまの知恵を借りて、この問題に対する解決策を見つけたいと思っています。どのようなマクロを使用すれば目的を達成できるのか、どこにworkbook.pathを配置すれば良いのか、アイデアをお持ちの方は回答してください。
回答を見る
  • ベストアンサー

シートを一つのブックにまとめるには

こんばんは ただいま夜中の1:20です。 マクロを考えているんですが、うまくうごかないです。 みなさまの知恵を拝借させてください。  デスクトップの経理フォルダに 仕入.xlsx 売上.xlsx まとめ.xlsm があります。  仕入の2月シート、売り上げの2月シートをまとめxlsmにコピーしたいのですが マクロの記述はどうなりますでしょうか? 自分なりにつくってみたのですが、経理フォルダを動かすとうまく作動しなくなりました。 thisworkbook.path をどこかにいれれば動くようですが、どこにいれればよいやら。 希望する動作としては まとめ.xlsm のシート1に記載されている ファイル名とシート名に該当するものを まとめ.xlsmにコピーできればと思ってます。

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

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

sub macro1()  dim r as long  dim myFile as string  dim mySheet as string  chdrive left(thisworkbook.path, 1)  chdir thisworkbook.path  for r = 2 to range("A65536").end(xlup).row   myfile = thisworkbook.worksheets("Sheet1").cells(r, "A")   mysheet = thisworkbook.worksheets("Sheet1").cells(r, "B")   workbooks.open filename:=myfile   activeworkbook.worksheets(mysheet).copy _    after:=thisworkbook.worksheets(thisworkbook.worksheets.count)   workbooks(myfile).close false  next r end sub ぐらいで。

ch20090926
質問者

お礼

できました いろいろありがとうございました。

ch20090926
質問者

補足

夜中なのに回答ありがとうございます。 ネットワークドライブ上にある エクセルファイルの中のシートのコピーをためしているところです。 またきます。 

その他の回答 (1)

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

説明不足で質問の内容がよくわからない。 一般に言って、すでに存在するエクセルデータを規定する(指し示す)のは (1)フォルダへのパスとフォルダ名 (2)ブック名 (3)シート名 (4)Range(セルの範囲)(とびとびの範囲にある場合もありうるに注意) と考えることができる。仮に階層とここでは言おう。 まとめたいデータはどの階層まで同じなのか、バラバラなのかが説明では分りにくい。 ーー また質問者がいう、「まとめ」た結果はどの階層につくるのか。 ーー またデータは、(新シート)1シート内に持ってきたいのだろうが、単純に、前(月)のデータの張り付けた終わりの次行以下に持ってくればよいのか(それを月数分繰り返す)。(たとえば見出し漢字)などは、張りつけられて、まとめ1シート内で繰り返されては困るのか(注意1)。合計値(注意2)などの行はない(生構成データだけ)ほうがよいのか。 (アクセスのデータなどなら一律にデータをため込んで保存し、必要な都度(年)月を指定して対象データとできる。)エクセルでは、普通はこうしない(月ごと別シートに分ける人が多い)が、ここがエクセルの良い点でもあり悪い点でもある。 (注意1)毎月のシートで固定行数なら張り付ける時のセル範囲の上をずらして指定すればよいが。 (注意2)合計値のある業はデータ数で上下する場合が多く、合計の行を探す処理を組み入れないとならないかも。 >経理フォルダを動かすとうまく どういう必要性があって動かすのか。 当面(1年や年度単位とか)固定できない(しない)のか。 今あるブックのパスをVBAで取って、それを使うしかないのでは。 何かブックを開いておいて 標準モジュールに Sub test02() MsgBox ActiveWorkbook.Path End Sub を実行すれば 、開いたそれがドキュメントなら c:\sers\xx\documents とでて、それでパスわかるが、処理モジュールにうまく渡さないといけない。

ch20090926
質問者

お礼

毎回 アドバイスありがとうございます。

関連するQ&A

  • フォルダ内の全てのブックを一つのブックへ

    エクセル2010を使っています。 フォルダ内の全てのブックの一番目のシートのみを、 BBB.xlsmというファイルの後ろへ全て1シートずつコピーしたいです。 又はBBB.xlsxでもいいです。 運用していく中で、マクロ用のファイルと作業用のファイルを分けるべきか、 一緒にするべきかも悩んでいます。 フォルダはその都度変わります。 ネットを検索してみたのですが、中々難しく、悩んでいます。 どうぞよろしくお願いします。

  • シートを他のブックに貼付けたい

    Excel2007でマクロ作成中の初心者です。 やりたいことは 1)本ブックの中の「当月売上」シートを他ブックに貼付けたいです。 2)他ブックに貼り付けた「当月売上」シート名は、セルK1の日付に変更したいです。 すると、他ブックのシートが毎月順に、売上(2012年4月) 売上(2012年5月) 売上(2012年6月)というふうに増えます。 3)何月に作成しても、ブックの「当月売上」シートを貼り付けます。 四苦八苦して以下のコードをつくりましたが、「同じ名前のシート名に変更できません。」 というエラーがでるので、このエラーが出ないように、名前が同じ時は上書き保存し、違うときは新しいシート名を作るという コードにしたいです。困ってます。どうかご指導お願いします。 Sub 売上シートの貼付け() Dim WBK1 As Workbook ' 本ブックの Dim WBK2 As Workbook ' 貼付け先他ブック ChDir ThisWorkbook.Path + "\売上" On Error Resume Next Set WBK2 = Workbooks("24年度売上.xls") On Error GoTo 0 If WBK2 Is Nothing Then Set WBK2 = Workbooks.Open(ThisWorkbook.Path & "\売上\24年度売上.xlsm") End If Worksheets("当月売上").Copy After:=Workbooks("24年度売上.xlsm").Sheets(Workbooks("24年度売上.xlsm").Sheets.Count) ActiveSheet.Name = Format(Range("K1").Value, "売上(yyyy年mm月)") Application.DisplayFormulaBar = True WBK2.Close SaveChanges:=True Application.DisplayAlerts = True Set WBK2 = Nothing End Sub

  • 複数エクセルブックを一つにするマクロが知りたいです

    フォルダ内に「01.xlsx」「02.xlsx」…「10.xlsx」という10個のブックがあります。 各ブックの中には、ブック名に対応した形で「01」「02」…「10」というシート名のシートが一つだけ入っています。 同フォルダ内に「matome.xlsx」というブックを用意して、マクロ処理をかけることで、「matome.xlsx」の中に「01」「02」…「10」のみの10個のシートが入った状態にしたいです。 マクロ処理をかける前の「matome.xlsx」のシートには、「sheet1」という、シートが一つだけ入っている状態です。 仕事のデータをまとめるのに、困っています。。。 何かいい方法はありますでしょうか。 マクロに詳しい方、お教えいただければ幸いですm(_ _)m

  • ひと月分のシートを新ブックにまとめたい

    当方、業務でExcel2003を使用しています。 タイトルに書いたように、一月分のエクセルのシートをマクロで新ブックを作成し、纏めたいと考えています。 残念ながら私はVBAについては最近知った程度ですのでほぼ判りません。 どなたか教えていただけるとありがたいです。 【PC】 OS→XP Excel→2003 【やりたいこと】 添付画像の図3-1と図3-2のような結果が欲しいです。 具体的に申し上げますと、 日々、添付画像の図1のようなフォーマットで表に入力する業務があります。 1日分で5シートほどになり、月にすると70シートぐらいの量になります。 この一月分のシートは日毎にシート名が振られており、 例えば、6月6日であれば0606-1、0606-2、0606-3、0606-4、0606-5というふうになっています。 また、予め「まとめ」フォルダのConclusion.xlsというブックにまとめられています。 シートの順番も6月分であれば、 0601-1、0601-2、0601-3・・・・・・0631-3、0631-4、0631-5となっています。 VBAで図1の表(1)D5~M14(緑の背景色部分)を拾い上げ、 同「まとめ」フォルダ内に新ブック(例:6月分まとめ.xls)を作成し(図2-1)、 「自工場まとめ」シートにセルA1から昇順で羅列し、 おなじく図1の表(2)D17~M26(青の背景色部分)を拾い上げ、 同「まとめ」フォルダ内のブック名6月分まとめ.xlsに、 新シートを作成(シート名:他工場まとめ 図2-2)、セルA1から昇順で羅列。 なお、図3-1と3-2には1行目に商品名、商品コード・・・・とありますが、 なくても構いません。 このようなマクロですが、出来る方いらっしゃいますでしょうか。 よろしくお願い致します。

  • VBAで複数シートを新たに作成したBookにコピー

    いつも大変お世話になります。動作環境は、WindowXPSP3、EXCEL2010です。10個の名前付きsheetがあります。Book.xlsmから新たにBook1.xlsxを作成してこのBook1.xlsxに1個のsheet名が「sheet1」を作成します。そして、Book.xlsmにある10個の名前付きsheetをBook1.xlsxに作成した一個のsheet1にコピーします。コピーの仕方は、Book.xlsmの一番左端のsheetから順番にBook1.xlsxに作成した1個のsheet1に下から上に向かってコピーしていきます。最終的には、10個の名前付きsheetが纏められます。後一つの条件は、一番最初にコピーするシートには4行目に項目書かれております。なので、一番最初にコピー4行目だけはコピーして、後は、5行目からコピーしたく、下記のマクロを作成しました。 Option Explicit Option Base 1 Public Sub シートの纏め() Dim i As Long Dim mySheetCnt As Long Dim mySheetName() As String Dim ws As Workbook Dim s As Worksheet '========================================================================== mySheetCnt = ThisWorkbook.Sheets.count ReDim mySheetName(1 To mySheetCnt) For i = 1 To mySheetCnt - 3 mySheetName(i) = Sheets(i).Name 'MsgBox "変数mySheetName(" & i & ")=" & mySheetName(i) Next i '========================================================================== Dim EffectiveRow As Long Dim EffectiveColumn As Long EffectiveRow = Range("B65536").End(xlUp).Row 'MsgBox "EffectiveRow = " & EffectiveRow & "" EffectiveColumn = Cells(4, 256).End(xlToLeft).Column 'MsgBox "EffectiveColumn = " & EffectiveColumn & "" '========================================================================== Dim Book1 As Workbook For i = 1 To mySheetCnt - 3 If mySheetCnt = 11 Then GoTo Label1 'MsgBox "mySheetName(i) = " & mySheetName(i) & "" 'MsgBox "デフォルトで" & Application.SheetsInNewWorkbook & "枚作成されます" Workbooks.Add Application.SheetsInNewWorkbook = 1 Sheets("sheet1").Select Book1 = ActiveWorkbook.Name Workbooks("Bookxlsm").Worksheets("mySheetName(i)").Range("B4:AF58").Copy _   Workbooks("Book1.xls").Worksheets("sheet1").Range("B4") ⇐ここで、実行時エラーが出ます。 Next i Label1: End Sub しかし、実行時エラーで止まってしまいます。もう、1週間格闘しております。どなたか、何卒ご教授して頂きたく、宜しくお願い申し上げます。

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

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル範囲を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 このサイトで殆どよく似た回答を読んだのですがうまくいきません。VBA初心者です。 よろしくお願いします。 【前提】 ・実行する端末のOSはWindows 10 ExcelはOffice365 ProPlus ・対象フォルダはネットワーク接続フォルダ  この中に、複数のExcelブック(xlsx、xlsm)があります。 ・抽出したい対象は、各ブック内の「台帳」シートの「A3:Cの最終行」で  複数のブックの中には「台帳」シートが含まれていないブックも混在しています。 【抽出一覧作成イメージ】 ・「集約.xlsm」ブックの「集計」シートの2行目から抽出した結果を一覧表示する。 ・「集約.xlsm」ブックにマクロは登録する ・表示はA列に抽出元ブック名(=ファイル名)、B列からD列に抽出元「A3:Cの最終行」セルの値。 ・「A3:Cの最終行」セルの値を「集約.xlsm」ブックの「集計」に貼り付ける際には「値で貼り付ける」が望ましい。

  • 別ブックのシート名称一覧を作成したい

    excel2016 自ブックの中でシート名一覧作成というマクロはwebにあったのですが、 他ブックのシート名一覧を自ブックへ作成というのを どの様に対応したらよいのかがわかりません。 やりたい内容は、 ①自ブックを開く(シート収集するファイル) ②file_openマクロ実行  c:\workにあるfile.xlsmのブックを開く(file.xlsmが他ブック) ③file.xlsmの全シート名称一覧を  自ブックのsheet1シートのA1セルから下へシート名称記載させる。  file.xlsmに登録されているシート名称は日付と時刻と時刻  202110070830 202110071700  … みたいな12桁のシート名称になっている ③自ブックsheet1のB1からB列最終行(A列にデータがある最終行)  まで必要なセルに1を設定 ④自ブックB列でセルに1があれば、他ブックの対象シートを自ブック  へコピー 以上①~④をマクロで対応したいのですが ③の内容がわからないのでベタでマクロ教えていただきたく、よろしくお願いします。

  • 一つのブックで作成したマクロを複数のブックにコピーするには?

    OSはXP_SP2、EXECEのバージョンは2003です。 (たとえば) D:\testというフォルダに1.xlsから2000.xlsというシート構成同一のブックが2000個あるとします。 「1.xls」のThisWorkbookにprivate subマクロを作成してテストを行い、 その後、2.xls~2000.xlsまでのブックのそれぞれのThisWorkbookにそのマクロを一気にコピーするとかの方法があるのでしょうか?

  • (VBA一部使用中)手作業部分を減らしたいです・・

    こんばんは、 EXCEL2010を使っています。 A.xlsm B.xlsm C.xlsm BOOK1.xlsx ~ BOOK10.xlsx(ファイルごとに行数はバラバラ、列数はA~Dで固定) というファイルがあり、すべて開いている状態です。 使用しているのはすべてSheet1のみです。 1.BOOK1.xlsxのA~D列を手動でコピー 2.A.xlsmのA~D列にBOOK1.xlsxのA~D列を手動で貼付け macro1というマクロを実行(A~E列をマクロでB.xlsmのA~E列にコピー&貼付け) 3.B.xlsmでmacro2というマクロを実行(I1~K1に数値が出現、マクロでコピー状態) 4.C.xlsmのB18~D18に手動で貼付け 5.1に戻ってBOOK2.xlsxで以下同じ作業   C19~D19に貼付け   これをBOOK10.xlsxまで続けて保存 これをA,B,Cのファイルを使用したまま マクロを使って簡略化することは可能でしょうか? (例えばボタンを押したら1~4までを自動でやってくれるような) よろしくお願いいたします。

  • VBA ワークシートオブジェクトがうまく使えない

    以下のサブプロシージャ、動きません。 Sub main() Dim Thissheet As Worksheet Set Thissheet = ActiveSheet Workbooks.Open Filename:="Book2.xlsx" Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) Range("B1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 2) ActiveWindow.Close End Sub 機能:Book1.xlsxで上記マクロを起動すると、Book2.xlsxを開きセルの一部ををBook1にコピーし、閉じる エラーメッセージ: コンパイルエラー メソッドまたはデータ メンバーが見つかりません。 Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) この行のThissheet.で引っかかります。 ちなみにThissheetの代わりにWorksheets(1)を用いるとうまくいきます。 Thissheetを用いた場合、何がマズイのでしょうか? 以下の認識で書いてますが、誤りあるでしょうか? ThisWorkbook=マクロが納められているワークブック、つまりBook1.xlsx Activesheet= 行を実行した時にアクティブになっているワークシート、ここではBook1.xlsxのマクロ起動時のワークシート

専門家に質問してみよう