いつもお世話になります。 私の会社では、スケジュール管理するにあたり、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 ------------------------------------------------------- 以上です。 よろしくお願いいたします。
↧