Excel-VBA EOMONTH関数

シフトが必要となる現場での依頼。
週単位で作業者のシフトが決定されるので、ここから月単位の自動展開が希望。
1:週単位(日から土)の50人分のリストを5週分シートに展開する(自動)
2:一ヶ月1Bookを使うとのことで、Book名に年月を入れる
3:このファイル名からWeekDay関数とEOMONTH関数を使って、月初の曜日と
月末の日付を得る。
4:曜日は数値で返されるので、この数値から5週分のリストの頭の切り出し位置を決める
5:月末日で一ヶ月分のコピー位置を決定。

仕様は簡単だが、実際に作ってみると、意外に面倒、特にEOMONTH関数は、文字列
では動作が安定せず、シリアル値に変換が必要。

※ExcelとMSGVBAでがシリアル値が同じ日付でも異なる(1日誤差)
1900.01.01と1899.12.31
シリアル値は、この日から起算しての経過日数を数値で表す、Year、Dayの関数で、
年月日を求めることが出来る、セルから値を得るには便利。

以下、サンプルSource

Sub Macro6()

' Macro6 Macro
'
'
Dim XlName As String

Dim Mou As String
Dim MouED As String

Dim BookNam As String
Dim MonST_n As Long
Dim MonEN_n As Long
Dim SST_n As Long
Dim SEN_n As Long


'  ファイル名を取得
XlName = ThisWorkbook.Name

' Debug.Print ThisWorkbook.Name


BookNam = Mid(XlName, 6, 6) ' ファイル名から年・月を切り出す

Sheets("MAS1").Select


Mou = Left(BookNam, 4) & "/" & Right(BookNam, 2) & "/01" ' 検索用に年月日を作成

MouED = WorksheetFunction.EoMonth(Mou, 0) ' 月末日の決定


Range("A5") = Mou
Range("A6") = WorksheetFunction.EoMonth(Range("A5").Value, 0)

MonST_n = Weekday(Mou) ' 1日の曜日を求める
SST_n = MonST_n + 18
MonEN_n = WorksheetFunction.EoMonth(Range("A5").Value, 0)
MonED = WorksheetFunction.EoMonth(Range("A5").Value, 0)

Debug.Print Mou
Debug.Print Day(MouED)
Debug.Print MonST_n
Debug.Print SST_n
Debug.Print Day(MonED) + SST_n - 1

End Sub


わかお かずまさ
VegaSystems

📷📷📷📷📷📷
#LAN_PRO
#Bloguru
#kuma

ワオ!と言っているユーザー

秋の陽はつるべ落とし(2022.10.23)

今日の落日です・・・
まさに、秋の陽は

日射角度が下がったいるので同じ時間でも沈下速度が早まりますね。


わかお かずまさ
VegaSystems

📷📷📷📷📷📷
#LAN_PRO
#Bloguru
#kuma_ichinomiya
#VegaSystems
#photography_Ichinomiya
#X100V
#sunrise_ichinomiya
#Sunset_ichinomiya
#日の出_一宮
#夜明け_一宮
#kuma

ワオ!と言っているユーザー

×
  • ブログルメンバーの方は下記のページからログインをお願いいたします。
    ログイン
  • まだブログルのメンバーでない方は下記のページから登録をお願いいたします。
    新規ユーザー登録へ