| 
    
     |  | なるほど、それで概ね分かりました。ま、あなたの仕事の内容をお尋ねしたわけでは ありませんから、それはともかくとして、各モジュールに存在するマクロのコード
 さえ分かれば、設計の見直しは出来ます。
 まず、日付シートのイベントマクロがコピーされていないのに、なぜか migi,hidari
 のマクロが動作した。という理由ですが、結論から言うと "Right,Leftキーに
 登録したマクロが解除されていないから" です。これはキーを開放するイベントに
 Worksheet_Deactivate を使ったことによって "ブックを閉じる前に、一度他の
 シート(イベントマクロを仕込んでいない)を開くことなくそのまま閉じた" ため、
 イベントが発生しないままになっているわけです。無意識で閉じてしまえば、当然
 起こり得る結果です。なのでイベントの種類の選定を、間違えていると言えます。
 (回答者の方は何も説明されないままに、コードを組まれたのでしょうから、回答を
 間違いと言ってるわけではありません。念のため。)
 で、くどくど説明を続けるより、対処の仕方を指南します。
 まず、原紙シートに Worksheet_Activate, Deactivate のマクロがあれば、それを
 削除して下さい。そして標準モジュールに以下のマクロを入れて下さい。
 
 Private Hck As Boolean 'モジュールの先頭に宣言
 
 Sub Auto_Open()
 Dim x As Integer
 
 With Application
 .OnKey "{RIGHT}", "migi"
 .OnKey "{LEFT}", "hidari"
 .OnDoubleClick = "R_Hidden_Change"
 End With
 ThisWorkbook.OnSheetActivate = "Flg_Off"
 x = Day(Date) - 1
 Worksheets(x).Activate
 End Sub
 
 Sub Auto_Close()
 With Application
 .OnKey "{RIGHT}"
 .OnKey "{LEFT}"
 .OnDoubleClick = ""
 End With
 ThisWorkbook.OnSheetActivate = ""
 End Sub
 
 Sub migi()
 With ActiveCell
 If .Column > 254 Then Exit Sub
 If .Offset(, 1).Value = "-" Then
 .Offset(, 2).Select
 Else
 .Offset(, 1).Select
 End If
 End With
 End Sub
 
 Sub hidari()
 With ActiveCell
 If .Column < 3 Then Exit Sub
 If .Offset(, -1).Value = "-" Then
 .Offset(, -2).Select
 Else
 .Offset(, -1).Select
 End If
 End With
 End Sub
 
 Sub Flg_Off()
 Cells.EntireRow.Hidden = False
 Range("A1").Select
 Hck = False
 End Sub
 
 Sub R_Hidden_Change()
 If ActiveCell.Row > 1 Then Exit Sub
 On Error Resume Next
 If Hck = False Then
 If WorksheetFunction.CountA(Range("B:B")) = 0 Then
 MsgBox "B列に値がありません", 48: Exit Sub
 End If
 Range("B1", Range("B65536").End(xlUp)) _
 .SpecialCells(4).EntireRow.Hidden = True
 Hck = True
 Else
 Cells.EntireRow.Hidden = False
 Hck = False
 End If
 End Sub
 
 標準モジュールは、上記のマクロだけあればいいです。
 >Kein さんからの集計処理
 は先にレスしたように、原紙シートで一定のセル範囲に対して表を作り、その最終行
 に合計の数式を入れておく、という仕様にすることで不要になるばです。いちいち
 最終入力行を求めて、その一行下に数式を入れて・・という形にするより合理的、
 ということが理解されたと思うからです。
 >シート作成(Sub ThisMonth_Make_NewBook())
 これはいちおう、月毎のブック"以外"から作成することを前提にしていたので、
 月毎のブックそのものに入れてしまうのは、ちょっと違和感がありますけどね・・。
 ま、その方が便利と思うなら、入れておいても構いません。
 
 とにかく今回は、ご覧のように新しいマクロも含めて提示してみましたが、簡単に
 説明すると「本来シートモジュールやThisWorkbookモジュールに入れるイベント
 マクロを、全て標準モジュール用に書き直し、インポートファイルが一つで済む
 ようにした」ということです。
 migi,hidari のマクロは、ちょっと手直ししただけです。
 Auto_Open, Auto_Close は、ブックを開いたとき、閉じたときに発生するイベント
 です。ここにキーへのマクロ割り当てと、その開放をする OnKey のコードを持って
 きたことによって、ブックを開いてすぐに、どのシートでもキーアクションを使え、
 閉じると自然に開放されるようになります。あと、空白行の表示・非表示については
 どのシートでも一行目(項目があると仮定した)の任意のセルをダブルクリックする
 ことで、起動するようにしました。それで使い勝手が良くなっていると思います。
 あとOnSheetActivate は、任意のシートを開いたときの初期設定をしているだけです。
 なお、これらのイベントについては OnKey を除いて、今どきのExcelではヘルプに
 出てきません。なぜならそれは Excel95以前に使われていたものだからですが、
 決して機能が劣るから使われなくなったのではありません。むしろコーディングの
 柔軟性は、現在のイベントマクロより優れていると思われます。今回のように適材適所
 の使い方をすれば、まだまだ活用できると考えています。
 
 もう一度、上記の標準モジュールをエクスポートし、ブックを作り直してみて下さい。
 
 |  |