今日を基準として、特定の日付が何週目になるかを計算する方法 | |
---|---|
[194816] 今日を基準として、特定の日付が何週目になるかを計算する方法- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ InoYui -(2022/04/16(07:24)) □U R L/ すいません。 初めて利用させていただきます。よろしくお願いします。 ご教授願います。 質問内容としては、 今日の日付を基準として特定のセルの日付(シリアル値が入力されているセル)が何週目 (未来に何週目、過去に遡って何週目も含め)になるのかを知りたいです。 例えば 1 特定のセルの日付は、2022/4/18である場合、今日の日付が2022/4/16であれば 特定のセルの日は1週間後(来週)と判断 2 特定のセルの日付が、2022/4/4である場合、今日の日付が2022/4/16であれば 特定のセルの日は1週間前(先週)と判断 3 特定のセルの日付が、2022/5/4である場合、今日の日付が2022/4/16であれば 特定のセルの日は3週間後と判断 4 特定のセルの日付が、2022/3/19である場合、今日の日付が2022/4/16であれば 特定のセルの日は4週間前と判断 と例を記載しました。 カレンダーを見て、来週、先週や今日から何週間目なのかを自動で判断できるよう したいと思っています。 どのように求めればよいかご教授を願います。 ネットで調べながら下記のように作成してみましたが、うまく結果がでませんでした。 下記のコードでは、今日の日付と特定の日の期間を求め、単純に7で割るというものです。 これだと、土曜日から計算して3日後が来週になるものと、月曜日から計算して3日後が 今週である、等の同じ3日でも、違い結果になる、このような判断ができないのです。 また、計算した結果の商の値が-(マイナス)になる場合、どのように計算すればよいか わかりません。 表の形式は、週間行事シートという名称のシートを利用して、そのシートの A列のA3から日付が1週間+1日分入力(シリアル値)されています。 今日の日から見てA3の日は何週目なのかを知りたいという感じのものです。 分かりづらい質問ですいません、どなたかご教授願います。 Sub 日付間隔計算() Dim MyInterval As Long Dim MyYear, MyMonth, MyDay As Date Dim MyDivideBy7 As Long Dim SelectWeek As Variant '週間行事シートのA3セルの年、月、日を取得 MyYear = Year(Range("a3")) MyMonth = Month(Range("a3")) MyDay = Day(Range("a3")) '指定した日付けの文字列を日に変換 SelectWeek = DateSerial(MyYear, MyMonth, MyDay) '今日の日付けと取得した日付けとの間隔を計算 MyInterval = DateDiff("d", SelectWeek, Date) '期間を7で割った商を求める MyDivideBy7 = MyInterval \ 7 Select Case Int(MyDivideBy7) Case o MsgBox "今週です" End Select End Sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 ++++++++++++++++++++ OS ⇒Windows Vista Version⇒Excel 2007 ++++++++++++++++++++ |
[194817] Re[1]: 今日を基準として、特定の日付が何週目になるかを計算する方法- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2022/04/16(09:23)) □U R L/ > '週間行事シートのA3セルの年、月、日を取得 > MyYear = Year(Range("a3")) > MyMonth = Month(Range("a3")) > MyDay = Day(Range("a3")) そこ、何の為に分解しているんですか? A3の日付って、文字列データとかなのですか? ・・だとしても、単にでもよさそうに思いますけど。 ↓ SelectWeek = DateValue(Range("A3")) |
[194818] Re[2]: 今日を基準として、特定の日付が何週目になるかを計算する方法- ■記事引用/メール受信=OFF■ □投稿者/ InoYui -(2022/04/16(10:11)) □U R L/ > '週間行事シートのA3セルの年、月、日を取得 > MyYear = Year(Range("a3")) > MyMonth = Month(Range("a3")) > MyDay = Day(Range("a3")) そこ、何の為に分解しているんですか? A3の日付って、文字列データとかなのですか? ・・だとしても、単にでもよさそうに思いますけど。 ↓ SelectWeek = DateValue(Range("A3")) ありがとうございます。 マクロの知識がないためネットに見つけたコードを変更して使っています。 DateSerial を使うためには、引数に各、年、月、日のデータ必要だと思い、分解し使ったものです。 A3セルはシリアル値のデータ入っています。 SelectWeek = DateValue(Range("A3")) で可能であればこちらのほうが簡単なのでこちらを利用します。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194819] Re[3]: 今日を基準として、特定の日付が何週目になるかを計算する方法- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2022/04/16(10:24)) □U R L/ >A3セルはシリアル値のデータ入っています。 なら、変換は全く必要ありません。(DateValue関数も噛ます必要がないです) Sub 日付間隔計算() Dim SelectWeek As Date Dim myLastSat As Date Dim lastSat As Date Dim MyInterval As Long Dim MyDivideBy7 As Long '特別日の先週土曜日を算出する SelectWeek = Range("A3").Value myLastSat = SelectWeek - Weekday(SelectWeek) '今日の先週土曜日を算出する lastSat = Date - Weekday(Date) '上記土曜日同士の差を計算 MyInterval = myLastSat - lastSat '期間を7で割った商を求める MyDivideBy7 = MyInterval \ 7 Select Case MyDivideBy7 Case Is < 0 MsgBox Abs(MyDivideBy7) & "週間前です" Case 0 MsgBox "今週です" Case Is > 0 MsgBox MyDivideBy7 & "週間後です" End Select End Sub |
[194820] Re[4]: 今日を基準として、特定の日付が何週目になるかを計算する方法- ■ / 記事引用/メール受信=OFF■ □投稿者/ InoYui -(2022/04/16(11:47)) □U R L/ 半平太さん、ありがとうございます。 考えていた結果を得ることができました。 教えていただいたコードを使いたいと思います。 本当に素早い対応でありがとうございます。 一つ教えていただきたいのですが、土曜日同士の差を計算するのはどのようなことになるのでしょうか? 作成をしていて、土曜日同士の差を算出するとの発想が全く出てきませんでした。 どのように考えればよいのでしょうか? (なぜ、自分でその考えが出なかったのかを検討したいとの思いです。) 今後の勉強のために、もしよろしければご教授を願います。 |
[194822] Re[5]: 今日を基準として、特定の日付が何週目になるかを計算する方法- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2022/04/16(13:09)) □U R L/ 特に土曜日を出して計算しなくてはならないものではないです。 ロジックが正しければ、どんな方法でも可です。発想の問題です。 長年、こう言う掲示板の回答をやっているとそんな発想が普通に出てくるだけです。 2つの日付が同じ週かどうか判定する場合、先週の土曜日が同じかどうか判定すればいいですね。 先週の土曜日は、その日-Weekday(その日) で出せるので計算が簡単です。 今回はその応用です。 週が違う場合、日数差が7の倍数なので、端数の問題がなく楽ちんです。 |
[194823] Re[6]: 今日を基準として、特定の日付が何週目になるかを計算する方法- ■ / 記事引用/メール受信=OFF■ □投稿者/ InoYui -(2022/04/16(13:42)) □U R L/ 半平太さん ご指導、ご教授ありがとうございました。 素早い対応をしていただきまして、スムーズに完成することができました。 自分自身ではネットの拾い読みをして色々なもの(情報)を組み合わせで作っております。 自身の柔軟さの無さと視野の狭さを感じました。 正確なロジックがすばやく柔軟にでるように私もなりたいと思います。 今回は非常に勉強となりました。 このようなサイトがあることを知り初めて利用させていただきました。 頼もしい限りです。 今回は本当にありがとうございました。 |
このトピックに書きこむ |
---|