Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


63078 / 76738 ←次へ | 前へ→

【18259】Re:行数が不定の集計処理について
回答  Kein  - 04/9/20(月) 0:56 -

引用なし
パスワード
   なるほど、それで概ね分かりました。ま、あなたの仕事の内容をお尋ねしたわけでは
ありませんから、それはともかくとして、各モジュールに存在するマクロのコード
さえ分かれば、設計の見直しは出来ます。
まず、日付シートのイベントマクロがコピーされていないのに、なぜか 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以前に使われていたものだからですが、
決して機能が劣るから使われなくなったのではありません。むしろコーディングの
柔軟性は、現在のイベントマクロより優れていると思われます。今回のように適材適所
の使い方をすれば、まだまだ活用できると考えています。

もう一度、上記の標準モジュールをエクスポートし、ブックを作り直してみて下さい。
0 hits

【18165】行数が不定の集計処理について ackkn 04/9/16(木) 21:15 質問
【18166】Re:行数が不定の集計処理について Kein 04/9/16(木) 22:08 回答
【18167】Re:行数が不定の集計処理について ackkn 04/9/16(木) 22:49 お礼
【18168】Re:行数が不定の集計処理について ackkn 04/9/16(木) 23:04 質問
【18171】Re:行数が不定の集計処理について Kein 04/9/17(金) 1:46 発言
【18189】Re:行数が不定の集計処理について ackkn 04/9/17(金) 17:08 発言
【18207】Re:行数が不定の集計処理について Kein 04/9/18(土) 0:31 回答
【18208】Re:行数が不定の集計処理について Kein 04/9/18(土) 0:34 発言
【18213】Re:行数が不定の集計処理について ackkn 04/9/18(土) 11:47 回答
【18217】Re:行数が不定の集計処理について ackkn 04/9/18(土) 14:02 回答
【18223】Re:行数が不定の集計処理について Kein 04/9/18(土) 18:25 回答
【18224】Re:行数が不定の集計処理について Kein 04/9/18(土) 18:32 発言
【18249】Re:行数が不定の集計処理について ackkn 04/9/19(日) 14:41 回答
【18256】Re:行数が不定の集計処理について Kein 04/9/19(日) 20:11 回答
【18257】Re:行数が不定の集計処理について ackkn 04/9/19(日) 23:22 回答
【18259】Re:行数が不定の集計処理について Kein 04/9/20(月) 0:56 回答
【18263】Re:行数が不定の集計処理について ackkn 04/9/20(月) 6:38 お礼
【18289】Re:行数が不定の集計処理について ackkn 04/9/20(月) 17:58 質問
【18293】Re:行数が不定の集計処理について Kein 04/9/20(月) 22:18 回答
【18299】Re:行数が不定の集計処理について ackkn 04/9/20(月) 23:42 質問
【18301】Re:行数が不定の集計処理について Kein 04/9/21(火) 2:13 回答

63078 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free