アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelで勤務表を作っています。

出勤は曜日で決まっていますが、人によって毎週水・金・土曜や、毎週日・月・火・木など、曜日も日数もさまざまです。

その勤務表を、曜日を入れたらその月の日にちが横並びに出るようにしたいです。
INDEX関数や、ROW,COLUMN,SMALL,WEEKDAY,WORKDAY.INTLなどなど、いろいろ関数は思いつくのですが、表示結果は月曜日だけ、や水曜日だけ、など、特定の曜日しか表示できなくて困っています。

図のように、横に引っ張ったらその月の複数の曜日から日付を返せるでしょうか?

「特定の曜日から日にちを取り出す式」の質問画像

A 回答 (2件)

こんばんは!



一案です。
↓の画像のように別シート(画像ではSheet2)を作業用のシートとして使ってみてはどうでしょうか?
(画像が小さくて見えにくいと思いますので、拡大してみてください)

そして、出勤曜日はSheet1に別列にそれぞれ入力しておきます。
各シートの「氏名」の行の並びは同じ並びだとして、

尚、Sheet1のC1セル → 西暦年 E1セル → 月 の数値を入力し、シリアル値で処理するとします。

まず作業用Sheet(Sheet2)のA1セルは
=Sheet1!C1

C1セルは
=Sheet1!E1

とし、B3セル(セルの表示形式はユーザー定義から d としています)に
=IF(MONTH(DATE($A1,$C1,COLUMN(A1)))=$C1,DATE($A1,$C1,COLUMN(A1)),"")

B4セルに
=TEXT(B3,"aaa")

という数式を入れ、B3・B4セルを範囲指定 → B4セルのフィルハンドルで月末のAF列までコピー!
そしてB5セルに
=IF(COUNTIF(Sheet1!$D5:$J5,B$4),"○","")
という数式を入れ列・行方向にフィル&コピー!

これで出勤曜日に「○」が表示されますので、これを利用します。

Sheet1のD10セル(セルの表示形式は好みの日付で)に
=IFERROR(INDEX(Sheet2!$B$3:$AF$3,SMALL(IF(Sheet2!$B5:$AF5="○",COLUMN($B1:$AF1)-1),COLUMN(A1))),"")

配列数式なので、Ctrl+Shift+Enterで確定!(←必須★)し
フィルハンドルで列・行方向にコピーすると
画像のような感じになります。m(_ _)m
「特定の曜日から日にちを取り出す式」の回答画像1
    • good
    • 0
この回答へのお礼

助かりました

おはようございます。
回答ありがとうございます!

あれこれ考えて全然たどり着けなかった答えに…!
Excelを10年ほど触っていますが、配列数式という言葉、初めて聞きました(*_*)

最初に作ったのが曜日判定で、欠勤や振替、現場・人間が追加された分を印刷シートに直接打ち込んでいました(;'∀')
一回一回抽出関数を消して手入力で追加していました( ノД`)シクシク…
これで日付が判定できるので、追加修正が簡単にできます!

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

お礼日時:2020/01/30 08:26

私ならば、下図のようなレイアウトにすると思います。


もちろん出勤日の欄はもっと増やしますけどね。
この手は計算式だと複雑になりがちなので個人的にはマクロ(VBA)を使ってしまうと思います
「特定の曜日から日にちを取り出す式」の回答画像2
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

私も作業しやすいレイアウトに変えたいとは思いますが、会社のフォーマットなので、私の一存でレイアウトを変えることができません(;'∀')
マクロやVBAですよね…。
私も勉強しようかなとこの問題に直面して思いましたが、私が扱えたところで別の人が扱えなかったらな…。と思うところです(;^_^A

回答ありがとうございました!

お礼日時:2020/01/30 08:29

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