EXCELマクロで一覧シートから職種別の集計を行う方法

このQ&Aのポイント
  • Excelのマクロを使って、一覧シートから職種別の各シートへ集計を行う方法について質問です。
  • 具体的には、一覧シートに入力したデータを職種別かつ氏名の昇順でソートし、『A』『B』『E』の職種別の各シートへ貼り付けや集計ができるようにしたいです。
  • 一覧シートのB列には職種が、「A」「B」「E」のいずれかが入力されており、氏名はD列E列に記載されています。行は8行目から記載されています。可能であれば具体的なプログラムも教えていただけると助かります。
回答を見る
  • ベストアンサー

EXCELのマクロについて

EXCELのマクロについて質問させてください。 一覧シートから、職種別の各シートへ集計(貼り付け)が出来るような プログラムを作成したいのでやってみたところ、私の知識では上手く出来ませんでした。 お力をお借り出来ると幸いです。 具体的には、一覧シートへ入力後(毎月入力) 『A』 『B』 『E』と分かれた職種別の各シートへ職種別かつ氏名の昇順でソートが掛かった状態で 貼り付け?集計?が出来るようにしたいです。 一覧シートのB列には「A・B・E」のどれかの職種が入力されており 氏名はD列E列へ記載しています。(漢字、カナ表示) A~AD列までデータを記入していますので、全て各シートへ集計出来ると嬉しいのですが・・・ 行は8行目から記載してます。 上記のようにプログラムを組む事は可能でしょうか。 具体的なプログラムも載せて頂けると嬉しいです。 宜しくお願い致します。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

続けてお邪魔します。 (1)について・・・ 前回のコードは7行目の項目が最終列まで空白セルなしに入っているという前提のコードでしたので 途中に空白セルがあると連続しているセルまでしか表示されないと思います。 (2)の >A、B、E以外に職種が増えてしまった場合は >どうしたらいいでしょうか・・・ 「一覧」Sheetにデータ追加があり、「職種名」のSheetがない場合は新たにSheetを追加して 同じ操作をするようにしてみました。 前回のコードは削除して↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 尚、「一覧」Sheetはシート見出しの一番左側に配置してあるとします。 Sub Sample2() Dim i As Long, k As Long Dim lastRow As Long, lastCol As Long, endRow As Long, endCol As Long Dim str As String, wS As Worksheet, myFlg As Boolean Application.ScreenUpdating = False With Worksheets("一覧") .Activate lastRow = .Cells(Rows.Count, "B").End(xlUp).Row lastCol = .UsedRange.Columns.Count endCol = lastCol + 1 Range(.Cells(7, "B"), .Cells(lastRow, "B")).AdvancedFilter Action:=xlFilterCopy, _ copytorange:=.Cells(1, endCol), unique:=True For i = 2 To Cells(Rows.Count, endCol).End(xlUp).Row str = .Cells(i, endCol) For k = 2 To Worksheets.Count If Worksheets(k).Name = str Then myFlg = True Exit For End If Next k If myFlg = False Then Worksheets.Add after:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = str End If Set wS = Worksheets(str) wS.Cells.Clear .Rows(7).AutoFilter field:=2, Criteria1:=str If .Cells(Rows.Count, "B").End(xlUp).Row > 7 Then Range(.Cells(7, "A"), .Cells(lastRow, lastCol)).SpecialCells(xlCellTypeVisible).Copy wS.Range("A1") endRow = wS.Cells(Rows.Count, "B").End(xlUp).Row Range(wS.Cells(1, "A"), wS.Cells(endRow, lastCol)).Sort key1:=wS.Range("D1"), order1:=xlAscending, Header:=xlYes wS.Columns.AutoFit End If myFlg = False Next i .AutoFilterMode = False .Columns(endCol).Delete End With Application.ScreenUpdating = True End Sub こんなんではどうでしょうか?m(_ _)m

h074_p
質問者

お礼

昨日に引き続き、ありがとうございます。 教えて頂いたプログラムで無事に作成できました。 本当にありがとうございました! これでいいデータ集計が出来そうです。 他の場面でも使えそうですので参考にさせて頂きたいと思います^^ また何かあれば、ぜひ宜しくお願い致します。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 エラーが出たというコトですが、 今考えられる原因 (1)標準モジュールになっているか? もしかしてシートモジュールになっていませんか? Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に前回のコードをコピー&ペーストする。 (2)Sheet名は正しいか? 前回のコードは 一覧・A・B・E ← A・B・Eは半角 というSheetが存在する!という前提のコードです。 Sheet名が全角になっていたり、余計なスペースが入っているとエラーになります。 ん~~~ 今考えられる原因としてはこのくらいですが・・・ 他の原因ならごめんなさい。m(_ _)m

h074_p
質問者

お礼

No.1様 お忙しい中度々のご回答ありがとうございます。 私なりにやってみた結果、無事に集計が取れました! 本当にありがとうございました。 それと2点ばかり追加でのご質問なのですが・・・ 1.各シート(A、B、E)へ集計を取った際に 「一覧」シートの【職種、氏名、カナ】等の項目も同時にマクロで表示させることは可能ですか?? 2.A、B、E以外に職種が増えてしまった場合は どうしたらいいでしょうか・・・。 増やした場合同じように集計が取れるようにしたいです。 追加追加の質問で申し訳ありません・・・。 お手数ですが宜しくお願い致します。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! >行は8行目から記載してます というコトですので、↓の画像のように7行目は項目行で8行目からデータがあるとします。 >氏名はD列E列へ記載しています。(漢字、カナ表示) E列の「カナ」で並び替えています。 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub Sample1() Dim k As Long, wS As Worksheet, myArry Set wS = Worksheets("一覧") myArry = Array("A", "B", "E") For k = 0 To UBound(myArry) With Worksheets(myArry(k)) .Cells.Clear wS.Range("A7").AutoFilter field:=2, Criteria1:=myArry(k) If wS.Cells(Rows.Count, "B").End(xlUp).Row > 7 Then wS.Range("A7").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy .Range("A1") .Range("A1").CurrentRegion.Sort key1:=.Range("E1"), order1:=xlAscending, Header:=xlYes .Columns.AutoFit End If End With Next k wS.AutoFilterMode = False End Sub ※ 「一覧」Sheetの変更があるたびにマクロを実行してみてください。 こんな感じではどうでしょうか?m(_ _)m

h074_p
質問者

お礼

ご回答ありがとうございました。 早速やってみたのですが、私が無力なのか上手く出来ませんでした(汗) 「400」とエラーが出てしまい、「一覧」シートが職種Aのみの表示となってしまいました。 ご回答頂いたかいあって名前順のソートは出来ているようです。 何が原因なのでしょうか(汗) 現在は「一覧、A、B、E」の4つのシートが入っており 「一覧」以外は空白の状態です。 目標としては、マクロ実行後A、B、Eの各シートへ職種別かつ名前順で集計出来るようにしたいのですが・・・ 大変お手数ですが、併せてご検討頂けますでしょうか。 宜しくお願い致します。

関連するQ&A

  • エクセルマクロで出来るでしょうか。

    マウスでクリックしたセル位置の入力内容を、別のセル位置に表示するようなマクロは出来るでしょうか?。 考えているのは、弁当注文の集計表の作成です。 A列に氏名、B列に店名、C列に品名、D列に金額と、予め入力してある表で、 当日注文する分を、個人毎に、氏名・店名・品名・金額・とクリックすれば、 同じシート内に作成した集計表に、クリックした順番に表示していくというようなものです。 予めの入力は、各列5行目から行っています。 また集計表は、F列、G列、H列、I列の5行目から下に、クリックした順番に表示できればと思っています。

  • シート間の行相違検証マクロ

    シート1のB列(B5:B38)に数10名の氏名を入力します。C列からM列までには数字を何個か入力します。例えば  A氏、C5には4、F5には2、M5には3、 B氏、E6には3、G6には4、 C氏、F7には4、H7には8、等です。 シート2の(A3:A36)にはシート1の氏名を入力します。B列からL列までにはシート1で入力した数字に対応した数字を入力します。例えば シート1、A氏、C5の4ではシート2、A氏の行のB列に2000、F5の2ではシート2のA氏の行のE列に1000、M5の3ではシート2のA氏の行のL列に1500、と入力します。ここで、シート2で入力した行が違っていないか。他の人の行に入力していないかの検証マクロの記述方を教えてください。尚、シート1とシート2の氏名の並びが同一の場合と、そうでないときの二通りを教えてください。よろしくお願いします。

  • エクセルのマクロで悩んでます

    はじめて投稿いたします。 現在、エクセル2000でマクロを組んでいるのですが、何日も悩んでそこから動けないので質問させていただきます。 やりたいことは、 (1)検索フォームの入力テキストに記載した数値を読んで検索ボタンを押すと、 (2)データブック.xls内の完全に一致した数値のセルの行をアクティブにして (3)その行のA列からO列の値をコピーして (4)入力ブック.xlsの入力シートのB4:B18に数値だけ貼り付け したいと考えています。 検索フォームは入力ブック.xls内で作成しています。 今のところ、(3)でA列の値を読んで、(4)でB4セルに貼りつけということはできているのですが、複数になるとできていません。 根気よく、同じプログラムを書くのが良いのでしょうか? かなり面倒なので、もっと簡単にかける方法があれば教えてください。

  • エクセルのマクロについて質問です。

    エクセルのマクロについて質問です。 マクロを発動した時に、あるセルに入力してある数値を参照し、その行のX列目に数値を張り付けるものを作成しようとしています。 例えば シート「1」の A1に日付を入力 B1にある数字を入力 シート「2」の A列にA1→1~A31→31の日付が入力されている時 マクロ発動時にシート「1」A1の日付と一致する シート「2」のB列にシート「1」のB1の値を貼り付け ↑たとえばシート「1」のA1が1日でB1が500だった場合 シート「2」の1日(A1)と同じ行でB列(B1に500を 貼り付けるものです。 かなり下手な説明だと自覚しておりますが、解読できる方 どうかご教授ねがいます。

  • Excelのシート間でのリンクの仕方について

    Excel2007での質問です。 下の様な一覧表があるとします。   A  B  C  D  E 1 あ い う  え お 2   き く  け こ 3 さ  し す  せ  そ この入力した一覧表を別のシートに下記のような票にしてリンクさせたいのですが これは可能な事なのでしょうか? A  あ    A  さ B  い    B  し C  う     C  す D  え     D  せ E  お     E  そ ※上記の『2』の行の『きくけこ』は『A』列に入力がないのでリンクさせません。 『A』列に入力した行のみを、別のシートにリンクさせる方法です。 どなたか、おわかりになる方。 Excelは初心者も同然です、宜しくお願いいたします。

  • エクセルのマクロを知りたい

    エクセルで,たくさんのデータが入力された【シートa】があります。 新しく【シートb】を作成して,そこに空白の表(1)~(10)までを作成します。 (ちなみに表(1)は1行から始まり100行まで,表(2)は101行から始まり200行まで・・・・といった感じです) 【シートb】の表(1)には,【シートa】でA列に「1」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。同様に,表(2)には,【シートa】でA列に「2」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。・・・というのを表(10)まで続けます。 上記のような命令をボタン一つで操作できるようなマクロを教えて欲しいのです。 お願いします。

  • エクセルマクロでVLOOKUPのよう列を貼る

    初めましてよろしくお願いします。 シート2に       A     B     ・・・・・・・・・   Z 1   900     5               5 ・   903     40              60 ・    ・       ・               ・ 300 220     1     ・・・        100 301 210     10    ・・・        1000   302 200     15    ・・・         20 ・ ・ ・ が有ります。シート1のE10に210と入力されている場合、マクロを実行するとA列を検索し、シート2のA301の値と一致する301行をシート1のE11から列に変換しコピーされるようにしたいと思います。 シート1結果    A     B     C     D     E 1 2 ・ ・ 10                        210 11                         10 ・                           ・ ・                           ・ 35                        1000  解る方、よろしくお願いします。

  • エクセル VBA 特定文字がある行を別シートに移動

    C列にA,B,C,D,E(赤枠部分)の文字列が入力された表があります。 マクロ実行時下記のようにするには、VBAのコードをどのように記入すれば、よろしいでしょうか? AとBが入力されている行をシート2にコピー Cが入力されている行を切り取りしシート2に貼り付け(下の行は上方向にシフト) Dが入力されている行を切り取りしシート3に貼り付け(下の行は上方向にシフト) Eが入力されている行を切り取りしシート3に貼り付け(下の行は上方向にシフト) エクセルは2000及び2007です。 よろしくお願い致します。

  • エクセル2000(マクロ)を使っていくつかの処理を一度にしたい・・・

    A列に下記の例のようなデータがあり、件数は毎日変わります。 マクロに登録したいのは (1)B列にはA列の最終行まで、(例えば)1、2と繰り返し入力させたい (2)B列に2のデータが入っているものだけを抽出し、抽出したA列のデータだけをコピーし、別のシートに貼り付けたい というところまでを一つのマクロで処理させたいのですが、うまくいきません。 A列のデータ数は必ず偶数で、数字のみで出てきています。貼付け先は日々のデータを月ごとに表にしていくため、毎日変わります。 ※土日祝日分はデータがでてきませんが、項目には記載がありますので、土日祝日は飛ばさなければいけないようになっています。 別シートは行の項目が日付で、列に抽出したデータを入れるようなレイアウトになっています。 A列   B列 1    1 1    2 2    1 0    2 10    1 2    2 13    1 2    2 ちなみに私が取得するデータはA列のデータだけなので、B列に入れるデータは1、2でなくてもなんでも大丈夫です。また処理や他にいい考え方等があれば教えてください。 宜しくお願いします。

  • エクセル2013 マクロをご教示ください

    Sheet1 4行目に見出し。 5行目A列からU列までデータが入力されています。 中には空白セルもあります。 1行目から4行目迄はロックされています。 5行目以降の、あるセルをアクティブにすると、 該当行のC列からS列迄を Sheet2のA列を先頭に 5行目にコピペするには どうしたら宜しいでしょうか? Sheet2も4行目が見出しです。 Sheet1でのアクティブセルは 複数の場合もあります。 ただし、同じ行でセルを複数アクティブにしても Sheet2への貼り付けは1行とします。 よろしくお願いします。

専門家に質問してみよう