• ベストアンサー

エクセルの1シートの内容を複数のシートに分割したい。

前任者から引き継いだエクセルのファイルを見やすくしたいと思っています。 1ページにつき1つの表が作られているのですが、一枚のシートのページ数が膨大で、とても見にくいのです。ページ毎に(一つの表毎に)違うシートにしたいのですが、地道にコピー&ペーストをしなければならないでしょうか。 一発でバチッとページ毎にシートにできる方法はありますか? windowsXP, Excel 2002を使用しています。

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.7

失礼しました。間違いがありました。 再度以下のモジュールで試してください。 ちなみに、 入力データがカラム120まであって、これを30カラムずつ分解するとしたら、 wCOLUMN = 30 '1ページのカラム列数 wSHEET = 4 '1ページのカラム分解数 になります。すみません。 Sub PAGE_分割() Dim sLine As Integer Dim eLine As Integer Dim wPAGE As Integer Dim wLINE As Integer Dim wCOLUMN As Integer Dim wSHEET As Integer Dim sCOL As Integer Dim eCOL As Integer Dim DataSht As String Dim wSHEETCnt As Integer ' wSHEETCnt = 0 wPAGE = 10 'ページ数 wLINE = 50 '1ページの行数 wCOLUMN = 30 '1ページのカラム列数 wSHEET = 4 '1ページのカラム分解数 DataSht = "DATA" 'データのシート名 'ROW For wRow = 1 To wPAGE If wRow = 1 Then sLine = 1 sCOL = 1 Else sLine = eLine + 1 sCOL = eCOL + 1 End If eLine = wRow * wLINE 'COLUMN For wCOL = 1 To wSHEET If wCOL = 1 Then sCOL = 1 Else sCOL = eCOL + 1 End If eCOL = wCOL * wCOLUMN Sheets.Add after:=Sheets(Sheets.Count) 'シートを生成 wSHEETCnt = wSHEETCnt + 1 ActiveSheet.Name = "PAGE" & wSHEETCnt 'シート名を付ける 'ページ単位でデータをコピー Sheets(DataSht).Range(Sheets(DataSht).Cells(sLine, sCOL), Sheets(DataSht).Cells(eLine, eCOL)).Copy _ Destination:=Sheets("PAGE" & wSHEETCnt).Range("A1") Next Next End Sub

nok_nok
質問者

お礼

できました! きれいに表ごとにシートに分割されました。 ほんと、すごいです~~。これで、仕事が数段はかどります。 ありがとうございました。

その他の回答 (8)

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.9

[コピー&ペースト]ではなく[カット&ペースト]…列単位が可能なら[切り取ったセル挿入] 得意先、氏名等 複数sheetに必要な項目は、 入力場所は一つにして、他のsheetは式で参照するようにします。

nok_nok
質問者

お礼

回答、ありがとうございました。 地道にコピペをやっていたんですが、参照箇所も多く、また、データも大量なものですから、簡単にできる方法を探していました。 ご意見、ありがとうございました。

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.8

Sheetをコピーして、不要な行、列を削除してはどうでしょうか このとき他のセルで参照している項目を削除すると#REF!とエラーになるのでこの部分の参照項目を新しいSHeetの項目に書き換えます。 最初に作成するSheetを入力項目を主(式も可)にすると変換がスムーズに行くと思います。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.6

>「1カラムの列数」というのは、表の列数のことでいいんでしょうか? すみません。 1カラムの列数というのは、列の分解数です。 例えば、入力データがカラム120まであって、これを30カラムずつ分解するとしたら、4にすればいいです。

nok_nok
質問者

お礼

なるほど~。そういうことなんですねー。 勉強になりました。ありがとうございました。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.5

すみません。 ROWとCOLUMNの指定が間違いました。以下のように修正してください。 'ページ単位でデータをコピー Sheets(DataSht).Range(Sheets(DataSht).Cells(sCOL, sLine), Sheets(DataSht).Cells(eCOL, eLine)).Copy _ Destination:=Sheets("PAGE" & wSHEETCnt).Range("A1") | V Sheets(DataSht).Range(Sheets(DataSht).Cells(sLine, sCOL), Sheets(DataSht).Cells(eLine, eCOL)).Copy _ Destination:=Sheets("PAGE" & wSHEETCnt).Range("A1")

nok_nok
質問者

補足

早速のお返事、ありがとうございます。 でも、今回も同じところで止まってしまいました。 また、今回はシートは増えましたが何も載っていないシートで、 表は分割されていない状態でした。 お手数おかけして恐れ入りますが、よろしくお願いします。 <(_ _)>

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.4

No.2 です。 1カラムの列数を入れてください。 Sub PAGE_分割() Dim sLine As Integer Dim eLine As Integer Dim wPAGE As Integer Dim wLINE As Integer Dim wCOLUMN As Integer Dim sCOL As Integer Dim eCOL As Integer Dim DataSht As String Dim wSHEETCnt As Integer ' wSHEETCnt = 0 wPAGE = 20 'ページ数 wLINE = 50 '1ページの行数 wCOLUMN = 10 '1カラム列数 DataSht = "DATA" 'データのシート名 'ROW For wRow = 1 To wPAGE If wRow = 1 Then sLine = 1 sCOL = 1 Else sLine = eLine + 1 sCOL = eCOL + 1 End If eLine = wRow * wLINE 'COLUMN For wCOL = 1 To wCOLUMN If wCOL = 1 Then sCOL = 1 Else sCOL = eCOL + 1 End If eCOL = wCOL * wCOLUMN Sheets.Add after:=Sheets(Sheets.Count) 'シートを生成 wSHEETCnt = wSHEETCnt + 1 ActiveSheet.Name = "PAGE" & wSHEETCnt 'シート名を付ける 'ページ単位でデータをコピー Sheets(DataSht).Range(Sheets(DataSht).Cells(sCOL, sLine), Sheets(DataSht).Cells(eCOL, eLine)).Copy _ Destination:=Sheets("PAGE" & wSHEETCnt).Range("A1") Next Next End Sub

nok_nok
質問者

補足

回答、ありがとうございます! でも、今回はうまくいきませんでした~。 「1カラムの列数」というのは、表の列数のことでいいんでしょうか? そう理解してやってみたら、列方向では分割されず、その数の行で切れた表が別シートに出てきました。 それから、最後のところ、 Sheets(DataSht).Range(Sheets(DataSht).Cells(sCOL, sLine), Sheets(DataSht).Cells(eCOL, eLine)).Copy _ Destination:=Sheets("PAGE" & wSHEETCnt).Range("A1") で止まってしまいました。 マクロ、まったくの素人なので、何が起こっているのか理解不能です・・・。よろしくお願いします!

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

マクロでやる方法です。 縦横の改ページの位置から自動的にコピー範囲を取得し、シートを追加してコピーします。したがって、各表の間に改ページがある必要があります。 まずAlt+F11を押すとVBAの画面が開くので、左側のツリーからブック名を選択し、右クリックから「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。 Sub 表をシートに分割()  Dim V_Page As Integer, H_Page As Integer  Dim V As Integer, H As Integer  Dim Top As Integer, Left As Integer  Dim Bottom As Integer, Right As Integer  Dim NewWS As Worksheet  Dim P_Area As Range  With Worksheets("Sheet1") '元の表があるシート名を指定   H_Page = .HPageBreaks.Count + 1 '行方向のページ数   V_Page = .VPageBreaks.Count + 1 '列方向のページ数   Set P_Area = .Range(.PageSetup.PrintArea) '印刷範囲を取得   For V = 1 To V_Page '列方向のループ    For H = 1 To H_Page '行方向のループ     'コピーする表の左上の行番号を取得     If H = 1 Then      Top = P_Area.Cells(1).Row     Else      Top = .HPageBreaks(H - 1).Location.Row     End If          'コピーする表の左上の列番号を取得     If V = 1 Then      Left = P_Area.Cells(1).Column     Else      Left = .VPageBreaks(V - 1).Location.Column     End If          'コピーする表の右下の行番号を取得     If H < H_Page Then      Bottom = .HPageBreaks(H).Location.Row - 1     Else      Bottom = P_Area.Cells(P_Area.Cells.Count).Row     End If          'コピーする表の右下の列番号を取得     If V < V_Page Then      Right = .VPageBreaks(V).Location.Column - 1     Else      Right = P_Area.Cells(P_Area.Cells.Count).Column     End If          'シートを一番後ろに追加     Set NewWS = Worksheets.Add(after:=Worksheets(Worksheets.Count))     NewWS.Name = "表" & (V - 1) * H_Page + H '表の名前をつける           '表を追加したシートにコピー     .Range(.Cells(Top, Left), .Cells(Bottom, Right)).Copy NewWS.Cells(1, 1)    Next   Next  End With End Sub その画面でF5キーを押すか、Alt+F11でExcelの画面に戻ってAlt+F8からマクロを実行してみてください。「表1」「表2」というシートに各表が分割されます。

nok_nok
質問者

お礼

回答ありがとうございました。 手順がわかりやすくて、大変参考になりました。 F5で実行すると途中で止まってしまうのですが、多分私の入力ミスかと・・・。 いろいろ試してみます。 ありがとうございました。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

VBAを利用すれば出来ると思いますが、但し頁の行数が一定の場合のみです。如何でしょうか。 ページ数、1ページの行数、データのシート名は変えてください。 シートを生成しながら「PAGE1~」コピーします。 Sub PAGE_分割() Dim sLine As Integer Dim eLine As Integer Dim wPAGE As Integer Dim wLINE As Integer Dim DataSht As String ' wPAGE = 20 'ページ数 wLINE = 50 '1ページの行数 DataSht = "DATA" 'データのシート名 For wRow = 1 To wPAGE If wRow = 1 Then sLine = 1 Else sLine = eLine + 1 End If eLine = wRow * wLINE Sheets.Add 'シートを生成 ActiveSheet.Name = "PAGE" & wRow 'シート名を付ける 'ページ単位でデータをコピー Sheets(DataSht).Rows(sLine & ":" & eLine).Copy _ Destination:=Sheets("PAGE" & wRow).Range("A1") Next End Sub '(1) Alt+F11 (ツール -> マクロ -> Visual Basic Editor) '(2) 挿入 -> 標準モジュール -> 上記のモジュールを貼り付けて実行(F5を押す)する

nok_nok
質問者

お礼

できました!! すごいです! ありがとうございました。 列方向でも分割したいのですが、それもできるでしょうか?

noname#204879
noname#204879
回答No.1

「一発でバチッとページ毎にシートにできる方」はありません!

nok_nok
質問者

お礼

回答ありがとうございました。 地道にコピペするしかないんですかねえ・・・。がんばります。

関連するQ&A

  • エクセル2007 各シートの内容を集約したい

    お世話になります。 職場で使用しているエクセルの表から、 各シートの内容をひとつにまとめて一度保存し、開こうとしたら壊れてしまい開けません。 添付した画像のように、シート「父」「母」「子」・・で家計簿的なものを入力している表です。 (シート名などはさし障りがあるため、変更しています。) 【やりたいこと】 シート「父」「母」「子」の「列1→列5」の箇所を1つのシートにまとめたい。 コピーペーストして一度1シートにまとめてみたのですが、 壊れて開けなくなってしまいました。 このシートの表は前任者から引き継いでおり(前任者は退職のため聞けず)、 表の設定のためか?と表上部のフィルタは外せたのですが、 下のフィルタは外せませんでした。 (プルダウンで「なし」「平均」等と表示されている箇所です) またこのデータはUSBで職場から家に持ち帰ってきて加工しています。 エクセルのバージョン(2007)は同じなのですが、それも問題があるのでしょうか。 補足の必要があればいたします。 よろしくお願いいたします。

  • エクセルのシート

    エクセルのシート エクセルで作った表をコピーして、同じファイル内で、 シートを新しくしてペーストしたいのですが、 セルの幅と高さの情報は反映されません。 そっくり同じものをコピー&ペーストするには、 どういう手順を踏めばよろしいのでしょうか? こちらの環境は、Mac10.5.8、EXCEL Mac2008です。 よろしくお願いいたします。

    • ベストアンサー
    • Mac
  • エクセルの複数シートpdf印刷が2分割される

    使用 EXCEL2007 ・ Adobe Acrobat 8 STANDARD エクセルで10シートを選択し、印刷プレビューを見ますとページ数は10ページとなっており、プリンタなどで印刷すると正常に10枚印刷されます。 問題はプリンタ選択でadobe PDFを指定し印刷をすると5ページでファイルの保存先を聞いてきます。それを終了させると残りの5ページ分も同じようになります。 結果5ページづつの2ファイルとなってしまします。どのようにすれば10ページ1ファイルでPDFが作成できるのでしょうか? よろしくお願いします。

  • 1シート内にまとめられているデータを分割してコピーし、それを別の複数の

    1シート内にまとめられているデータを分割してコピーし、それを別の複数のシートにペーストする方法があれば、教えて下さい。 例えば、学校の成績を、教科ごとに表示するシートから、生徒ごとに表示するシートへとデータをコピーする、なんていう場合を想定して下さい。 <教科のシート> シート1:国語のテストの点数表(生徒1~3の点数の一覧) シート2:数学のテストの点数表(生徒1~3の点数の一覧) シート3:英語のテストの点数表(生徒1~3の点数の一覧) <生徒のシート> シート101:生徒1の英数国の点数 シート102:生徒2の英数国の点数 シート103:生徒3の英数国の点数 という場合、 シート1から、生徒1の国語の点数をコピーし、シート101へペースト。 シート1から、生徒2の国語の点数をコピーし、シート102へペースト。 シート1から、生徒3の国語の点数をコピーし、シート103へペースト。 シート2から、生徒1の数学のテンスをコピーし、シート101へペースト。 シート2から、生徒2の数学の点数をコピーし、シート102へペースト。 シート2から、生徒3の数学の点数をコピーし、シート103へペースト。 シート3から、生徒1の英語の点数をコピーし、シート101へペースト。 シート3から、生徒2の英語の点数をコピーし、シート102へペースト。 シート3から、生徒3の英語の点数をコピーし、シート103へペースト。 という具合に、コピー・ペーストを『自動化』して、行いたいのですが、 このようなことは可能でしょうか? (実際のデータは、教科数も生徒数も、もっと沢山あります。) 方法としては、マクロ(VBA)を利用したものでも結構です。 どなたかお詳しい方、お力をお貸し下さい。 必ずお返事致します。(ポイント付与も確実に行います。)

  • エクセルで複数シートを参照

    お世話になります。 タイトルが曖昧で申し訳ありません。 エクセル初心者なのですが、操作でひとつ解決しない点があるのでご教示いただければ幸いです。 現在、勤務表のエクセルデータがあります。 「勤務表.xls」ファイルは、月ごとにシートを増やして同じ雛形で勤務表を作成しています。 そのため、シート数が非常に膨大なものになっています。 あまりの膨大さに、過去の勤務表を参照するときに不便が生じています。 そこで考えたのが、Sheet1にリストのようなものを作成し、リスト内の項目を選択するとSheet1のリストの直下に選択した項目のデータが表示されるというものです。 項目は各シートと連動しており、要は参照したい月を選択するだけで、Sheet1にデータが表示されるという仕組みです。 と、データを参照するための方法は考えたのですが、何分初心者なので、やり方がわかりません。 色々と書籍を参照したりしたのですが、見つからずにこの場をお借りしました。 質問も的を得てなくて分かりづらいと思いますが、このような方法は可能なのか、ご教示ください。 よろしくお願いします。

  • エクセルVBA複数ファイルのデータを1つのシートに

    (1)サーバー上にある圧縮ファイルをダウンロード (URLはエクセルの一覧表をクリック)※図A (2)ダウンロードした圧縮ファイル(ZIP形式)を解凍する (3)エクセルファイルを開いて範囲を指定してコピー (コピーする範囲はB2:C101の100行2列のデータ)※図B (4)コピーしたデータを別ファイルのエクセルシートにペースト (シートは1枚、下に下に続けてペースト) 表にあるURL一覧の最後まで(1)~(4)を繰り返す (パソコン環境) Windows10 Google Chrome Excel2010

  • Excelのシートを1枚にまとめる方法について

    Excelについて、日報のようなもので1つのファイル内に複数のシート(約30シート/1ファイル)が作成してあります。 これを1ページにまとめるような方法があればご教授ください。 コピー・ペーストで地道にやり始めましたが、操作ミスがあるような気がして、今一つ不安になってしまいます。 項目ごとに集計するのではなく、単純に縦に並べていきたいのです。 よろしくお願いします。

  • エクセルで複数のシートにあるものをひとつに

    お世話になっております。 似たような質問を検索してみましたが、いまいち要領がつかめませんので教えて下さい。 ブックに複数のシートがあり、それをを同じブックまたは、別のブックでもいいので一つのシートにまとめたいのですが何かいい方法はありますでしょうか? ブックにより、シート枚数が違います(多いものは30シート以上)。 同じブックでの各シートの列のタイトルは同じで、行はデータ量により違います。(多いものは1000行以上) イメージとしては、シートを全コピーして、新しいシートにペースト。 次のシートを全コピーしてそれを、今ペーストした下の行にペースト。 現在はこのコピー&ペーストで地道に作業しております。 かなり時間を取られております。 XPでオフィスは2007を使用しております。

  • エクセル上の縦長の表を特定の範囲で複数のシートに分ける方法を教えて下さ

    エクセル上の縦長の表を特定の範囲で複数のシートに分ける方法を教えて下さい。 当方、下請けの仕事でエクセルの資料をお借りしたのですが 同じ表(A4サイズの印刷設定有り)が縦に並んでおり 1シートに10ページから25ページの表があります。 ファイルも7ブックあり、1ブックに2シートのものや、4シート、5シートのブックもあります。 普段は下請けも少なく自社のデータで仕事しているのですが 仕事上、データを更新するのに1日に3、4ページ分の表しか更新しませんし 更新作業の入力も外注に発注しているので、データの確認や 必要な表のページ数を指定して印刷など、非常に手間が掛かってしまいます。 ひとつひとつ切り取り、貼り付けをしていましたがこれも手間が掛かってしまいました。 マクロの知識がないのですが、マクロで解決できないでしょうか。 使用しているのはExcel2003です。 借りた資料の表は1ページが 「9列・31行」のA4縦サイズが縦に繋がって並んでいます。 宜しくお願い致します。

  • エクセル、複数枚のシートを一枚にまとめるには

    エクセルで、一つのファイルに10枚以上ののシートがあったとします。 これを、一枚のシートにまとめたいのですが・・。 マクロは、まったくわかりません。 コピーで持ってくる方法はあるのですが もっと簡単に出来る方法はありますか。 あれば、教えてください、よろしくお願いします。

専門家に質問してみよう