vba スケジュール更新マクロ研究中(長文です)
いつもお世話になります。
私の会社では、スケジュール管理するにあたり、1日を3つに分けています。
つまり、「午前」「午後」「夜間」「午前午後」「午後夜間」「全日」の6種になります。
只今私は、スケジュールが更新されたときに、上書きして変更点をメッセージボックスで返すマクロを考えています。
(趣味の範囲ですので締め切りはないのですが、なんせVBA始めて1ヶ月目なもんですから四苦八苦してます><)
そこで、とりあえず下記のような「更新前のスケジュール区分を検知してメッセージで返す」ところまで出来ました。
(もう少しスッキリできないものかと思っております。)
ここに「更新版と見比べて変更し、メッセージで返す」という働きを足していこうと思っています。
が、別々にコードが書けても、それを合体させようとなると、どうやったらいいのか皆目見当が付きません。
難解に思われるのは、結合セルと入力済みデータの扱いです。
例えば、とある1日に対して、「午前」「午後」「夜間」と別々の予定が入ってたとします。
予定に変更が出て「夜間」が「全日」になってしまったとします。
コードに「生き残っているのは夜間だ」という判断をさせることは出来ませんよね?
(というのも、区分が変更された場合、文字列が一致しているとは限らないのです。)
対話型にして、チェックボックスみたいな形で選択させるのがいいのでしょうか?
オーバースペックで耳から煙が出そうです・・・
とりあえず下記がコードです。
"strage1"を古いスケジュール、"strage2"を更新版としています。
つたない記述ですが、ヒントをご教授くださいませ。
------------------------------------
Sub 何を書き換えたかMsgBox2()
Dim i As Integer, j As Integer
Dim myMsg As String
Dim myold As Worksheet, mynew As Worksheet
Set myold = Sheets("strage1")
Set mynew = Sheets("strage2")
j = 5
For j = j To 35
i = 6
For i = i To 8
If IsEmpty(myold.Cells(j, i)) And Not IsEmpty(mynew.Cells(j, i)) Then
myMsg = myMsg & mynew.Cells(j, i) & "が追加になりました" & vbCrLf
ElseIf Not IsEmpty(myold.Cells(j, i)) And IsEmpty(mynew.Cells(j, i)) Then
myMsg = myMsg & myold.Cells(j, i) & "がキャンセルになりました" & vbCrLf
ElseIf myold.Cells(j, i) <> mynew.Cells(j, i) Then
myMsg = myMsg & myold.Cells(j, i).Value & "から" & mynew.Cells(j, i) & "に変更しました" & vbCrLf
End If
myold.Cells(j, i).Value = mynew.Cells(j, i)
Next
Next
MsgBox myMsg
End Sub
---------------------------------------------
Sub 区分識別3()
Dim i As Integer
Dim myMsg As String
i = 5
For i = i To 35
If Cells(i, 6) <> "" Then
If Cells(i, 6).MergeArea.Count = 3 Then
myMsg = myMsg & i - 4 & "日、全日枠の" & Cells(i, 6).Value & "です。" & vbCrLf
ElseIf Cells(i, 6).MergeArea.Count = 2 Then
myMsg = myMsg & i - 4 & "日、午前午後枠の" & Cells(i, 6).Value & "です。" & vbCrLf
Else
myMsg = myMsg & i - 4 & "日、午前枠の" & Cells(i, 6).Value & "です。" & vbCrLf
End If
End If
If Cells(i, 7) <> "" Then
If Cells(i, 7).MergeArea.Count = 2 Then
myMsg = myMsg & i - 4 & "日、午後夜間枠の" & Cells(i, 7).Value & "です。" & vbCrLf
Else
myMsg = myMsg & i - 4 & "日、午後枠の" & Cells(i, 7).Value & "です。" & vbCrLf
End If
End If
If Cells(i, 8) <> "" Then
myMsg = myMsg & i - 4 & "日、夜間枠の" & Cells(i, 8).Value & "です。" & vbCrLf
End If
Next
MsgBox myMsg
End Sub
-------------------------------------------------------
以上です。
よろしくお願いいたします。
お礼
回答ありがとうございました。 自分でも調べたつもりでしたが、まだまだチェックできていないものがありました。 オープンソースも非常に参考になります。 ありがとうございました。