• ベストアンサー

Excelで「その年の最初の土曜日」

Excelで、土日だけを抽出したリストをつくりたいんですが、どこかのセルに「西暦」を入力すると、その年の一番最初の土曜日を表示させる、というロジックはどう作れば良いのでしょうか。 その年の最初の土曜日さえ出れば、後はずっと、その日付+1が日曜だし、+7が次の土曜なので、指定できるのですが・・・。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

こんにちは。 A1セルに2011などのように記入して =IF(A1="","",FLOOR(DATE(A1,1,0),7)+7)) とかで計算できます。

uekido
質問者

お礼

ありがとうございます! これを採用しようと思ったのですが、・・・今年のように日曜が1/1に来る年の場合、土曜を取得したのでは1/1が落ちてしまうのでだめで・・・。 小さい値のほうを表示させるようIF設定しましたが、それじゃ昨年の日付も表示されてしまう(泣)そりゃそうか・・・。 しばらく考えたのですが自力だと苦しいし、ちょっと時間が差し迫っているので、また新しく質問させていただきたいと思います。 皆様ありがとうございました。 たいへん勉強になりました。

その他の回答 (4)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.5

では・・私はあえてマクロで(笑) 縦一列(B列)に羅列バージョン。 Sub test() Dim i As Integer, j As Integer Dim myDay As Date  j = 1  For i = 1 To 366   myDay = DateSerial(Cells(1, 1), 1, i)    If Year(myDay) <> Cells(1, 1) Then Exit For    If Weekday(myDay) = 7 Then     Cells(j, 2) = myDay     j = j + 1    ElseIf Weekday(myDay) = 1 Then     Cells(j, 2) = myDay     j = j + 1    End If  Next End Sub 土曜日をB列、日曜日をC列バージョン。 Sub test2() Dim i As Integer, j As Integer Dim myDay As Date  j = 1  For i = 1 To 366   myDay = DateSerial(Cells(1, 1), 1, i)    If Year(myDay) <> Cells(1, 1) Then Exit For    If Weekday(myDay) = 7 Then     Cells(j, 2) = myDay    ElseIf Weekday(myDay) = 1 Then     Cells(j, 3) = myDay     j = j + 1    End If  Next End Sub どちらも、A1に「西暦年」が入力されているのが条件です。 こんな感じで。

uekido
質問者

お礼

わー、ありがとうございます! 大作ですね。 今回マクロは使いませんが(笑)大事に保存しときます!

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

仮に A1セルに 年 2012 と数値が入っているとして =DATE(A1,1,8-WEEKDAY(DATE(A1,1,1))) では、いかがでしょうか? その年の1月8日まで進んで、その年の1月1日のWeekday関数分だけ戻る Weekday関数の戻り値についてはHelpででも確認してください。

uekido
質問者

お礼

ありがとうございます。 なるほどですね・・・。その手もありますか。 先にお答えいただいた方のにも書いたんですが、私の考え違いで、土曜日だけを取得して後を+1とかで行こうと思うと、1/1(日)が落ちるので(笑)、実際には日曜日も取得し、小さい方を表示させるようにしなきゃいけないですね。 参考になりました。

回答No.2

A列に1/1~12/31を入力 B列: =IF(WEEKDAY($A1,2)>5,"H","") 以下、コピー オートフィルタで、B列が"H"なものだけを抜き出す。 土日だけがコピーできる。オシマイ、、、

uekido
質問者

お礼

ありがとうございます。 なるほど(笑) スケジュール表がつくってあるという事は、日付一覧はある訳ですからね・・・。 参考になります。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

A1セルに「西暦」を入力するとして、 =DATE(A1,1,1)+13-WEEKDAY(DATE(A1,1,1),2)

uekido
質問者

お礼

ありがとうございます! ところが自分でやってみて気づいたんですが、2012年のように1/1が日曜日だった場合、土曜日を取得する数式だけだと、1/1(日)が落ちてしまう! 今年がそんな年だったから気づきましたが、危ないとこでした。 なので、いただいた数式と、日曜日を取得する数式を並べ、IFでもって小さいほうを表示させるようにすれば良いんですね。 たいへん参考になりました!

関連するQ&A