[[20080721170909]] 『担当別の稼動期間カレンダーを作りたい』(たぬき) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『担当別の稼動期間カレンダーを作りたい』(たぬき)

カレンダーを作成し、担当者の稼動状況を確認できる表を作成したいと思っています。

シートは、「予定表一覧」と「カレンダー」の2つ。

予定一覧表の『担当者』『開始日』『終了日』『現場名』の4つのデータをカレンダーに反映させたいです。

【sheet1「予定一覧」】

  a      b      c     d

1 担当者  現場名  開始日  終了日

2 佐々木  東京   7/20   8/3

3 藤田   名古屋  7/25   8/15

4 島田   北海道  8/20   9/25

5 藤田   東京   8/20   9/15

6 佐々木  千葉   7/25   8/20

 ・
 ・
 ・

【sheet2「カレンダー」】

        a    b    c

1 担当者  7/1  7/2  7/3・・・

2 佐々木

3 藤田

4 島田   

「予定一覧」から対象担当と期間をさがし、カレンダーの該当期間に色(または印)をつけ、開始日のセルに「現場名」を表示したいです。

例えば、『佐々木』の行は、7/20〜8/20のカレンダーに色(または印)がついていて、7/20の列のセルには「東京」、7/25の列のセルには「千葉」と表示したいです。

その様なことは、エクセルで可能なのでしょうか?

よろしくお願いします。


 こんばんは〜♪

 こんな表の場合です。。。

 Sheet1 ↓

 ┌─┬────┬────┬────┬────┬────┐
 │  │   A    │   B    │   C    │   D    │   E    │
 ├─┼────┼────┼────┼────┼────┤
 │ 1│担当者  │現場名  │開始日  │終了日  │        │
 ├─┼────┼────┼────┼────┼────┤
 │ 2│佐々木  │東京    │    7/20│     8/3│        │
 ├─┼────┼────┼────┼────┼────┤
 │ 3│藤田    │名古屋  │    7/25│    8/15│        │
 ├─┼────┼────┼────┼────┼────┤
 │ 4│島田    │北海道  │    8/20│    9/25│        │
 ├─┼────┼────┼────┼────┼────┤
 │ 5│藤田    │東京    │    8/20│    9/15│        │
 ├─┼────┼────┼────┼────┼────┤
 │ 6│佐々木  │千葉    │    7/25│    8/20│        │
 ├─┼────┼────┼────┼────┼────┤
 │ 7│        │        │        │        │        │
 └─┴────┴────┴────┴────┴────┘

 Sheet2 ↓

 ┌─┬────┬────┬────┬────┐
 │  │   A    │   B    │   C    │   D    │
 ├─┼────┼────┼────┼────┤
 │ 1│担当者  │     7/1│     7/2│     7/3│
 ├─┼────┼────┼────┼────┤
 │ 2│佐々木  │        │        │        │
 ├─┼────┼────┼────┼────┤
 │ 3│藤田    │        │        │        │
 ├─┼────┼────┼────┼────┤
 │ 4│島田    │        │        │        │
 ├─┼────┼────┼────┼────┤
 │ 5│        │        │        │        │
 └─┴────┴────┴────┴────┘

 >カレンダーに色(または印)がついていて

 ★期間へ色付けする方法です。。
 条件付書式を使いますが、シートをまたいでは数式が使えないので
 式を名前定義します。。

 (順序その1)
 B2セルを選択して。。挿入→名前→定義から

 名前→ 期間
 参照範囲 ↓

 =SUM((IF(Sheet1!$A$2:$A$10=$A2,Sheet1!$C$2:$C$10,10^7)<=B$1)*(IF(Sheet1!$A$2:$A$10=$A2,Sheet1!$D$2:$D$10,0)>=B$1))

 この式は、配列数式になりますから
 この式をコピーして、参照範囲へ Ctrl+V キーで貼り付け後
 Ctrl+Shift+Enter キーを同時押し。。

 (順序その2)
 B2セルから右(カレンダーの日付のある列まで)
 と下(担当者のある行まで)の範囲を選択して、

 条件付書式から
 数式が → =期間
 パターン→ お好きな色を選びます。

 期間の色塗り終了。。。

 >、7/20の列のセルには「東京」、7/25の列のセルには「千葉」と表示したいです。 

 ★期間の最初の日に、現場名を入れます。。

 (順序その3)

 B2セルへ
 =IF(SUMPRODUCT((Sheet1!$A$2:$A$10=$A2)*(Sheet1!$C$2:$C$10=B$1)),
INDEX(Sheet1!$B:$B,SUMPRODUCT((Sheet1!$A$2:$A$10=$A2)*(Sheet1!$C$2:$C$10=B$1)*ROW($2:$10))),"")

 右と下へコピー。。。

 以上ですが、

 >カレンダーに色(または印)がついていて

 の印にしたかったのですが、提示した2つの式を繋げると
 長〜い式になってしまうので、色塗りにしました。。

 ただ、データ数が多いとこの式では重くなるかもです。。

 ご参考にどうぞ。。。

 。。。Ms.Rin〜♪♪


	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O
1	担当者	現場名	開始日	終了日	1	2	3	4	5	6	7	8	9	10	11
2	佐々木	東京	7/20	8/3											
3	藤田	名古屋	7/25	8/15											
4	島田	北海道	8/20	9/25											
5	藤田	東京	8/20	9/15											
6	佐々木	千葉	7/25	8/20											
	O	P	Q	R	S	T	U	V	W	X	Y	Z	A	B	C	D	E
1	11	12	13	14	15	16	17	18	19	20	21	22	23	24	25	26	27
2										東京							
3															名古屋		
4																	
5																	
6															千葉		

 E2=IF($C2=E$1,$B2,"")   セルに数式
 E2=(E$1>=$C2)*(E$1<=$D2)  条件付書式 でパターン色設定
  (PPPO)

 1ページで
C列選択でウィンドウ枠固定が便利かな!
セル対応横棒グラフにも応用できます。


 条件付書式の数式???
=SUM((IF(Sheet1!$A$2:$A$10=$A2,Sheet1!$C$2:$C$10,10^7)<=B$1)*(IF(Sheet1!$A$2:$A$10=$A2,Sheet1!$D$2:$D$10,0)>=B$1))
条件分岐まで必要ないのでは   
簡単な数式でいけますよ。(配列数式でなく)
=(E$1>=$C2)*(E$1<=$D2) 2シート対処なら シート名を付ければ
(zzz)

 マクロで考えてみました。
   (SHIOJII)
 sheet1に

 	A	B	C	D
 1	担当者	現場名	開始日	終了日
 2	佐々木	東京	7月21日	8月3日
 3	藤田	名古屋	7月25日	8月15日
 4	島田	北海道	8月20日	9月25日
 5	藤田	東京	8月20日	9月15日
 6	佐々木	千葉	7月25日	8月20日

 のようなデータがあるとして
 Sub test()
    Dim dayMIN As Date, dayMAX As Date
    Dim myR As Range, r As Range
    Dim i As Long
    Dim FR, FR2, myV
    Dim WS1 As Worksheet, WS2 As Worksheet

    Set WS1 = Sheets("Sheet1")
    Set WS2 = Sheets("Sheet2")
    With WS1
        dayMIN = Application.Min(.Range("C2", .Range("D" & Rows.Count).End(xlUp)))
        dayMAX = Application.Max(.Range("C2", .Range("D" & Rows.Count).End(xlUp)))
        Set myR = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
     End With

     With WS2
        .Cells.Clear
        .Rows("1:1").NumberFormatLocal = "m/d"
        .Range("A1").Resize(myR.Count + 1).Value = _
                 WS1.Range("A1").Resize(myR.Count + 1).Value
        For i = 1 To dayMAX - dayMIN
            With .Range("B1")
                .Value = dayMIN
                .Offset(, i) = dayMIN + i
            End With
         Next

         For Each r In myR
             myV = r.Offset(, 1).Resize(, 3).Value
             FR = Application.Match(CDbl(myV(1, 2)), .Rows("1:1"), 0)
             FR2 = Application.Match(CDbl(myV(1, 3)), .Rows("1:1"), 0)
             If Not IsError(FR) And Not IsError(FR2) Then
                .Cells(r.Row, FR).Value = myV(1, 1)
                .Range(.Cells(r.Row, FR).Offset(, 1), .Cells(r.Row, FR2)).Interior.ColorIndex = 3
             End If
          Next
          .Columns.AutoFit
     End With
 End Sub


 おはようございます。。。♪

 zzzさんへ
 >条件分岐まで必要ないのでは   
 >簡単な数式でいけますよ。(配列数式でなく)

 PPPOさんの表の様に担当者が重複していても
 それぞれの行で色付けするのでしたら
 おっしゃるとおりですね。。

 質問者の提示されたSheet2の担当者名は、重複がありません。
 ですから、2つの期間(例題では)を1行に色付けするために
 配列数式になりました。

 でもよく考えてみたら
 この方法では、2つの期間が重複しているばあい、
 重複期間の部分のセルが
 同じ色で色付けされるので、最初の期間の終了日がわかりませんネ!!。。

 担当者名が現場を持つのが、3つまでなら条件付き書式で
 重複期間を色でわける事はできますけれど。。。

 ただしその場合も、もし2つの現場の開始日が同じ時は
 2つの現場名を1つのセルに、入れるのはちょっと大変。。。
 こういう場合が、なければいいですが。。。

 そう考えてみると
 皆さんが回答された様に、担当者名が重複していても
 それぞれの行で、色付けした方がいいかもしれませんネ!!
 式も簡単ですし。。

 でした。。。ジャン!!ジャン!!!

 。。。Ms.Rin〜♪♪


みなさん、たくさんご返答頂きありがとうございました。

いろいろと試してみています。

すごく助かりました。

本当にありがとうございました!!

(たぬき)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.