[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『年間スケジュールでの月末5営業日の表示について』(ちこ)
こんばんは、夜分ですがどうしても手詰まりで調べているうちに
ここに来ました。
やりたいのは年間スケジュールで各月月末営業日より5営業日前に
強調した年間スケジュールを作りたいのです。
過去に毎週水曜にというのは作ったのですが、それ以上ができず。
サンプル(水曜ver)
Sub calendar_year4()
'横に3か月、下に4か月を出力 Dim myDate As Long '整数型は Long で統一しましょう Dim nen As Long, Tuki As Long Dim i As Long, j As Long, k As Long Dim myTitleD, myTitle(1 To 1, 1 To 7) Dim myRow As Long, myCol As Long Dim cn As Long ', cntCol As Integer, cntRow As Integer Dim cntCol, cntRow Dim c As Range, m&, S, Mon& '***** '行間隔、列間隔の設定 myRow = 9 myCol = 8 '作成する年を入力します S = Application.InputBox(Title:="年の指定", _ Prompt:="作成する年月を入力してください。(yyyy/mm)", _ Default:="2013/04", Type:=1) '***** Tuki = Month(CDate(S)) '***** nen = Year(CDate(S)) '***** '曜日を配列にセットします myTitleD = Array("日", "月", "火", "水", "木", "金", "土") For k = 0 To 6 myTitle(1, k + 1) = myTitleD(k) Next k 'ひと月の日付を配列にセットします Sheets("年間スケジュール").Select Range("C1:Z38").Clear Application.ScreenUpdating = False
For i = 1 To 12 Dim myTable(1 To 6, 1 To 7) cn = 1 '配置によって列と行の位置を変数で指定します cntCol = Split("Empty,1,2,3,1,2,3,1,2,3,1,2,3", ",") '***** cntRow = Split("Empty,1,1,1,2,2,2,3,3,3,4,4,4", ",") '***** m = i + (Tuki - 1) '3月 ***** For j = DateSerial(nen, m, 1) To DateSerial(nen, m + 1, 0) '***** If Day(j) <> 1 And Weekday(j) = 1 Then cn = cn + 1 myTable(cn, Weekday(j)) = j Next j 'シートに書き出します 基準はD4セル
With Cells(4 + myRow * (cntRow(i) - 1), 4 + myCol * (cntCol(i) - 1)) '******************* 訂正範囲 If i = 1 Then .Offset(0, -1).Value = nen & "年" .Offset(0, -1).Font.Size = 16 End If If m > 12 Then m = m - 12 If m = 1 Then .Offset(0, -1).Value = nen + 1 & "年" .Offset(0, -1).Font.Size = 16 End If End If '******************* .Value = m & "月" .Font.Bold = True .Font.Size = 14 .HorizontalAlignment = xlHAlignCenter '---横位置 中央揃え .VerticalAlignment = xlVAlignCenter '---縦位置 中央揃え .Offset(1, 0).Resize(1, 7).Value = myTitle .Offset(2, 0).Resize(6, 7).Value = myTable '書式を設定します .Offset(1, 0).Resize(1, 7).Interior.Color = RGB(235, 241, 222) .Offset(1, 0).Resize(7, 7).HorizontalAlignment = xlCenter .Offset(2, 0).Resize(6, 7).NumberFormatLocal = "d" '日曜日は赤色にします .Offset(1, 0).Resize(7, 1).Font.Color = RGB(255, 0, 0) '土曜日は青色にします .Offset(1, 6).Resize(7, 1).Font.Color = RGB(0, 0, 255) '水曜日はMagentaにします 'With Selection.Interior .Offset(1, 3).Resize(7, 1).Font.Color = vbMagenta '***** .Offset(1, 3).Resize(7, 1).Font.Bold = True '***** .Offset(2, 3).Resize(5, 1).Interior.Pattern = xlGray25 '***** 'End With '祝日(指定休日)のチェックし、赤色の太文字にします For Each c In .Offset(2, 0).Resize(6, 7) '休日表より対象祝日の書式を太字に If Application.CountIf(Worksheets("設定").Range("G8:G37"), c.Value) > 0 Then c.Font.Color = RGB(255, 0, 0) c.Font.Bold = True End If Next c End With Erase myTable Next i Application.ScreenUpdating = True '罫線絵画 Range("D5:J11").Borders.LineStyle = xlContinuous Range("L5:R11").Borders.LineStyle = xlContinuous Range("T5:Z11").Borders.LineStyle = xlContinuous
Range("D14:J20").Borders.LineStyle = xlContinuous Range("L14:R20").Borders.LineStyle = xlContinuous Range("T14:Z20").Borders.LineStyle = xlContinuous
Range("D23:J29").Borders.LineStyle = xlContinuous Range("L23:R29").Borders.LineStyle = xlContinuous Range("T23:Z29").Borders.LineStyle = xlContinuous
Range("D32:J38").Borders.LineStyle = xlContinuous Range("L32:R38").Borders.LineStyle = xlContinuous Range("T32:Z38").Borders.LineStyle = xlContinuous
End Sub
一応、祝日と言う名で祝日のシートはあります。
すいません、どなたかお分かりになりますでしょうか?
よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
>各月月末営業日より5営業日前に 強調した年間スケジュールを作りたいのです。
「各月月末営業日より5営業日前」の日付(12個)が分かりさえすれば、 後は自力で出来ると言うことですか?
(半平太) 2016/12/27(火) 23:30
すいません、自力でできるとは言えません。
教えていただいた後に、その構文を読んで理解する…
が今言えるところです。
全くどうしていいのか分からないところですので…。
ごめんなさい。
(ちこ) 2016/12/28(水) 00:41
> '祝日(指定休日)のチェックし、赤色の太文字にします > For Each c In .Offset(2, 0).Resize(6, 7) > '休日表より対象祝日の書式を太字に > If Application.CountIf(Worksheets("設定").Range("G8:G37"), c.Value) > 0 Then > c.Font.Color = RGB(255, 0, 0) > c.Font.Bold = True > End If > Next c
↓( へ 変更)
'祝日(指定休日)は赤色の太文字とし、月末営業日の5営業前は強調します For Each c In .Offset(2, 0).Resize(6, 7) '休日表より対象祝日の書式を太字に If Application.CountIf(Worksheets("設定").Range("G8:G37"), c.Value) > 0 Then c.Font.Color = RGB(255, 0, 0) c.Font.Bold = True ElseIf Application.WorkDay(DateAdd("M", 1, DateAdd("M", i - 1, S)), -6, Worksheets("設定").Range("G8:G37")) _ = c.Value Then c.Style = "アクセント 4" End If Next c
※>各月月末営業日より5営業日前 翌月初日から見て、6営業日前と解釈。
※>祝日と言う名で祝日のシートはあります。 休日リストは、"設定"シートの"G8:G37" にあると推測。 ("祝日"シートじゃないですよね?)
(半平太) 2016/12/28(水) 08:18
的確な回答な解答ありがとうございます。
※>祝日と言う名で祝日のシートはあります。 休日リストは、"設定"シートの"G8:G37" にあると推測。 ("祝日"シートじゃないですよね?) すいません、名前の定義でシート名ではありませんでした。
構文より読み取っていただき、ありがとうございました。
大変助かりました。
なお、
ElseIf Application.WorkDay(DateAdd("M", 1, DateAdd("M", i - 1, S)), -6, Worksheets("設定").Range("G8:G37")) _
= c.Value Then この箇所はまだ解析中です。 難しい〜
(ちこ) 2016/12/29(木) 05:15
>この箇所はまだ解析中です。 >難しい〜
済みませーん。 馬鹿な事をやっちゃったです。m(__)m
これでよかったです。 ↓ ElseIf Application.WorkDay(DateAdd("M", i, S), -6, Range("祝日")) = c.Value Then
(半平太) 2016/12/29(木) 09:30
わざわざ訂正申し訳ございません。
というか、まだ分かっていなかったので、違いが…。
ただ、キレイに構文がなった気が。
まだまだ低レベルですいません。
(ちこ) 2017/01/02(月) 09:54
ElseIf Application.WorkDay(DateAdd("M", i, S), -6, Range("祝日")) = c.Value Then
S は 2017/4/1 の様な「期初の初日」 i は ずらす月数(1〜12)
ワークシート関数の↓ と同じ
=WORKDAY(EDATE("2017/4/1",1),-6,祝日)
(半平太) 2017/01/02(月) 15:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.