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

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

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