- ベストアンサー
エクセルで、指定曜日を表示させる関数、及び方法をお教えください。
エクセルで、指定曜日を表示させる関数、及び方法をお教えください。 Aさん 10/22~10/28 "□" 第4日曜日 Bさん 10/29~11/04 "□" Cさん 11/05~11/11 "□" 第2水曜日 上記例でのご説明です。 "○さん"の指定された期間内に、任意に指定した曜日が含まれる場合、 上記例では"□"中に4を入れると"第4日曜日"を、2を入れると"第2 水曜日"を表示するように作っています。 …が、現在"□"内はカレンダーを見ながら、手入力しています。 "□"を自動入力できる関数なり方法を考えてみましたが、妙案が 見つかりません。 良案がございましたら、お教えいただきたいと思います。 指定曜日は、随時変更になります。指定曜日を変更できる 方法でお願いいたします。 期間計算は、日曜日から土曜日までを自動計算させています。 たとえば"Aさん"の担当日は、表面では見えない別セルで、すべての 日を計算させて、曜日も算出させています。そのセル郡よりデータを 抽出することも可能です。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
A B C D E 1 名前 開始日 終了日 指定曜日 第 2 Aさん 10/22 10/28 日 4 3 Bさん 10/29 11/04 4 Cさん 11/05 11/11 水 2 E2: =IF(D2="","",LEN(LEFT(MID(REPT("0123456",6),FIND(MOD((EOMONTH(B2,-1)+1),7),REPT("0123456",6)),EOMONTH(B2,0)-EOMONTH(B2,-1)),DAY(B2+FIND(D2,"土日月火水木金")-1-MOD(B2,7)+7*(FIND(D2,"土日月火水木金")<MOD(B2,7)+1))))-LEN(SUBSTITUTE(LEFT(MID(REPT("0123456",6),FIND(MOD((EOMONTH(B2,-1)+1),7),REPT("0123456",6)),EOMONTH(B2,0)-EOMONTH(B2,-1)),DAY(B2+FIND(D2,"土日月火水木金")-1-MOD(B2,7)+7*(FIND(D2,"土日月火水木金")<MOD(B2,7)+1))),FIND(D2,"土日月火水木金")-1,"")))
その他の回答 (5)
- Nouble
- ベストアンサー率18% (330/1783)
まず最初に これってマルチポストですね 私も規約違反常習者なのでとやかくは言えませんが… (*^_^;)ゞ 本題ですが このやり方では関数やマクロなどで表現できたとしても 実用に耐えるものには成らないと思います なぜなら エクセルに頼るということは ある意味人間の思考を肩代わりしてもらうことになるわけですが そうなると極端な場合 Cさん 11/05~11/11 "4" 第??? ???曜日(当然ながら期間中に第四週は含まれない) と言うことも起こりかねます 人なら 「あ!これ駄目じゃん 違う書き方にしよ…」 と ほぼ無意識下レベルで判断が入りますが エクセルだと 「#N/A!」で終わってしまい これを修正するためにまたカレンダーを見て 関数を消してしますかマクロがはき出した内容を 書き換えることになると思います このファイルの操作をする全員に エクセルの高度な教育 (このサイトでのエクセルに関する質問など起こり得ない位に) を施すことを前提にしているなら これでも構わないかも知れませんが 費用対効果があまりにも薄すぎ 実用に踏み切ってもメリットを見いだせないと思います。 此方に回答を寄せられている方々のような 空き時間のスケジュールを管理しているテーブルを作っておいて その中で期間中の指定曜日で スケジュールが空いているタイミングをリストアップする… とか 指定した期間中で指定曜日はこの日とこの日と… と言う具合なリストアップをする なら出来ると思いますが 自動化に向けるには何らかの変更が必要に思えます
お礼
ご投稿ありがとうございます。 まずマルチポストについてですが、第1回目の質問した後に、言葉足らずが見つかりまして、いろいろな意味に取れて、かえってややこしくなりそうなので、削除もできませんので、補足を付け足して再送いたしました。 その後直ぐに管理者に削除依頼メールを送ったのですが、削除されるまでのタイムラグがありまして、ご迷惑をおかけいたしました。 ご回答いただきましたように、一見簡単そうにも見える作業ですが、論理構成が難しいのは、未熟ではありますが、私なりに熱を出して考えてみても答えがなかなか出せませんでした。 論理構成の妙案があればと思い、投稿させていただきました。 おかげさまで、ヒントいただけましたので、今週末に検証させていただきたいと思います。 Noubleさんのご意見も参考にさせていただきます。ありがとうございました。お礼が遅くなりすいませんでした。
- rin01
- ベストアンサー率43% (33/76)
だびたびで~す。。。♪ そそっかしいので よく見たら D列に、表の様に曜日が出ていませんでしたね~。。。 式を訂正します。 D1: =TEXT(INT((DAY(MAX(INDEX((TEXT(((B1+ROW(INDIRECT("1:"&C1-(B1-1))))-1),"aaa")=D1)*((B1+ROW(INDIRECT("1:"&C1-(B1-1))))-1),)))-1)/7)+1,"第0;;;")&TEXT(D1,";;;@曜日") D列の書式は、標準でいいです。。。 でした。。。Ms.Rin~♪♪
お礼
短時間での複雑な数式投稿ありがとうございました。恐れ入りました。御礼が遅くなりましてすいませんでした。所要が多忙で、今週末に検証させていただきたいと思いますのでそれまでよろしくお願いいたします。
- rin01
- ベストアンサー率43% (33/76)
こんにちは~♪ こんな表の場合で~す。。。 A B C D E 1 Aさん 10/22 10/28 日 第4日曜日 2 Bさん 10/29 11/04 月 第5月曜日 3 Cさん 11/05 11/11 水 第2水曜日 ★2つの日付の期間に、同じ曜日が複数ある場合は 考慮していません。。 ★式が長くなりますので~。10/22~10/28 の日付は B列とC列に、分けて入力します。 ★D列は、指定曜日を文字で入力します。 (表の様に。。。) (ドロップダウンリストを使えば、入力も楽になります) 指定曜日は、数値(WEEKDAY No)よりわかりやすいと思って そうしました。 数値のが良かったでしょうか? ★式は D1: =INT((DAY(MAX(INDEX((TEXT(((B1+ROW(INDIRECT("1:"&C1-(B1-1))))-1),"aaa")=D1)*((B1+ROW(INDIRECT("1:"&C1-(B1-1))))-1),)))-1)/7)+1 下にコピーします。 ★D列の書式をユーザー定義から "第"0"曜""日";;; に、します。。 。。。Ms.Rinでした~♪♪
お礼
短時間での複雑な数式投稿ありがとうございました。恐れ入りました。御礼が遅くなりましてすいませんでした。所要が多忙で、今週末に検証させていただきたいと思いますのでそれまでよろしくお願いいたします。
- takase_000
- ベストアンサー率27% (52/189)
#1です。 月をまたぐ場合の処理を組み込みました。 ="第"&(IF(TEXT(A2,"mm")=TEXT(A2+X,"mm"),ROUNDDOWN((TEXT(A2,"dd")+X+WEEKDAY(TEXT(A2,"yyyy/mm/")&"01")+1)/7,0),1))&TEXT(A2+X,"aaa")&"曜日" 要領はさっきと同じです。 Xとなっている部分に各曜日の数値を当てはめてください。
お礼
すばやいご回答ありがとうございます。質問してから"チョウ"短時間でのレスポンス恐れ入りました。御礼が遅くなりましてすいませんでした。所要が多忙で、今週末に検証させていただきたいと思いますのでそれまでよろしくお願いいたします。
- takase_000
- ベストアンサー率27% (52/189)
=ROUNDDOWN((TEXT(A2,"dd")+X+WEEKDAY(TEXT(A2,"yyyy/mm/")&"01")+1)/7,0) A2セルへは、対象となる週の初めの年月日を入力します。 10月であれば2006/10/1、2006/10/8。11月であれば2006/11/5日、2006/11/12日など。 式の中に「X」とある部分に曜日に応じて数値を入力します。 日曜=1 月曜=2 火曜=3 ~~ 土曜=7 これでその週の指定曜日が第何週なのかがわかりますが、 月をまたぐ日付が指定されている場合の考慮はしていませんので、組み込む必要があります。
お礼
すばやいご回答ありがとうございます。質問してから"チョウ"短時間でのレスポンス恐れ入りました。御礼が遅くなりましてすいませんでした。所要が多忙で、今週末に検証させていただきたいと思いますのでそれまでよろしくお願いいたします。
お礼
短時間での複雑な数式投稿ありがとうございました。恐れ入りました。御礼が遅くなりましてすいませんでした。所要が多忙で、今週末に検証させていただきたいと思いますのでそれまでよろしくお願いいたします。