[[20110611171039]]  『自分の当番を一覧で把握したい』(麻生)  ページの最後に飛ぶ

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

 

 『自分の当番を一覧で把握したい』(麻生)

何度もすみませんでした。
削除の仕方もわからなくて...

早速ですがよろしくお願いします。

 	A	    B	C	D	E	F	G	H	I	J	 K
 1	6月       3日(金)仕事C	仕事D						    1日 (水)
 2		        仕事A	仕事B	仕事C	仕事D	仕事E	仕事F	仕事G	仕事H	仕事I	3日 (金)
 3	1日 (水)	Pさん	Gさん	麻生	Aさん	Pさん	Hさん	Cさん	Fさん	Kさん	
 4	2日 (木)	Dさん	Kさん	Pさん	Oさん	Hさん	Iさん	Dさん	Kさん	Pさん	
 5	3日 (金)	Aさん	Oさん	麻生	麻生	Iさん	Bさん	Dさん	Kさん	Pさん	
 6	4日 (土)										
 7	5日 (日)										
 8	6日 (月)	Oさん	Hさん	Iさん	Dさん	Kさん	Pさん	Aさん	Oさん	Bさん

 これは6月の仕事の割り振り当番表(A2:J32)で16人体制で回しています。
 日によって当番無しか 仕事が1コか2コか です。
 割り振りのルールは、判りません。

 このシートがメールに添付されて 印刷して自分の名前(麻生)だけマーカーを引いて仕事の漏れが無いように気をつけています。

 できれば C1D1に今日の当番は何か?それとも「当番無し」なのか。	表示されれば楽なのに...と思っています。

 さらに休みの事前申請がしやすいように K列に当番のある日がズラズラっと表示されれば便利かな...と思っています。

 仕事内容が、冷蔵庫の掃除やシュレッダーなど本来の会社の仕事ではないので しなくても会社は困らないのですが、
 一人でする仕事なので忘れるとかなり立場が辛いです。
 (この考え方がマズイですけど)

 この当番表を受け取った時点でK列に6月の当番日
 今日が6/2だと仮定するなら C1に「当番無し」
 今日が6/3だと仮定するなら C1、D1に「仕事C」、「仕事D」

 よろしくお願い申し上げます。


 回答ではないのですが

 >(この考え方がマズイですけど)

 これ、違うと思います。
 PCを秘書のように使用して、仕事の手助けをさせることは素晴らしい考え方です。
 (ついでに仕事そのものをしてくれると、なおよいのですが)
 私自身もそのような活用をしています。

 関数で出来そうなので(私にはできませんが)他の回答者のレスを待つ間に

 A列の値(例:1日 (水)) は「日付」ですか? それとも「文字列」ですか?

 (seiya)

 > 失礼しました。
 > やり直したいので後日質問いたします。 麻生
      ↑
 (1) これをこんな風に書き換えてください。(「返信・編集」ボタンをクリックしてからですよ)
        |
            | 『タイトル』(ハンドルネーム)の形にするのがルールです。
        ↓
    『自分の当番を一覧で把握したい』(麻生)

 (2) 日付の実体はどんなデータですか?
   ※ 見え方ではなく、実体がどうかと云うことです。

   例えば「1日」は6月1日のことでしょうが、
    a. シリアル値なら実体は「40695」です。(セルの書式を標準にするとそれが見えてきます)
       b. 単に「1」が入っていて、セルの書式で「日」を付け加えているのか
       c. 本当に文字として「1日」が入っているのか

 そう云うことが分からないと、まともな回答が作れません。

 (半平太) 2011/06/12 11:11

 seiyaさん
 半平太さん
 ちょっと感激してジーンとなってしましました。
 お手数おけかします。

 A列の値(例:1日 (水)) は「日付」ですか? それとも「文字列」ですか?
 (2) 日付の実体はどんなデータですか?
   ※ 見え方ではなく、実体がどうかと云うことです。

   例えば「1日」は6月1日のことでしょうが、
    a. シリアル値なら実体は「40695」です。(セルの書式を標準にするとそれが見えてきます)
       b. 単に「1」が入っていて、セルの書式で「日」を付け加えているのか
       c. 本当に文字として「1日」が入っているのか

 たぶんシリアル値だと思いますが、明日確認したいと思います。
 ユーザー定義でなんかごちゃごちゃ言ってたようなやってたように思います。
 A1の6月は、単に「6月」のハズです。

 待っていてください。麻生

 元の表は 仕事(A〜I)で割り振った表になっています、
 横長になりますが社員名で割り振った表(18×2=36列)に変換するのはどうですか。
     K       L      M      N      O     P
 2               Aさん    Bさん
 3   1日(水)
 4   2日(木)
 5   3日(金)
 6   4日(土)
 7   5日(日)
 8   6日(月)
 L3=IF(COUNTIF($B3:$J3,L$1)=0,"仕事なし",INDEX($B$1:$J$1,MATCH(L$1,$B3:$J3,0)))
 M3:=IF(COUNTIF($B3:$J3,L$1)=2,INDEX($B$1:$J$1,MAX(INDEX(($B3:$J3=L$1)*COLUMN($B3:$J3),))-1),"")
 "仕事なし" のところは条件付き書式で色を付けるなどもいいのでは。      (NB)


 ちょっとマクロでお遊びですが、提示されたシートのフォーマットだとして、
 下記のマクロで指定した人の当番カレンダーを作成します。
 Alt+F11 で、挿入⇒標準モジュール で開いたウィンドウにコピー。
 閉じてから EXCEL に戻り、当番表を表示した状態で Alt+F8で 当番カレンダー作成
 を選択し、実行です。

 一応条件付き書式で当日を赤文字にするようにしています。
 マクロはそのファイルでもよいですし、新規ファイルにおいておいて、毎回利用する
 こともできます。
 アクティブシートを処理するので、どちらの場合もその月の当番表を表示した状態で、
 実行してみてください。
 (Mook)

 Option Explicit
 Sub 当番カレンダー作成()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    Const 仕事名列 = 2

    Dim y As Long
    y = Application.InputBox("カレンダーの年を入力してください。", "カレンダー作成", Year(Date), Type:=1)

    Dim m As Long
    m = Application.InputBox("カレンダーの月を入力してください。", "カレンダー作成", Month(Date), Type:=1)

    Dim cr As Range
    Set cr = Application.InputBox("1日のセルを選択してください。", "カレンダー作成", "A3", Type:=8)

    Dim myName As String
    myName = Application.InputBox("誰のカレンダーを作成しますか?", "カレンダー作成", "麻生", Type:=2)

    Dim wb As Workbook
    Set wb = Workbooks.Add()

    With wb.Worksheets(1)
        .Cells.Clear
        With .Range("A1:G8").Borders
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
        .Rows("3:8").RowHeight = 40
        .Range("A2:A8").Interior.ColorIndex = 38
        .Range("G2:G8").Interior.ColorIndex = 37
        .Range("A1:G1").MergeCells = True
        .Range("A1").Value = myName & " さんのお仕事"
        .Range("A2:G2").Value = Array("日", "月", "火", "水", "木", "金", "土")
        .Range("A1:G8").HorizontalAlignment = xlCenter

        Dim d As Long
        Dim dd As Date
        Dim res As Range
        Dim fres As Range
        Dim dr As Range

        Dim r As Long
        r = 3

        Dim firstDate As Date
        firstDate = DateSerial(y, m, 0)
        For d = 1 To 31
            dd = DateAdd("d", d, firstDate)
            If Weekday(dd) = 1 And Day(dd) <> 1 Then r = r + 1
            Set dr = .Cells(r, Weekday(dd))
            dr.Value = Day(dd) & "日"

            Set res = ws.Rows(cr.Row + d - 1).Find(what:=myName)
            If Not res Is Nothing Then
                Set fres = res
                Do
                    dr.Value = dr.Value & vbNewLine & ws.Cells(仕事名列, res.Column).Value
                    Set res = ws.Rows(cr.Row + d - 1).FindNext(res)
                Loop While res.AddressLocal <> fres.AddressLocal
                dr.Interior.ColorIndex = 45 ' 色はこちら参照:http://www.relief.jp/itnote/archives/000482.php

            End If
        Next
        With .Range("A3:G8")
            .FormatConditions.Delete
            .FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=ROW()*7+COLUMN()-" & (27 - Weekday(firstDate)) & "=DAY(TODAY())"
            With .FormatConditions(1)
                .SetFirstPriority
                .Font.Bold = True
                .Font.ColorIndex = 3
            End With
        End With
    End With
 End Sub

 ちょっと、突っ込みを
 >  Dim m As Long
        ^^
    y = Application.InputBox("カレンダーの月を入力してください。", "カレンダー作成", Month(Date), Type:=1)
   ^^
 (seiya)


 ほんとうだ。
指摘ありがとうございました(修正しました)。

 たまたま去年の12月と6月の曜日が一致していたので、気が付きませんでした。
 19:20

 ん、?違っているな。
 修正します。19:22

 修正しました。19:29
 ミスが重なって、たまたま今月は結果が一致してたみたいです。
 これであってるかな・・・。
 (Mook)

 こんばんは
 返事が遅くなりましたが、このまま続けてもいいのでしょうか?

 日付はシリアル値です。
 A1の6月は「6月」と入力しています。

 よろしくお願いします。麻生

 サンプルをよく見たら、3行目から単純な連番になっていますね ^^

 すると、シリアル値かどうかなんて無関係に処理できます。すみませーん m(__)m
 ※ 3日なら5行目、10日なら12行目と云う風に、プラス2行目が該当行と解釈します。

 (1) B1セル =TEXT(TODAY(),"D日(aaa)")

 (2) C1セル ="仕事数"&COUNTIF(OFFSET(B2:J2,DAY(TODAY()),0),"麻生")

 (3) D1セル =IF(RIGHT($C1,1)*1<COLUMN(A1),"",INDEX($A2:$J2,SMALL(INDEX((OFFSET($B2:$J2,DAY(TODAY()),0)<>"麻生")*999+COLUMN($B:$J),0),COLUMN(A1))))
   J1セルまでフィルコピー

 (4) K2セル =TEXT(SMALL(INDEX((MMULT(N($B$3:$J$33="麻生"),SIGN(ROW($A$1:$A$9)))=0)*999+ROW($A$1:$A$31),0),ROW(A1)),"[<50]0日;;;")
   下へ適当にフィルコピー

  行 ____A____ ____B____ ___C___ __D__ __E__ __F__ __G__ __H__ __I__ __J__ ___K___
   1 6月       14日(火)  仕事数1 仕事F                                     お仕事 
   2           仕事A     仕事B   仕事C 仕事D 仕事E 仕事F 仕事G 仕事H 仕事I 1日    
   3 2011/6/1  Pさん     Gさん   麻生  Aさん Pさん Hさん Cさん Fさん Kさん 3日    
   4 2011/6/2  Dさん     Kさん   Pさん Oさん Hさん Iさん Dさん Kさん Pさん 8日  ←┐
   5 2011/6/3  Aさん     Oさん   麻生  麻生  Iさん Bさん Dさん Kさん Pさん 14日   |
   6 2011/6/4                                                                     |
   7 2011/6/5                                                                     |
   8 2011/6/6  Oさん     Hさん   Iさん Dさん Kさん Pさん Aさん Oさん Bさん        |
   9                                                                              |
  10           麻生      Aさん                                                    |
  11  ↑                                     |
  12 無日付でも、10行目に麻生さんがあれば、8日と出ます。(それでいいと解釈)ーーーー┘
  13                                                           
  14                                                           
  15                                                           
  16                                               麻生  Aさん 

 (半平太) 2011/06/14 23:07

 こんにちは 

 半平太さん ありがとうございました。

 なっかもうびっくりして やってみたら こちらが出来たらいいなと
思っていたものが見事に表示されて また感激してしまいました。

 数式の意味を質問するのは控えます。
 このまま使用させていただくことをお許しください。

 ほかの15人と共有できたらいいなと思います。

 seiyaさん
 NBさん
 Mookさん
 うまく返事が出来なくてごめんなさい。  麻生


コメント返信:

[ 一覧(最新更新順) ]


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