• 締切済み

EXCEL 選択したシートのデータをまとめるマクロ

EXCEL2010で質問です。 シート1~10まであったとします。 そのうち、シート3~5を選択しておいてマクロを実行すると、新しいシートにシート3~5のデータをまとめるマクロを教えて下さい。 ファイルの全てのシートをまとめるマクロを見付けたので何とかしようとしたのですが、全然歯が立たずで(>_<) すみません。よろしくお願いいたします。

  • key51
  • お礼率60% (21/35)

みんなの回答

回答No.2

'同じBookの選択されたシートが対象 'シートの並び順で全部または一部データを「Summary」シートに集約 '出力=「Summary」シートは先頭に置く '「xCopyRows」にコピーする行数を指定、0は全体 'データの最終行は「列:A」、最終列は「行:1」で決める '「xHead」にヘッダの行数を指定、0以外はヘッダあり、0はヘッダなし 'ヘッダは対象の先頭シートからコピーする Sub Summary_SelectedSheetsActiveWindow() Const xCopyRows = 0 Const xHead = 1 Const xNameSummary = "Summary" '先頭に置く Dim xFirst As Boolean Dim xSh As Worksheet Dim xLast As Long, xRight As Long Dim xLast_To As Long Dim jj As Long Dim kk As Long Dim SheetObj As Object Application.ScreenUpdating = False Application.DisplayAlerts = False xFirst = True '複数シートのデータを「Summary」へコピー For Each SheetObj In ActiveWindow.SelectedSheets If (xHead <> 0) And (xFirst) Then '列見出しをコピー SheetObj.Range("1:" & xHead).Copy Worksheets(1).Range("A1") xFirst = False End If If xCopyRows = 0 Then xLast = SheetObj.Cells(Rows.Count, 1).End(xlUp).Row Else xLast = xCopyRows + xHead End If xRight = SheetObj.Cells(1, Columns.Count).End(xlToLeft).Column 'データをコピー If xLast > xHead Then xLast_To = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row If xLast_To > 1 Or xHead <> 0 Then xLast_To = xLast_To + 1 End If SheetObj.Range(SheetObj.Cells(1 + xHead, 1), SheetObj.Cells(xLast, xRight)).Copy Worksheets(1).Cells(xLast_To, 1).PasteSpecial xlPasteValues Application.CutCopyMode = False 'MsgBox (SheetObj.Cells(1 + xHead, 1)) End If Next SheetObj Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

key51
質問者

お礼

ありがとうございます! 一番最初に貼り付けられるのですね。新しいシートが作られるのかと思ったのですが、それはそれでOKです。助かりました。 ソースを見ても今の自分には???でして・・・こんなに複雑だったのですね。ホントに助かりました。ありがとうございました。 ただ、実はファイルの中には ・各シートの1行目余計なデータ(集計行)があるシートがある ・K列L列にデータを使ってピボットが作られている ものがあります。 この有無はファイル毎に決まっているので、最初に削除しようと思い、 教えて頂いたソースのDim SheetObj As Objectの後に Dim SheetObj2 As Object Dim bunki As Integer bunki = MsgBox("KL列と1行目を削除しますか", vbYesNo) Application.ScreenUpdating = False Application.DisplayAlerts = False xFirst = True For Each SheetObj2 In ActiveWindow.SelectedSheets 'bunkiがyesなら削除 If bunki = vbYes Then Range("k:l").Delete Range("1:1").Delete End If Next SheetObj2 としたのですが、なぜか同じデータを何度か貼り付けてしまいます。 それ以外では問題ないのですが・・・ もしよろしければ、何か対策を教えて頂けないでしょうか? よろしくお願いします。

key51
質問者

補足

ゴメンナサイ(>_<) 私の勘違いで、 最初にSummaryシートを作成しなければならないのですね。 そうすると・・・ 最初にSummaryシートを自動で作るコードを入れようとしたのですが、 Dim newSh As String Dim Sh As Worksheet, myFlag As Boolean   newSh = "Summary"   myFlag = False   For Each Sh In ThisWorkbook.Worksheets     If Sh.Name = newSh Then       myFlag = True       Exit For     End If   Next Sh   If myFlag = False Then     ActiveWorkbook.Worksheets.Add(before:=Worksheets(1)).Name = newSh End If としたのですが、選択しただけ枚数が出来るのと、アクティブシートが変わるためかデータの移行がうまくいかないのです。 あと、Summaryシートが存在する場合は、いったんSummaryシートのデータを削除したいです。 どうすれば良いでしょうか?よろしくお願いします。

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.1

『まとめる』って何? 何をどのようにまとめるのかが明確でなければ、何も始まらない。

key51
質問者

補足

ごめんなさい。説明が不十分でした。 それぞれのシートにあるデータをコピーして、新しいシートに貼り付けると言うつもりでした。 これで分かりますでしょうか??? よろしくお願いいたします。

関連するQ&A

  • エクセルのマクロでシートの選択について

    よろしくお願いします WinXP SP3でEXCEL 2003を使用しています ブック名がtest.xls シートが("目次", "1", "2", "3", "4", "5") とあります ここでは仮に"5"までシートがありますが本来は変数であり、n + 1のように扱いたいです 以下のマクロで"目次"以外の全てのシートを選択しました ~~~~~ Sub Macro1() Dim i As Integer i = 2 Sheets(i).Select For i = i To 6 Sheets(i).Select False Next i End Sub ~~~~~ このマクロですとArrayを使わずとも、"目次"以外のシートを選択できますが For i = i To 6 の6を7以上にするとエラー終了します そこで以下の条件にてシートの選択を行いたいのですが方法がわからず困っております 1・シートの数が多くても"目次"以外のシートを全て選択したいです 2・iがシートの数を超えた場合はエラー終了せず、マクロを終了させたいです 3・Sheets(Array( "1", "2", "3", "4", "5")).Select のようなマクロは組みたくないです 大変恐縮ですが、教えていただけますでしょうか できればマクロをVBEにコピー&ペーストするだけで実行できるような 状態にしていただきますと非常に幸いです 何卒、よろしくお願いいたします

  • エクセルでデータがあるシートだけ印刷するマクロ

    エクセルのマクロで印刷するマクロを使っていますが、5つある ワークシートを全て選択して印刷するマクロでこれをデータ(数値)が 入っているワークシートだけ印刷するマクロにしたいのですがどのようにすればいいのでしょうか?

  • エクセルVBA(マクロ内でマクロを選択する)

    いつも有難うございます。 表題の件でご教示ください。 エクセルVBAのマクロ内でマクロを選択して実行したいと考えてます。 調べたのですが、単にマクロ内で他のマクロを呼び出す方法はありましたが 「選択して」という点が見つからず、恐縮ですがお願いいたします。 具体的には以下のような内容です。 (1)基本となるデータが1~100まであるとする (2)サブルーチンとしてのマクロ群A~Gがあるとする (3)データ1に対してはマクロAを行い、データ2、3に対してはマクロBを行い・・・という形でそれぞれ対応させるマクロが違う (4)データ50~70は同じマクロを実行したい (5)このときに実行するマクロで ・対象のデータを選択させる(入力BOXで開始番号(50)と終了番号(70)を指定する) ・A~Gのどのマクロを実行させるか選択させる ・データ50~70に対して、選択したA~Gのいずれかのマクロを順次実行していく というものを作りたいと考えています。 全体的なイメージは完成しているのですが、マクロ群を選択させる方法がわかりません。 (マクロ群A~Gはすでに作って使用です) 何卒、宜しくお願いいたします。

  • EXCEL マクロ 選択肢

    現在、営業担当ごとに売り上げなどのデータ集計をするマクロを組んでいます。 マクロはできているのですが、担当者1人につき1つのマクロを組んでいるのでそれを1つに集約したいと思っています。 マクロの内容はほぼ同じで担当者のアルファベットを変えているだけなので、マクロ実行時に担当者のアルファベットを選択させマクロを実行するようにしたいのですが、方法が分かりません。 理想はマクロ実行時に選択肢が表示されその選択した値で分岐させてどの担当者のデータ集計をするかを判断するようなものにしたいと考えています。 よろしくお願いいたします。

  • エクセルマクロでシート内にある画像のみを選択する

    エクセルマクロでシート内にある画像のみを選択する ActiveSheet.DrawingObjects.Select これだとエクセルのシート内にあるすべてのオブジェクトを選択してしまいます。 テキストボックスなどのオブジェクトは選択せずに、写真などの画像のみを 選択したいのですがどのようにしたらよいのでしょうか。 どうかよろしくお願いいたします。

  • 【Excel】シート名について(マクロ)

    Excel2003を使用しています。 あるマクロで Sheets("2007 年 01 月分").Select の選択するシート名が変更されても、そのシートを選択することはできないでしょうか? 例えば、コードを書いたときのシート名は『2007 年 01 月分』で、上記のようにコードを書いていて、次回、そのマクロを実行するときに、シート名を『2007 年 02 月分』に変更しても、同じ(元の)シートを選択してマクロが実行されるようにしたいのですが、そういうことはできますか? できるかできないかだけでもわかると助かります。 もし、できる場合は、どのようにすればいいのでしょうか?説明が足りないようであれば補足しますので、よろしくお願いします。

  • エクセルマクロで複数選択中シート名取得

    Excel2000です。 Ctrl+クリックで複数のシートを選択している状態で(作業グループ状態)、 マクロから現在選択中のシート名を知ることはできるのでしょうか?

  • マクロ シートの選択

    いつも回答して頂き、とても感謝しています。 マクロを実行したブックを指定する時はTHISWORKBOOKですよね。マクロを実行したシートを指定する時にもTHISWORKBOOKみたいな記述方法があるのでしょうか? あるのであれば教えて下さい。 今、作成中のマクロで解決出来ない問題が発生しています。FINDを使う記述の箇所で一回目はすんなり最後までいくのですが、続けて同じマクロを実行すると、エラーが発生してしまいます。 たぶん、2回目の時違うシートを見てるからだと思います。どのシートを見てるか分かりませんが。 で、FINDで検索するシート名を変数をとって指定しています。 Dim ws1 as WorkSheet Set ws1 = ThisWorkBook.ActiveSheet これが悪いのかな?と思い質問しました。よろしくお願いします。

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

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

  • エクセルのマクロで作成した関数を他のエクセルのファイルから参照できるのですか?

    エクセルVBAに関して質問です。 a.xlsというファイルに複数のシートがあり すべてのシートにあるデータと「計算」ボタンがあります。 「計算」ボタンを押下すると、マクロが実行され 計算結果が同じシートに表示されます。 データの内容はシートごとに違いますが、 「計算」ボタンで呼び出したいマクロはすべて同じです。 この「計算」ボタンを押すと実行されるマクロを b.xlsに記述したいのですが、 (他のエクセルのファイルにも使いまわしたいので) そのようなことは可能なのでしょうか。 またどのようにマクロを記述すればこのマクロを 呼び出すことができるのでしょうか。 分かりにくい文章で申し訳ございませんが ご教授くださるとうれしいです。

専門家に質問してみよう