アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windows 7 SP1 + Excel 2013での問題です。

ある月が4週あるのか5週あるのかで条件分岐をさせたいので、
Weeknum関数を使って、下記のような判定(実際にはNenとTukiはポップアップを表示させて入力させています)をさせることを考えました。下記の判定の前後のコードまでいちおうコーディングしたうえで、F8キーでデバッグを開始したところ、WeekNumにフォーカスがあたった状態で、
「コンパイルエラー:SubまたはFunctionが定義されていません」と表示され、エラーになります。
この判定に使っている関数(Weeknum)がExcel2013でサポートされていることは
確認済みです(*1)。
なぜこのようなことになるのでしょうか。

≪判定≫
Nen = 2020
Tuki = 1
WeekCnt = WeekNum(DateSerial(Nen, Tuki + 1, 0))

(*1)https://support.office.com/ja-jp/article/weeknum …

A 回答 (4件)

こんにちは




VBAでは、ワークシート関数がそのまま使えるわけではありません。
とは言え、多くの関数が利用できるようにはなっています。
詳細を確認する場合はワークシート関数のリファレンスではなく、VBAのリファレンスを参考にするようにしてください。
https://docs.microsoft.com/ja-jp/office/vba/api/ …

利用する際には、WorksheetFunctionオブジェクトのメソッドとして使うことになります。
具体的には、
WeekCnt = WorksheetFunction.WeekNum(DateSerial(Nen, Tuki + 1, 0))
といった感じです。
    • good
    • 0

>ある月が4週あるのか5週あるのかで条件分岐をさせたいので、


この質問の求める起点が合っているのか分からないのですが、WeekNum関数を使っているところから、このようになるのではないかと思いました。Weekdayでしたら、両方の最初と最後の週の数の曜日の補数を補完して、その差を7で割ると考えました。間違っていたらすみません。


'//
Sub Test1()
Dim Nen As Long, Tuki As Long
Dim Fd As Date '1日
Dim Ld As Date '月末日 Latest Day of Month
Dim WeekCnt As Long First Day of Month
Nen = 2020
Tuki = 2
Fd = DateSerial(Nen, Tuki, 1)
Ld = DateSerial(Nen, Tuki + 1, 0)
With WorksheetFunction
WeekCnt = .WeekNum(Ld) - .WeekNum(Fd) + 1
End With
'' WeekCnt2 = ((Ld + 7 - Weekday(Ld, vbSunday)) - (Fd + 1 - Weekday(Fd, vbSunday)) + 1) / 7 'ワークシート関数を使わない場合
End Sub
    • good
    • 0

直接質問への回答ではありません


カレンダーなどの作成のための週数を求めているのでしょうか?
もしそうならば4週~6週になります。
単純に週数を調べるなら月末の日付を7で割って端数をカットすれば良いような気がします。その場合はうるう年で無い2月のみが4週、他は全て5週です。
    • good
    • 0

単に「WorksheetFunction」を付け忘れているだけでは?



Nen = 2020
Tuki = 1
WeekCnt = WorksheetFunction.WeekNum(DateSerial(Nen, Tuki + 1, 0))
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!