【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

B9~B39に「日にち」。D9~D39に「曜日」を入力しています。
『28年8月度(仮に2016/8/1) 』と入力したら、このD欄に①祝日(名称)②指定休日③曜日の順位で文字がでるようになりませんか?公休日の他に会社の「指定休日」があり、原則第2,4週目の土曜と不定期休(その年によって変動)です。どなたか名案があれば教えてください。よろしくお願いします。

A 回答 (4件)

こんばんは!



やり方だけ・・・
↓の画像のように別シート(今回はSheet2)に祝日・不定期休のデータを作成しておきます。
(画像では祝日だけにしていますが、A列に「不定期休」のようにタイトルをいれ、シリアル値をB列に羅列しておきます)

そしてSheet1のA6の年・C6の月の数値を入れると1か月のシリアル値がB9~B39に表示されるようにします。
まず、前月の最終土曜日のシリアル値をF6セルに表示しておきます。
F6セルに
=DATE(A6,C6,0)-WEEKDAY(DATE(A6,C6,0)-5,3)
これで前月の最終土曜が表示されます。

B9セル(セルの表示形式はユーザー定義から d としておきます)に
=IF(MONTH(DATE(A$6,C$6,ROW(A1)))=C$6,DATE(A$6,C$6,ROW(A1)),"")
という数式を入れB39セルまでフィル&コピー!

最後にD9セルに
=IF(B9="","",IF(COUNTIF(Sheet2!B:B,B9),INDEX(Sheet2!A:A,MATCH(B9,Sheet2!B:B,0)),IF(OR(B9=F$6+14,B9=F$6+28),"指定休日",TEXT(B9,"aaaa"))))
という数式を入れD39セルまでフィル&コピーすると
画像のような感じになります。

※ 「指定休日」とは第二・第四土曜日としています。m(_ _)m
「<エクセル2016>勤怠表+カレンダーに」の回答画像4
    • good
    • 0
この回答へのお礼

tom04 様

 頭の回転が悪い私でも、関数式+図解で非常にわかりやすかったです。
ありがとうございました。

お礼日時:2016/07/06 13:11

》 『28年8月度(仮に2016/8/1) 』と入力したら、


》 このD欄に…文字がでるように…
入力は何処に?
「このD欄」には既に「曜日を入力」しているのでは?
矛盾しないやうに願います。
    • good
    • 0
この回答へのお礼

mike_g 様

ありがとうございます。

お礼日時:2016/07/06 13:01

…VLOOKUP関数を使った条件の判断はIFERROR関数を使い、エラーが返ったら次の条件…とすると良い。


ただしこれはExcel2007から追加された関数なので、古いバージョンのExcelや互換性のない表計算ソフトで使うことを考えるならISERROR関数のほうがよい。
(No.1で最後に示した関数式の例はこのISERRORを想定したものです)
    • good
    • 0
この回答へのお礼

銀鱗様

私はエクセルの取り扱いに関してまだまだ未熟です。少しづつ勉強します。

お礼日時:2016/07/06 13:19

B列の「日にち」が「日付」で入力されていて、「セルの書式設定」を使って「日」だけを表示させているとします。



曜日の表示だけであれば、セルの書式設定で 「aaa」を指定することで「月火水木金土日」を表示させられます。
指定の休日に規則性があるならば、数学的な処理で解決できます。
祝日の名称であれば、他に祝日の一覧を作成しVLOOKUP関数を用いて日付に対応する祝日の名称を表示でしょう。
不定休日もここに含めると良いでしょう。

まずは曜日を表示させる関数式を考える。
=TEXT(B9,"aaa")
これでよい。

祝日とその名称を表示させる関数式を考える。
祝日とその名称の一覧を作成。
Sheet2のA1から下へ祝日の日付、B1から下に祝日の名称を、不定休日を含めて作成。 
  A  B
1 1/1 元旦
2 1/2 三が日
: :  :
そして関数式
=VLOOKUP(B9,Sheet2!A:B,2,0)

第2土曜日と第4土曜日を判断する関数式を考える。
まずは、どんな数字になるのかを書き出す。
第1土曜日はその月の1日から7日までの間にある。
第2土曜日はその月の8日から14日までの間にある。
第3土曜日はその月の15日から21日までの間にある。
第4土曜日はその月の22日から28日までの間にある。
ならば、日付から1を引いた値を14で割って、余りが7以上の日付が土曜日なら第2、第4土曜日と判断できる。
(カレンダーを見ながら実際に計算して確認してください)
数値を割った余りはMOD関数で求められる。
曜日はWEEKDAY関数を使うと数字で表示できる。
両方を満たすという条件はAND関数を使えば得られる。
=IF(AND(MOD(DAY(B9)-1,14)=>7,WEEKDAY(B9)=7),TRUE,FALSE)

あとはこれを条件の順番にIF関数で判断させればよい。
・・・
これは宿題という事でやってみてください。
=IF(条件1,条件1が成立する時の値,IF(条件2,条件2が成り立つ時の値,曜日を表示する))
こんな感じだろう。


※上記の関数式は実際に試して動作を確認したわけではありません。
 正しく動作しないときは、各関数の意味をよく考えて自力で修正してみてください。
 考え方は示しているので理解できていれば難しくは無いと思います。
    • good
    • 0
この回答へのお礼

銀鱗様

 お礼が遅くなりました。
早々のご指導、ご鞭撻ありがとうございました。

お礼日時:2016/07/06 12:59

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