dポイントプレゼントキャンペーン実施中!

こんにちは。

荷物の誤仕分を減らす為に誰が、どこで、いつ、仕分を間違っているかを表にして分析、報告するよう言われました。

レーンで仕分をしてもらっているのですが、20レーンあり、それぞれのレーンに誰が入るのかは日によって違います。

私が作ったのは、
《1行目》日付 曜日 1レーン 氏名 誤仕分数 2レーン 氏名 誤仕分数
と以下20レーンまで、ずらーっと繰り返していきます。
2行目以下はそれぞれ、のデータを入力していきます。

これだと、ツール→オートフィルタで、1レーンにAさんが入っているのを抜き出して、誤仕分があるかは確認できるが、Aさんがある日は1レーン、ある日は10レーンと色んなレーンに入っているときに、Aさんのデータだけを抜き出すのが困難なのです。

表の作り方が、まずいのだと思います。
どうか、アドバイスをお願いいたします。

何か言われたときにすぐ対応できるようエクセルの勉強をしたいのですが、お勧めの本などありましたら教えていただきたいと思っています。

よろしくお願いいたします。

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列に
コピーしてます。他も同じく推測してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
VBAは使った事がなかったのですが、これを機に勉強してみます。
早速つくってみます!
ありがとうございました!!

お礼日時:2004/07/27 17:39

一番簡単な方法は、



《1行目》日付 曜日 レーン番号 氏名 誤仕分数

という風にして、下に長くする方法ですね。

縦に長くなってしまうので、印刷する時等に不都合が生じるかもしれませんが・・。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
オートフィルタを使うなら、やはり下に長くしていくしかないですか。これだと、ピポットテーブルでも、対応できますよね。
一度作ってみます。
ありがとうございました!

お礼日時:2004/07/27 12:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!