• 締切済み

【エクセルVBAマクロ】データ集計処理について

お世話になります。 以下のような形式のデータファイルがあります。 勤怠を集計するデータファイルです。 (出勤=1、欠勤=2) 左から:支店、名前、1日、2日、3日  北海道 山田 1 1 2     田中 2 2 2 東京  山本 1 1 1     西村 1 2 2 大阪  ・・・     ・・・  という感じで、これを集計し支店毎に日にちごとに出勤何名、欠勤何名、合計何名 というデータを作りたいのですが、マクロの組み方を教えていただけますでしょうか? 現在はこれを手作業でおこなっており、時間がかかる、入力ミスが出るといった問題がおこっております。 何卒、宜しくお願い致します。

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

やはり関数でやる案ですが、データが沢山ある場合の速度は不明です。 Sheet1に元データがあるとして、最初に次のマクロでA列を全て支店名で埋めます。(結果が煩雑と思われるなら、条件付書式で、各項目の1行目以外を白文字にする設定でもお試し下さい) Sub test() Dim lastRow As Long Dim i As Long Dim temp As Variant lastRow = Range("B" & ActiveSheet.Rows.Count).End(xlUp).Row For i = 1 To lastRow If Range("A" & i).Value = "" Then Range("A" & i).Value = temp Else temp = Range("A" & i).Value End If Next i End Sub Sheet2に下記の表を作成し、C2の式を =SUMPRODUCT((Sheet1!$A$2:$A$100=$A2)*(Sheet1!C$2:C$100=IF($B2="出勤",1,2))) とし、右方、下方に複写します。(100のところは実際の支店数に合わせて適宜いじって下さい) |A|B|C|D|E 1|支店|出・欠|1日|2日|3日 2|北海道|出勤|1|1|0 3|北海道|欠勤|1|1|2 4|東京|出勤|2|1|1 5|東京|欠勤|0|1|1 ご参考まで。

pikaru7
質問者

お礼

返信が遅くなり申し訳ございません。 ご回答いただきありがとうございます。 皆様からいただいたアドバイスをもとに、作業してみます。 完成したらまたコメントさせていただきます。 ありがとうございました。

  • van111
  • ベストアンサー率14% (1/7)
回答No.3

質問はマクロですが関数ではだめでしょうか? 支店 名前 1日 2日 3日 a A 1 1 2 b B 2 2 2 c C 1 1 1 d D 1 2 2 e E 2 1 1 f F 2 1 2 合計人数 =COUNTA(C2:E2) 出勤人数 =COUNTIF(C1:E1,1) 欠勤人数 =COUNTIF(C1:E1,2) これをマクロにしてもよろしいかと思いますが 関数でもいいかと思ったので。。

pikaru7
質問者

お礼

返信が遅くなり申し訳ございません。 ご回答いただきありがとうございます。 関数は使用しているんですが、やはりデータ量が多いもので入力作業に大幅な時間がかかってしまいます。 ですので、何かいい方法があればなぁと思ったんですが。。

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

これもやりたいというだけの丸投げだな。他人に頼りすぎ。 ここのコーナーが、プログラムの下請け的になってはかなわない。 これはプログラム処理ロジックと言う、経験をつんで身につく、プログラム言語・文法の学習を超えたスキルなのだ。 昔(コボル時代前後)はこのパターンで鍛えられたものだが。 ただしあるプログラム言語やデータベース処理言語では、できるメソッドなどが便利なものがあったりすると、それを使うと考えやすく、コードは短くはなるが。 人によって経験などから思いつき、使うロジックがバラツキがありそうな点だ。 ーー ご指摘のある、ピボットテーブルや、(北海道の下の、同一と言う意味の空白セルが気になるが。) もし探して、見つかればエクセルのフリーソフトのようなのを使うのが正当だ。 ーー ロジックの1例 (1)1-31日の31要素の配列を用意。また日別に勤務形態数だけ用意。0に初期化。データと関係のないセルの別セル範囲のセルを2次元配列代わりに使う手もある。 (2)第1レコードを読む。 (3)北海道を県名(変数)に記憶 (4)1-31日の日付の数字を勤務形態ごとの配列に振り分けて各日ごとに足しこむ。列方向の処理。 (5)第2レコードを読む。Å列が空白で無い場合。 県名+1-31の計数を、勤務形態別に書き出す(多分別シートに) 配列の値を0にする(ご破算) 県名変数の値を東京に変える。(3)と同じ作業) (6)(4)と同じ作業当行について行う。 (7)Å列が空白の場合。   (4)の作業だけ行う。(勤務形態分類別に足しこみだけ) (8)次の行の処理に移る。 処理する行のポインターはFor i=2 toのiで済ます。 別シートに書き出す行ポインタには、別にkなどを設け、書き出した都度+1して置く。

pikaru7
質問者

お礼

丸投げ。。申し訳ございません。 確かに頼りすぎですよね。 にもかかわらず、ご丁寧にご説明いただきありがとうございます。 まずやってみます。 できたらまたコメントいたします。

回答No.1

ピボットでできそうな、、気がします。あくまでそういう気がするだけですが。

pikaru7
質問者

お礼

返信が遅れまして申し訳ございません。 アドバイスいただきありがとうございます。 ピボットですか。 ちょっとしらべてやってみます。 ありがとうございます。

関連するQ&A

  • Excelでマクロを使って集計したい

    いい方法がわからず困っています。 Excel2000を使って報告書の集計をしたいのですが・・・。 支店が100店舗あり、毎日Excelファイルの報告書を送ってもらっています。フォーマットは全店共通です。 報告書のファイル名には各支店名が入っています。 ファイルの中は、顧客名や誕生日、商品コード、商品名などのリストになっています。 (件数は毎日変動、1日1店舗平均50件位、0件の場合もあり) 今現在、ひとつずつファイルを開いて、入力されている範囲をコピーして、全店集計用の別のファイルに貼り付けて、毎日の全店分のリストを1つのシートにまとめています。 この作業をマクロを使って、ボタンを押すと自動的に全店集計用ファイルにデータが貼り付けられる方法はないでしょうか。 そして、集計が完了すると、別のマクロのボタンを押すことで、各店(100店舗)の報告書のデータをクリアさせたいのです。 お知恵を貸してください。宜しくお願いします。

  • 超初心者がマクロ集計をすることになりました

    マクロを使った集計システムを作成することになったのですが、マクロのマの字も知らない初心者です。 以下の表を集計するマクロを初心者向けで教えてください。 氏名        作業No   月No   時間内   時間外   社員No 山本太郎      3210      5     8      0      120 山本太郎      5120      8     8      12     120 山本太郎      3210      5     4      0      120 山田花子      1203      4     8      2      320 山田花子      3210      5     8      12     320 佐藤治郎      5201      10    8      8      91 佐藤治郎      3210      5     8      8      91 佐藤治郎      3210      5     8      12     91 という表があるとします。 これを、以下のようにしたい場合のマクロを教えてください。 氏名        社員No    作業No    時間内   時間外 山本太郎       120      3210-10    12       0 山本太郎       120      5120-8     8       12 山田花子      320      1203-4     8        2 山田花子       320      3210-5     8       12 佐藤治郎       91       5201-10    8        8 佐藤治郎       91       3210-10    16       20   ※作業Noと月Noのデータを“-”をつけて結合しています。 ※1人が同じ「作業No+月No」の作業を複数行っていたら、合計します。 すみませんが、よろしくお願いします。

  • Excelの集計方法をおしえてください

    Excelの集計方法で教えてください。 以下のようなデータがあるとします。 山本 1000円 鈴木 2000円 田中  500円 鈴木 1500円 山本 3000円 田中 2000円 それをこのように集計したいのです。 山本 4000円 鈴木 3500円 田中 2500円 このような集計はアクセスではできるようですが、 Excelでは可能なのでしょうか。 教えてください。よろしくお願いします。

  • Excel マクロ データ集計

    Excel マクロ データ集計 Sheet1にある情報を集計して、集計結果をSheet2に貼り付けるマクロを考えています。 「Sheet1」のA列、B列、C列が合致した場合に同じ商品とみなします。 C列で「新鮮」とついている場合には、商品名で一致させて、Sheet2の 同じ商品名のところに記載します。 「Sheet2」に貼り付ける際、「Sheet1」のA列は不要です。 どのようなマクロを作成すればよろしいでしょうか。 画像を添付します。 「Sheet2」は完成形です。

  • Excelマクロでデータ集計

    エクセルマクロの初心者です。昨日はじめてマクロを勉強したばかりなので分からないことばかりなので教えてください。 毎月集計データをエクセルで入手するのですが、月ごとにエクセルファイルが作成されているために過去の集計データを見返す必要があるときには月ごとのエクセルファイルを開いて確認することになるため非常に手間となります。 そこで、毎月入手する集計データを新たにまとめファイルとして、例えばボタン1つでそのまとめファイルにどんどん追記する自動マクロを作成したいと思っています。 一応、今考えている仕様は次の通りです。 【ボタン1】 ある特定のフォルダを指定して、エクセルを開きます。特定フォルダには過去に入手したエクセルファイルをすべて格納しているものとし、最新のエクセルファイルのみを自動で開きたい(機能としてできるか分からないので、今はボタンを押すことによってその特定フォルダにアクセスできるマクロまでは作成しました) Sub ファイルを選択して開く() '←後述の時点の本を引用しています。 With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = False .FilterIndex = 2 .InitialFileName = "C:\" If .Show = -1 Then .Execute End With End Sub 【ボタン2】 仮に毎月送付されてくる月ごとのファイルを各月ファイル.xls、過去の集計ファイルを全て載せているファイルを集計ファイル.xlsとします(データは各月ファイル.xls、集計ファイル.xlsともsheet1にのみあるものとします) 各月ファイルには表があり、例えば4月は(B2:H20)、5月は(B2:H30)と月ごとの表内容は異なるものとします。 4月ファイル、5月ファイルを集約ファイル.xlsにボタン2を押すことでどんどん追加できるようなマクロを作成したいと思っています(上書きはしないようにする) なお、(B2:B20)は表タイトルのため、5月以降のデータをボタンを押して自動貼り付けする際にはタイトル行を削除して貼り付けしたいと考えています。 ボタン2の仕様は上記のようになりますが、今私が苦戦しているのは、同じファイルの同じシート上ならボタンで貼り付けられたのですが、別ファイルで作成するとなるとさっぱりわかりません。 因みに昨日初めてマクロを勉強したと言いましたが、初心者向けマクロみたいな本でマクロを約10時間作成しながら形だけでも慣れることをはじめました。またマクロ辞典(分厚い本)を昨日購入して色々機能を調べているのですが、調べ方が悪いのかまだ分からないことがたくさんあるレベルです。 長文になりましたが、ボタン2のマクロの作成方法についてエクセルマクロの得意な方がいましたらご教授頂けたらと思いますので、宜しくお願い致します。

  • Excelで名寄せしてデータ個数を集計する方法

    このような表があります。 001 山田 001 山田 002 鈴木 003 田中 004 高橋 004 高橋 005 鈴木 005 鈴木 005 鈴木 006 高橋 007 鈴木 008 鈴木 この名前(「山田」等)を基準にして名寄せをし、かつデータ個数を集計しなくてはなりません。 普通に集計をすると、 001 山田 001 山田 山田 データ個数 2 002 鈴木 鈴木 データ個数 1 003 田中 田中 データ個数 1 004 高橋 004 高橋 高橋 データ個数 2 005 鈴木 005 鈴木 005 鈴木 鈴木 データ個数 3 006 高橋 高橋 データ個数 1 007 鈴木 008 鈴木 鈴木 データ個数 2 ・・・という具合になりますが、番号(001等)の枠を超えて名寄せしたいのです。 希望する集計結果としては、 001 山田 001 山田 山田 データ個数 2 002 鈴木 005 鈴木 005 鈴木 005 鈴木 007 鈴木 008 鈴木 鈴木 データ個数 6 003 田中 田中 データ個数 1 004 高橋 004 高橋 006 高橋 高橋 データ個数 3 ・・・という表示になるようにしたいのです。(番号も必要データなので消去せずに残したいです) 今までは、番号&名前レベルでまず集計し、あとは検索して同じ名前があればカット&ペーストという非常に面倒な作業をマニュアルでしてきました。 何かもっと楽にできる方法をご存知の方はぜひ教えてください。

  • エクセルファイルを名前順に開いてくるマクロが作りたいのですが。。。

    エクセルファイルを名前順に開いてくるマクロが作りたいのですが。。。 特定のフォルダ(C¥集計)に ABC0001-勤怠表-佐藤.xls ABC0002-勤怠表-山田.xls ABC0003-勤怠表-上田.xls ・・・ ABC0030-勤怠表-橋本.xls のように先頭のコードが順に割り振られているエクセルファイルがおいてあります。 (ABCは社名として固定) これを (1)佐藤のファイルを開き特定セルをコピーして別ファイルにペーストしファイル閉じ。 (2)同作業を山田→上田。。。橋本まで順にやりたいのです。 変数を宣言してまでは理解できるのですが、その変数を使ってファイル名等を定義して辺りからさっぱり分かりません。 かなりネット検索もして似たような事例を探したのですが、すっきりした回答がありませんでした。 まだVBA初心者ですが、別のマクロが動いて面白くなってきたところです。 助けていただけると幸いです。

  • エクセルデーター集計について

    現在1月から12月まで各月毎のシートと集計表があります。 そのシート内の集計表は  A  ・   B     ・ C ・ D ・ E ・・・・・・・・BB 1担当・顧客ナンバー・日付・苗字・名前・・・・・・・・ 2田中 3佐藤 4小川 5田中 6田中 7佐藤 8井上 ・ 150位まで(行については月により変動あり) と各列と行にデータが入力されてます。 担当者は12名で元になるデータ表には活動順に担当者名が入力されてます。 やりたい事は (1)各担当別の月別集計と年間集計シート作成 月毎にシートを作成でなく、あくまで担当者毎の月毎集計と12か月の年間合計転記を同一シートにする事は可能でしょうか。(個人成績表の為) またその時担当別にシート作成が出来るとうれしいです。 (2)全担当者の月集計一覧シート 一つのシートに全担当者の月別集計(1月から12月)を一覧にしたいのですが、各担当者の月別合計欄を転記の認識なのですが、他にいい方法もありますか? (3)全担当者の年間集計一覧シート (2)の合計を転記の認識です。他にありますか? 以上3点を作成したいと思ってます。 (1)が出来れば何とかなるような気はしますが、どなたかご教授お願い致します。 項目はA~BBまで横一列にあり 担当者の入力も横一列なのでvlookupでも考えましたが、マクロで何とか出来るなら挑戦してみようかと思ってます。 集計表自体他のブックからのリンクやなんやらで20M位ファイルサイズがあり、今回の(1)(2)(3)は新規ブックに作成したいと思います。

  • 集計マクロ

    こんにちは。 早速ですが、例えばこんなカンジです。 [元データ(Sheet1)] [1] 鈴木| 佐藤| 山田|・・・ [2] 茶 | 水 |    | [3] 魚 |    | 酒 | [4]    | 肉 | 茶 | [5] 肉 | 茶 | 魚 | 上記のようなデータから↓↓↓ 1.行ごとに種類別に並べ替え 2.'=count(A2:D2)のような種類別の行集計列([数])を追加 3.[数]を基準に降順に並べ替え ↓↓↓ [集計データ(Sheet2)] [1] 鈴木| 佐藤| 山田|・・・| 数 [2] 茶 | 茶 | 茶 |・・・| 3 [3] 肉 | 肉 |    |・・・| 2 [4] 魚 |    | 魚 |・・・| 2 [5]    | 水 |    |・・・| 1 [6]    |    | 酒 |・・・| 1 お解かりいただけますでしょうか(・_・;)? 今までは作業列(商品名)を挿入し、[VLOOKUP]→[COUNT]→値貼付→並べ替え→不要な商品名(行・列)を削除していましたが、度々では面倒に思い、マクロを組もうと試みました。 ですが、まだまだマクロ勉強中の私自身の頭が整理しきれず、行き詰ってしまいました。 アドバイスでも結構です。お力をお貸しください。 よろしくお願いいたします。

  • エクセルのデータ集計について

    エクセルのデータ集計について質問です。現在windowsxp・office2007を使用しています。 エクセルの1ファイルに10シート、シート全てにデータが入力されており、このファイルが20弱あります。 ここから必要な数値を参照して、集計ファイルに集計しているのですが全て手作業で非効率的です。 何度か関数を使用して効率化を図ったのですが、どうも意図した結果は出ませんでした。(COUNTIF・COUNTIFS関数と、「統合」機能を使用しました) 調べてみたところ「マクロ」機能を使うと効率化できるかも、と思ったのですが、どのようなマクロを組めば良いのか、また、マクロ機能を使用しない場合どういった関数を使用すれば簡単にまとめられるのかご教授いただければと思います。

専門家に質問してみよう