
発注関係のプログラムをVBAで作成しています。
月の中で、1週間で月~土のある週のうち、最終週を求めたいと考えています。
伝わりにくいのですが、例えば2024年であれば
9月:第5週まであるが、月~土まであるのは9/22の週
10月:10/20の週
といったようにして求めたいと考えています。
if文のフラグとして使う予定です。
Weekday関数なのか、Eomonth関数なのか、どれを組み合わせるとスマートな方法に
なるでしょうか。
ヒントをいただければと思います。
No.4ベストアンサー
- 回答日時:
こんな感じでも。
Function LastWeek(y, m) As Date
Dim dt As Date
dt = DateSerial(y, m + 1, 1)
LastWeek = dt - Weekday(dt) - 6
End Function
【使用例】
? LastWeek(2024,9)
2024/09/22
No.6
- 回答日時:
こんにちは
指定月の最終土曜日を求めて、その6日前(=日曜日)がお求めの日になると考えられます。
指定する月を 年、月で指定するとして、
Function lastWeekSet(ByRef y As Integer, ByRef m As Integer) As Date
lastWeekSet = DateSerial(y, m + 1, 0) ' 月末日
lastWeekSet = lastWeekSet - 6 - (Weekday(lastWeekSet) Mod 7)
End Function
のような関数を作成しておけば良いでしょう。
使い方は、上記の通りで、例えば 2024/9 なら
dd = lastWeekSet(2024, 9)
とすれば、変数 dd には 2024/9 で、一週が全部含まれている週の日曜日である 2024/9/22 のシリアル値が返されます。
No.5
- 回答日時:
No2です。
No4の方の回答のほうが、すっきりしてますね。
そちらを採用してください。
こちらにて、皆様へのお礼とさせていただきます。
色々と教えていただき、ありがとうございました。
皆様からの共通なものとして、翌月初日からのweekday分と、そこから定数である土曜日のweekday分の6を引くという考え方がよくわかりました。
こちらが難しく考えていたようで、決まった法則で処理することができますね。勉強になります、ありがとうございました。
No.3
- 回答日時:
回答を投稿したのですが、画像審査中のため、回答が表示されていませんが、回答が表示されたら、この回答を読んでください。
Private Function getLastSunday(ByVal yyyy As Long, ByVal mm As Long) As Date
の中に
Debug.Print Lastday
の行がありますが、これは確認用の行です。
コメントアウトするか、削除するかしておいてください。
No.2
- 回答日時:
以下は、西暦年、月が指定された時、該当する日曜日の日付を
返す関数 getLastSunday
とその関数の呼び出し例です。
添付図のA列が西暦年、B列が月になっています。この時、西暦年と月から
該当する日曜日の日付を求め、C列に表示しています。
呼び出し側のプロシージャである月土最終週()はテストのために作成したものです。実際に使用するのは、getLastSundayになります。
getLastSundayの考え方は以下の通りです。
①指定年月の月末日を取得
②月末日から1日に向かって、以下の判定を繰り返す。
その日が土曜日かを判定し、土曜日なら、その日付から6日を引いた日付が、求める日付となる。(繰り返し終了)
その日が、土曜日でないなら、更にその日の前日の日付について同様に判定を行う。
------------------------------------------------
Public Sub 月土最終週()
Dim ws As Worksheet
Dim yyyy As Long
Dim mm As Long
Set ws = ActiveSheet
For wrow = 2 To 13
yyyy = ws.Cells(wrow, 1).Value
mm = ws.Cells(wrow, 2).Value
ws.Cells(wrow, 3).Value = getLastSunday(yyyy, mm)
Next
End Sub
Private Function getLastSunday(ByVal yyyy As Long, ByVal mm As Long) As Date
Dim Lastday As Date
Dim wday As Date
'月末日を求める
Lastday = DateSerial(yyyy, mm + 1, 1) - 1
Debug.Print Lastday
'月末日に最も近い土曜日の日付を探す
For wday = Lastday To Lastday - 7 Step -1
If Weekday(wday) = 7 Then
'探した土曜日の日付から6日減算する
getLastSunday = wday - 6
Exit Function
End If
Next
End Function

No.1
- 回答日時:
西暦年と月が与えられた時、該当する日曜日の日付を返すような関数があれば良いのでしょうか。
例
年=2024
月=9の時
戻り値=2024/9/22
年=2024
月=10の時
戻り値=2024/10/20
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 週毎の集計 2 2023/08/04 16:56
- アルバイト・パート 週1休みの入れ方 2 2023/12/12 09:04
- 求人情報・採用情報 シフト勤務。年間休日。 1 2024/02/02 18:46
- 正社員 用事があって有休で休みたい。 有休って今5日は義務ですが今の仕事入って9ヶ月経ちましたが有休で休んで 2 2023/11/09 11:20
- Visual Basic(VBA) 祝日を除いた月曜から土曜までの1週間分の日付行を選択し、別シートへカットアンドペーストしたい 13 2023/07/13 22:46
- 就職 「完全週休二日制」の考え方 祝日週の休日も二日? 14 2024/08/07 08:21
- 求人情報・採用情報 月単位、週40時間の変形労働時間制で、 日曜祝日土曜半日の固定休+シフト制(平日一日)の企業の場合、 1 2023/08/10 23:43
- Excel(エクセル) エクセル2013で月間勤務表から週間勤務表へ自動転記する方法と関数の仕組みを教えて下さい。 1 2024/03/29 23:13
- 病院・検査 7/1土曜日に家族が入院しました。 先週の金曜日と今週の月曜日に担当のドクターから電話で病状の説明が 5 2023/07/13 02:40
- 飲み会・パーティー バイトのシフト 2 2023/12/21 00:18
このQ&Aを見た人はこんなQ&Aも見ています
-
Excelファイルのすべての更新日時を調べる方法
Excel(エクセル)
-
エクセル IF計算式?でしょうか?
Excel(エクセル)
-
複数のテキストファイルをexcelでそれぞれ別シートにUTF-16で書き出したい
Excel(エクセル)
-
-
4
Excelの時刻の不思議
Excel(エクセル)
-
5
エクセルデーターから必要な項目を抜き出す方法を教えてください
Excel(エクセル)
-
6
エクセルで、数字ではない値(文字列)が入った場合の計算式を教えてください。
Excel(エクセル)
-
7
エクセル初心者です 用語等まだ良く分からないので簡単に説明していただけると幸いです タブの挿入、図形
Excel(エクセル)
-
8
納期順に勝手に並べ替えられるようにしたいのですが…
Excel(エクセル)
-
9
Excelの条件付き書式について
Excel(エクセル)
-
10
win10でexcel2003
Excel(エクセル)
-
11
エクセル。金額から「円」を除去して、その結果を集計したいが出来ない!
Excel(エクセル)
-
12
作成した数式を値として表示し、 その後別のセルへコピーするといった作業をしています。 しかし、コピー
Excel(エクセル)
-
13
OFFSET関数を使用したいのですが、 一行分しか参照されません。 =OFFSET(対象セル,0,0
Excel(エクセル)
-
14
エクセルにて時間帯にて自動で表示を変える
Excel(エクセル)
-
15
Excelの計算で差分を求める場合について
Excel(エクセル)
-
16
年間の医療費のデータがあり、月々の集計をする計算式を教えていただけませんか
Excel(エクセル)
-
17
45490がどうして
Excel(エクセル)
-
18
条件付き書式の効率的な設定の仕方について
Excel(エクセル)
-
19
Excelの関数について このように、Iの個数に基づいて、 それの合計を、Dに表示させたいです。 下
Excel(エクセル)
-
20
【Excel】 1つのセルの日にちを4分割にしたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル ドロップダウンリスト...
-
特定のセルだけ結果がおかしい...
-
エクセル
-
エクセルのdatedif関数を使って...
-
【マクロ】アクティブセルの時...
-
【関数】同じ関数なのに、エラ...
-
エクセルの循環参照、?
-
【マクロ】A列にある、日付(本...
-
【マクロ】3行に上から下に並...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】WEBシステムから保存...
-
iPhoneのExcelアプリで、別のシ...
-
【エクセル】期限アラートについて
-
Excelファイルを開くと私だけVA...
-
Excelの新しい空白のブックを開...
-
Excelについての質問です 並べ...
-
マクロ・VBAで、当該ファイルの...
-
VBA チェックボックスをオーバ...
-
派遣会社とかハローワークとか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelファイルを開くと私だけVA...
-
エクセルについてどう関数を使...
-
マクロ・VBAで、当該ファイルの...
-
エクセルのセルに画像は埋め込...
-
エクセルで、一部のセルだけ固...
-
【マクロ、画像あり】A表かB表...
-
エクセルでカウントする
-
【マクロ】コードを少しでも、...
-
VBA_日時のソート
-
エクセルで教えてください。 例...
-
エクセル 月間シフト表で曜日ご...
-
セルの左に余白を付ける
-
エクセル
-
エクセルについて教えてください
-
2枚のエクセル表で数字をマッチ...
-
ExcelのIF関数との組み合わせの...
-
エクセルのファイルのコピーを...
-
エクセルで二つのブックの違い...
-
空白処理を空白に
-
Excelのチェックボックスについ...
おすすめ情報
回答ありがとうございます。
そうですね、その戻り値があれば、inputboxで指定した日付と比較ができます。
それを基にして、該当日以前なら通常処理を、該当日よりも後であれば、戻り値を基準に処理をする
といったプログラムになります。