- 締切済み
従事期間の重複チェック、表示
エクセルで多人数の技術者の配置開始日、終了日を入力した表から、特定技術者を抽出しその者の重複期間をチェック、表示させたいのです。定年過ぎのソフト初心者が出来そうなやり方を教えて下さい。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- zap35
- ベストアンサー率44% (1383/3079)
これはシートでデータの並べ替えをしてよければ関数でもできます。 前提は以下の通りです ・1行目はタイトル行で2行目から技術者のデータが入力されている ・G列、H列は空いている(ここに重複期間をさせるため) (1)シートをA列の氏名を第一キー、E列の開始日を第二キーで昇順に並べ替えます (2)G3セル(実データの2行目)に以下の式を入れます =IF(A3=A2,IF(E3<=F2,E3,""),"") (3)H3セルに次の式を入れます =IF(G3<>"",MIN(F3,F2),"") (4)G3セルと、H3セルを下方向にコピーします するとG,H列に重複期間が表示されます。 もしシートの並び替えが許されないならマクロで可能です。 以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はシートに戻りALT+F8でマクロ一覧を開き、マクロ名(Macro)を選択して「実行」ボタンです。 Sub Macro() Dim LastR, idx As Long ActiveSheet.Copy after:=ActiveSheet LastR = Range("A65536").End(xlUp).Row Columns("A").Insert Shift:=xlToRight Range("A2").Value = 1 Range("A3").Value = 2 Range("A2:A3").AutoFill Destination:=Range("A2:A" & LastR) Range("A1:G" & LastR).Sort Key1:=Range("B2"), Order1:=xlAscending, _ Key2:=Range("F2"), Order2:=xlAscending, Header:=xlYes For idx = 3 To LastR If Cells(idx, "B").Value = Cells(idx - 1, "B").Value Then If Cells(idx, "F").Value <= Cells(idx - 1, "G").Value Then Cells(idx, "H").Value = Cells(idx, "F").Value Cells(idx, "I").Value = Application.Min(Cells(idx, "G"), Cells(idx - 1, "G")) Cells(idx, "I").NumberFormatLocal = "yyyy/m/d" End If End If Next idx Columns("H:I").AutoFit Range("A1:I" & LastR).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes Columns("A").Delete End Sub (このマクロは元のシートには手をつけず、別シートにデータをコピーしてから実行するようにしました)
- zap35
- ベストアンサー率44% (1383/3079)
質問文の内容では回答のしようがありませんので補足お願いします >特定技術者を抽出し 抽出とはどのような操作を行うのですか? 特定の人をマウスで選択するのですか? それとも配置期間等から自動で抽出するのですか? >その者の重複期間をチェック、表示させたいのです 何と何の重複をチェックするのでしょう? また何を表示するのですか? またシート上で各項目はどのような配置ですか。A列は氏名、B列は開始日で日付形式で2007/2/1のように値が入る。 等と具体的に補足いただければ回答がしやすいです。またそのほうがご期待に沿う回答が得られると思います
補足
早速のご検討有難う御座います。抽出はエクセルのデータ、オートフィルターで技術者全員が表示されるので、そこから特定の技術者名をクリック、その者の一覧表が表示されます。重複チェックは期間のダブりを検索、表示したいのです。例えば山田技術者はA工事で3月1日から3月31日まで従事、同じくB工事で3月25日から4月30日まで従事予定。この場合の3月25日から3月31日間がダブり従事となります。これを何らかの方法で表示できませんか。リストは一般的にA列番号、B列客先名、C列工事名、D列配置技術者名、E列配置開始日(例2007/03/01)、F列配置終了日(例2007/03/31)です。宜しくお願い致します。
お礼
早速のご回答誠に有難う御座います。初心者にとって回答内容を理解するのに大分時間が必要と痛感しております。取りあえず近くの図書館に行きエクセル専門書と格闘する覚悟であります。なんとか重複チェックが、ものになるよう頑張ります。貴重なご助言本当に感謝しております。