• ベストアンサー

マクロでシートをまとめる

EXCEL97で200枚くらいのシートのデータを1つのシートにまとめようと思っています。 例えばE2~Z2のデータ(ほかのセルにも計算の参照をしているデータあり)だけを1枚のシートに上から下に順番に並べていきたいと思っています。 この場合値コピーをするか元のシートのデータを計算の参照にしないといけないと思いますがそれはどちらでもいいです。この場合マクロでどうプログラムを組めばいいでしょうか?

  • uk5050
  • お礼率93% (196/209)

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

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

次のマクロを実行すると、3行目で指定したシート名のシートを一番左に 追加作成し、各シートの2行目で指定した範囲の値を順に集めます。 指定したシート名が、既に存在する場合は、そのシートを一番左に移動し、 現データで書き換えます。 集めた側のシートの配置が、書かれていませんので、一応、A1からにしています。 Sub GetAllShData() '-------- 設定事項 --------- Const GetHani = "E2:Z2" ' <--- 各シートのコピー範囲(1行) Const PutShName = "まとめ" '<--- 集めるシート名を指定 '--------------------------- Dim N As Integer For N = 1 To Worksheets.Count   If Worksheets(N).Name = PutShName Then Exit For Next N If N > Worksheets.Count Then   Worksheets.Add Before:=Sheets(1)   Worksheets(1).Name = PutShName Else   Worksheets(N).Move Before:=Worksheets(1)   Worksheets(1).Cells.Delete End If For N = 2 To Worksheets.Count   Worksheets(N).Range("E2:Z2").Copy   Worksheets(1).Select   Range("A" & N - 1).Select   Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _     SkipBlanks:=False, Transpose:=False Next N Application.CutCopyMode = False End Sub

uk5050
質問者

お礼

ありがとうございます。 家でのテストデータでは問題なくできました。

その他の回答 (2)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

コピー&ペーストを使わない方法で書いてみました。 書式設定も持ってくる必要がある場合は向きません。 集計したいシート200枚は同一ブック内にあるという前提です。 先頭にシートを追加して纏めます。 Resize(1, 22) の 22 は E列から22列目(Z列)までの意味です。 試すならテスト環境で。 Sub Test() Dim ws As Worksheet, i As Integer, cnt As Long With ThisWorkbook  Set ws = Worksheets.Add(before:=.Worksheets(1))  cnt = 2  For i = 2 To .Worksheets.Count   ws.Range("E" & cnt).Resize(1, 22) = _   .Worksheets(i).Range("E2").Resize(1, 22).Value   cnt = cnt + 1  Next i End With End Sub

uk5050
質問者

お礼

ありがとうございます。 家でのテストデータでは問題なくできました。

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

簡単なテストデータでは上手く行きましたが、「ほかのセルにも計算の参照をしているデータあり」とか「元のシートのデータを計算の参照にしないといけないと」とややこしいことが質問に書いてあるので、自信がありませんが、良ければ2-3シートでテストしてください。 その場合下記でSheet4やSh4は集約するシートのシート名等ですから、実際にあわせて変えること。 また列はC列が各シートを通しての、最右列としていますが 実際は全シートを調べて最右列の記号に置換えてください。 Sub test01() Dim sh As Worksheet Dim sh4 As Worksheet Set sh4 = Worksheets("sheet4") s = 1 For Each sh In Worksheets If sh.Name = "Sheet4" Then ' MsgBox sh.Name Else sh.Select Selection.End(xlDown).Select Selection.End(xlUp).Select d = Selection.Row sh.Range(sh.Cells(1, "A"), sh.Cells(d, "c")).Copy Sheets("Sheet4").Select sh4.Cells(s, "A").Select ActiveSheet.Paste s = s + d End If Next End Sub また(集約)累積される順番はシートタブの見えている 左からの順番になリます。実行の前に都合の良いように並べておいて下さい。

uk5050
質問者

お礼

ありがとうございます。 火曜日に会社に行かなければ分からないですが、 家でのテストデータでは問題なくできました。

関連するQ&A

  • シート名だけを変えてコピーしたい

    Excel 2003を使用しています。 添付画像は、一時的に数式を表示するようにしています(どのセルに今どのような計算式が入っているか)。 Sheet6 の セルB2からセルF2迄、データ1の値を参照する計算式が入っていますが、 これを、3行目から6行目まで、シート名の違う、計算式をコピーしたいのですが、 どのようにすれば良いでしょうか? 縦にコピーした後、参照式のシート名と行番号を変更しています。 例えば、セルB2をセルB3にコピーしたら、セルB3の参照式は データ1!A2となっています。 これをデータ2!A1としたいのです。 実際に計算式の入っているシートは、もっと沢山の参照式が入っているので元の計算式の方法を 変更は難しいです。

  • 複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロ

    複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロで行いたい。 マイドキュメントのデーターというフォルダ内に エクセルファイルA(シート名みかん) エクセルファイルB(シート名りんご) エクセルファイルC(シート名バナナ) エクセルファイルD(シート名ぶどう) エクセルファイルE(シート名いちご) があります。 雛形は同じです。すべてA列~F列までデータが入っています。 行数はファイルによって違います。 また毎日自動で上書き更新され、毎日行数が変わります。 エクセルファイルZがあります。シートが7個あります。 ・変換 ・集計 ・みかん ・りんご ・バナナ ・ぶどう ・いちご エクセルファイルZを開きます。(各シートには昨日のデータが貼り付けてあります。) マイドキュメントのデーターフォルダも開いておきます。 エクセルファイルZにおいて「マクロの記録」を起動。 エクセルファイルZの 【みかん】~【いちご】までの5シートを全データDELETEします。 開いてあるフォルダ「データー」の中からエクセルファイルAを開きます。 (タスクバーにいます) ファイルAのシート【みかん】の全データ選択して エクセルファイルZの【みかん】というシートのA1セルにカーソルを あわせて貼り付けします。 開いてあるフォルダ「データー」の中からエクセルファイルBを開きます。 (タスクバーにいます) ファイルBのシート【りんご】の全データ選択して エクセルファイルZの【りんご】というシートのA1セルにカーソルを あわせて貼り付けします。 これと同じ操作を【バナナ】【ぶどう】【いちご】も行います。 エクセルファイルZにおいて「マクロの記録」を終了させます。 マクロができあがりました。 ファイルZを上書き保存して終了。再立ち上げで記録したマクロを実行。 エラーにはなりませんが、ファイルZの5種類各シートに ファイルA~Eのデータが貼りつきません。 何か無理な事をしているのでしょうか? もしかしてシート名が同じだと駄目?とためしにファイルZのシート名【みかん】~【いちご】を 【みかんZ】~【いちごZ】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • エクセルマクロでファイル名やシート名変更できない

    エクセルは初心者なのでマクロを自動記録して作成しています。 少しづつ動作を小分けにして記録して、まとめてボタンで連続実行させるようにしました。 (1)作成途中で失敗したら最初からの作業になると思い、 ある程度進んだら何度かファイルのコピーを作成して進めていました。 ある程度完成した時点でファイル名が「○○○4~コピー~」の様な名前だったので、正式に名前を決めて変更したらマクロの実行が出来なくなりました。(元の名前に戻すと実行可能) (2)またシートも複数のシートに跨って参照するようなマクロです。 シート名を分かりやすい名前に変更したらこの場合もマクロ実行できなくなりました。 (3)コピーしたファイルもマクロ実行できないものがあります。 コピーしたファイルはマクロ実行できないのでしょうか? (4)ファイル作成途中で何かの変更が生じて列や行の挿入を行った場合、 特定のセルを参照して計算するマクロは実行できなくなるのでしょうか? その場合、簡単に修正する方法はありますか? 初心者にも分かるような回答をよろしくお願いいたします。

  • EXCELのシート名を自動参照

    EXCELのワークシートの名称を、例えばA1セル内にある文字列を参照させて変更させるマクロは可能でしょうか? 具体的には ・日々使用している様式(ワークシート)をコピー ・コピーしたシートへ、他のファイルからデータを貼付 ・貼付けたデータのひとつのセルを参照してワークシートの名前を変更 といった作業をマクロで一発処理しようと考えています。 参照させるデータはロットナンバーですので、毎回異なります(セルは同一です)。 単純にマクロの記録で該当セルをコピーした後、名前タブへ貼り付けてもうまくいきませんでした。

  • マクロの自動実行などについて

    エクセル2003のVBAマクロについて質問です あるワークシートに値が入力されたら、マクロを自動実行するように出来ないでしょうか? 又、そのセルの値を別のセルにコピーしたいのですが、データを入力する度にセルの場所が ひとつ下へずれます。この最終列のセルの値を必ず拾うようにするにはどうすればよいでしょうか? ややこしくてすいません

  • Excelのマクロを使ってワークシート1にワークシート2のセルの値をコ

    Excelのマクロを使ってワークシート1にワークシート2のセルの値をコピーするマクロを作りたいと思っています。 例えば、ワークシート2のA1~A30のセルには1~30の値が順に入っているとします。 それをA1から3の倍数分、つまりA1,A3,A6,A9,・・・,A27,A30の値を ワークシート1のA1~A11のセルに自動で挿入してくれるマクロってどう作ればいいのでしょうか? わかりにくいかもしれませんが、よろしくお願いします。

  • エクセル マクロ 検索 シート作成

    Excellマクロで検索とシート作成等を行いたいのですが、全くの素人のためご教授願えればと思います。 具体例として、範囲A-Z列まで約2000行のデータが存在します。 (1)Z列のセルの値に着目し、セルの値と同じ名前のシートが存在するか確認する。 (2)セルの値と同じ名前のシートが存在しない場合、セルの値と同じ名前のシートを作成する。(既に存在する場合は作成しない) (3)範囲A-Z列の行データをセルの値と同じ名前のシートに追加する 以上の(1)(2)(3)の作業を1-2000行で繰り返すようにしたいです。 解りやすくご説明いただけると幸いです。宜しくお願いいたします。

  • エクセルのシート1枚だけ保存するマクロ

    いつもお世話になります。 エクセルのシート1枚だけを別ファイルに保存したいのです。 過去ログを見て、そのサブをモジュールに貼り付けて試しているのですが、うまく行きません。 アドバイスをお願いします。 状況は以下の通りです。 シート1に帳票のフォーマットを作成してあります。 シート2にデータが並んでいます。 シート2のデータを順番にシート1に表示して印刷するマクロは作成しました。ただセルの値をコピーするだけなので単純です。 そのシート1だけを保存したいのです。 Sheet1.SaveAs (ファイル名) だとブック全体が保存されてしまいます。 ワークブックの保存になっていてもいいのですが、内容はシート1だけを保存したいのです。 シート1にはイメージコントロールが3個あり、画像も入れ替わりますが、式は入っていません。 ファイル名は帳票の個別名称を使用しますので重複はしません。 シート名にしなければならない場合でも処置できます。 皆様の助言をお願いいたします。 エクセル2003を使用しています。

  • 【Excel VBA】指定されたシートに該当のデータをコピーする

    Excel2003を使用しています。 あるセルに入力されている値と同じ名前のシートに、そのセルと同行のデータをコピーするというマクロを作成したいのですが。。。 例えば、Sheet1のC4セルに「1234」(文字列です)と入力されていたら、「1234」シートに、Sheet1のC4セルと同行のデータを貼り付け、Sheet1のC5セルに「1235」と入力されていたら、「1235」シートに、Sheet1のC5セルと同行のデータを貼り付け…といった感じで、Sheet1のC列(C4セル以下)に入力されている値を元に、それぞれのシートへ順番にデータをコピーしたいのです。 うまく表現できなくて、わかりづらいと思いますが、都度補足させていただきますので、よろしくお願いします。

  • Excelマクロで、多数のシートの値だけを元のファイルに上書きするようなマクロを教えていただきたいのですが。

    あまり詳しくないのですが、Excelマクロで、1つのファイルにある40くらいのシートの計算式等をすべて排除した値&図だけを元のファイルに上書きするようなマクロを教えていただきたいのですが。 マクロを使わないでの方法は、 (1)、シート選択 (2)、CTRL+A(すべて選択) (3)、CTRL+C(コピー) (4)、形式を選択して貼り付け (5)、値(選択値) これをそのファイルが持っているシート分の繰り返しです。 宜しくお願いします。  

専門家に質問してみよう