- ベストアンサー
エクセルで表をつくって、分析したいのですが(長文です)
こんにちは。 荷物の誤仕分を減らす為に誰が、どこで、いつ、仕分を間違っているかを表にして分析、報告するよう言われました。 レーンで仕分をしてもらっているのですが、20レーンあり、それぞれのレーンに誰が入るのかは日によって違います。 私が作ったのは、 《1行目》日付 曜日 1レーン 氏名 誤仕分数 2レーン 氏名 誤仕分数 と以下20レーンまで、ずらーっと繰り返していきます。 2行目以下はそれぞれ、のデータを入力していきます。 これだと、ツール→オートフィルタで、1レーンにAさんが入っているのを抜き出して、誤仕分があるかは確認できるが、Aさんがある日は1レーン、ある日は10レーンと色んなレーンに入っているときに、Aさんのデータだけを抜き出すのが困難なのです。 表の作り方が、まずいのだと思います。 どうか、アドバイスをお願いいたします。 何か言われたときにすぐ対応できるようエクセルの勉強をしたいのですが、お勧めの本などありましたら教えていただきたいと思っています。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VBAと言うものの利用(便利さのPR)になりますが、個人別日付別・誤仕分件数表に組替えできます。 (データ)レーンは簡単のため3レーンにしました。 日付も7日分に端折っています。Sheet1に作ります。 A1:H8の範囲です。 日付 曜日 第1レーン 第2レーン 第3レーン 2004/7/21 水 山田 3 岡田 4 黒田 2 2004/7/22 木 早川 1 黒田 1 近藤 5 2004/7/23 金 岡田 5 黒田 0 大森 3 2004/7/24 土 近藤 3 早川 3 黒田 1 2004/7/25 日 大森 4 岡田 2 近藤 2 2004/7/26 月 近藤 1 大森 2 岡田 0 2004/7/27 火 黒田 0 早川 1 山田 5 (VBAコード) Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") d = sh1.Range("A65536").End(xlUp).Row DoEvents MsgBox d k = 2 'Sheet2の明細の開始行・見だしは除く '---- For i = 2 To d '2はSheet1の明細の開始行・見だしは除く For j = 3 To 8 Step 2 '下記説明参照 sh2.Cells(k, "A") = sh1.Cells(i, j) sh2.Cells(k, "B") = sh1.Cells(i, "A") sh2.Cells(k, "C") = sh1.Cells(i, "B") sh2.Cells(k, "D") = sh1.Cells(i, j + 1) k = k + 1 'Sheet2の次行を差す Next j Next i '---氏名列でソート sh2.Range(Cells(2, "A"), Cells(k - 1, "D")).Sort key1:=sh2.Range("A1") End Sub (結果)Sheet2に、A2:D22に下記が出来ます。 個人別集計など、出来ますが複雑な感じを与えないため 省略。取りあえず、後は手操作でやってください。 岡田 2004/7/21 水 4 岡田 2004/7/23 金 5 岡田 2004/7/25 日 2 岡田 2004/7/26 月 0 近藤 2004/7/22 木 5 近藤 2004/7/24 土 3 近藤 2004/7/25 日 2 近藤 2004/7/26 月 1 黒田 2004/7/21 水 2 黒田 2004/7/22 木 1 黒田 2004/7/23 金 0 黒田 2004/7/24 土 1 黒田 2004/7/27 火 0 山田 2004/7/21 水 3 山田 2004/7/27 火 5 早川 2004/7/22 木 1 早川 2004/7/24 土 3 早川 2004/7/27 火 1 大森 2004/7/23 金 3 大森 2004/7/25 日 4 大森 2004/7/26 月 2 (やり方) VBAの実行ですが、ツール-マクロ-VBEをクリック。 出てきた画面のメニューの挿入-標準モジュールをクリックして出てくる画面に、上記をコピペする。 そしてF5キーを押すと実行されます。 (修正)ただ上記は、モデル仕様なので、実際に合わせて 変えないといけません。 ●Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") の()内を実際のシート名に変える。Sheet2は白紙のシートを指定する。 ●For j = 3 To 8 Step 2 Sheet1において、氏名がC列から始まり横方向に H列まで、2列ごとにあるので、こうなってます。 20レーンならFor j = 3 To 42 Step 2 ●sh2.Cells(k, "A") = sh1.Cells(i, j) はSheet1のi行、j列のデータをSheet2のK行のA列に コピーしてます。他も同じく推測してください。
その他の回答 (1)
- komkoma
- ベストアンサー率33% (7/21)
一番簡単な方法は、 《1行目》日付 曜日 レーン番号 氏名 誤仕分数 という風にして、下に長くする方法ですね。 縦に長くなってしまうので、印刷する時等に不都合が生じるかもしれませんが・・。
お礼
早速の回答ありがとうございます。 オートフィルタを使うなら、やはり下に長くしていくしかないですか。これだと、ピポットテーブルでも、対応できますよね。 一度作ってみます。 ありがとうございました!
お礼
回答ありがとうございます。 VBAは使った事がなかったのですが、これを機に勉強してみます。 早速つくってみます! ありがとうございました!!