発注関係のプログラムを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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
架空の映画のネタバレレビュー
映画のCMを見ていると、やたら感動している人が興奮で感想を話していますよね。 思わずストーリーが気になってしまう架空の感動レビューを教えて下さい!
-
エクセル IF計算式?でしょうか?
Excel(エクセル)
-
Excelの時刻の不思議
Excel(エクセル)
-
複数のテキストファイルをexcelでそれぞれ別シートにUTF-16で書き出したい
Excel(エクセル)
-
-
4
excel で二つのどちらかを選ぶ
Excel(エクセル)
-
5
Excelで、決まった行を繰り返しコピーする
Excel(エクセル)
-
6
【マクロ】ファイル名の変更について
Excel(エクセル)
-
7
時間によってファイル名が変わるエクセルをほかのエクセルでデータを参照する方法
Excel(エクセル)
-
8
エクセルの関数について教えてください
Excel(エクセル)
-
9
エクセルでの作業計算方法について
Excel(エクセル)
-
10
【EXCEL】画像の黄色部分の抽出方法を教えてほしいです。
Excel(エクセル)
-
11
文字2桁、3桁交じりの文字列を並び替えるマクロ
Excel(エクセル)
-
12
エクセルで 自動的に◯や数字を表示させることできます? 例えばなんですが 日付 山田 1 ◯ みたい
Excel(エクセル)
-
13
エクセルのツールバーから数値が消えました。
Excel(エクセル)
-
14
下記マクロでMsgBox 空白です。"の部分の メッセージボックスは現れるものの 空白です。の文字"
Excel(エクセル)
-
15
エクセルのクイックアクセスツールバーには何を登録したら良いですか?罫線を引く「格子・枠なし・外枠」と
Excel(エクセル)
-
16
Excelで表を作ったところに文字を打ったら下のようになるのですが、どうすれば枠内に文章を続けて行け
Excel(エクセル)
-
17
Excelセルを跨いで合計を出す方法
Excel(エクセル)
-
18
再質問です。マクロの修正箇所を教えてください。
Excel(エクセル)
-
19
Excelの数式の効率化について
Excel(エクセル)
-
20
Excelの条件付き書式について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで<a>,<b>の入ったセルをc...
-
エクセル VBA 参照設定とイ...
-
excelファイルの内容検索
-
【Excel VBA】 テキストファイ...
-
【再投稿】レイアウトが異なる...
-
excelVBAについて。
-
Excelの警告について
-
年間の医療費のデータがあり、...
-
Excel 標準フォントについて教...
-
Excel ショートカットで列、行...
-
【Excel】日付に連動してプルダ...
-
同率順位の発生しないランキン...
-
エクセルを使ってQRコードを作...
-
Excelについて教えてください ...
-
Excelファイルのすべての更新日...
-
大容量があつかえるソフトを探...
-
Excelの計算で差分を求める場合...
-
エクセルにて時間帯にて自動で...
-
毎週追加して行くセルの数値を...
-
スプレッドシート(エクセル) ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
エクセルデーターから必要な項...
-
エクセルでファイルの最終更新...
-
複数のテキストファイルをexcel...
-
Excelの複数条件の関数
-
【マクロ】ファイル名の一括変...
-
EXCELの散布図で日付が1900年に...
-
マクロの処理が遅くなった
-
Excelの時刻の不思議
-
エクセルでの2項目比較および...
-
Excelマクロで空白セルを詰めて...
-
エクセルの数式バーのフォント...
-
ExcelでASCを使って全角を半角...
-
エクセルで80万行、50列位のデ...
-
今まで文字化けなく開けていたc...
-
エクセルのことで教えてくださ...
-
エクセルVBA 月の中で、月~土...
-
Excelでの表の作り方
-
Excel セルにおけるフォント設...
-
エクセルの質問です。 F列からL...
おすすめ情報
回答ありがとうございます。
そうですね、その戻り値があれば、inputboxで指定した日付と比較ができます。
それを基にして、該当日以前なら通常処理を、該当日よりも後であれば、戻り値を基準に処理をする
といったプログラムになります。