『自分の当番を一覧で把握したい』(麻生) ---- 何度もすみませんでした。 削除の仕方もわからなくて... 早速ですがよろしくお願いします。 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"麻生")*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さん うまく返事が出来なくてごめんなさい。  麻生