[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『空白セルの非表示・再表示』(イッコウ)
Excel2003 WindowsXP
セルに計算式が入っているけれどもIF関数を使用してるので0の場合は空白になり ます。 そのような行を非表示にしたいのですが編集のジャンプでは認識しなくて マクロで実行したいのですが。。。。。。
選択の列はE11:E300
最終の使用行は311です。
Private Sub worksheet_activate() Dim 範囲 As Range Dim i As Integer Dim データ数 As Integer
Application.ScreenUpdating = False Set 範囲 = Range("E11:E300") データ数 = 範囲.Rows.Count i = 0 For Each c In 範囲 If c.Value = Empty Then c.EntireRow.Hidden = True Else c.EntireRow.Hidden = False i = i + 1 End If Next データ数 = データ数 - i For i = 1 To データ数 Range("E311").Offset(i, 0).EntireRow.Hidden = True Next i Application.ScreenUpdating = True End Sub
こんな感じのは見つけたのですがこれは非表示のみなので 再表示も作成したいのですが。 それとこれはシートモジュールなのでどのようにすればマクロが実行するので しょうか? よろしくお願いします。
>それとこれはシートモジュールなのでどのようにすればマクロが実行するので しょうか? http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html
シートモジュール Private Sub Worksheet_Calculate()'
Dim 範囲 As Range, c As Range Dim i As long 'Dim データ数 As Integer
Application.ScreenUpdating = False Set 範囲 = Range(""E11:E311"") ' データ数 = 範囲.Rows.Count
Rows(範囲.Row & ":" & 範囲.Rows(範囲.Rows.Count).Row).Hidden =False For Each c In 範囲 If c.Value = Empty Then c.EntireRow.Hidden = True
End If Next Application.ScreenUpdating = True End Sub
勝手に解釈で E11:E311のセル値がEmptyの場合非表示 なお このシートで再計算された時にイベントが発生するのでうっとうしいかも
このマクロはThisWorkBookにするとどのようにすればよろしいでしょうか? よろしくお願いします。 (イッコウ)
>このマクロはThisWorkBookにするとどのようにすればよろしいでしょうか?
この意味は? ・個別シートのイベントではなく「全シート」でおなじようなイベント処理をしたいので 「ThisWorkbook」モジュールでイベントを受けたい? ・イベント処理ではなく、「通常のマクロ」として、表示プロシジャ、非表示プロシジャを用意して 必要な都度、実行させたい?
どちらかな?
追記)上の質問に対する回答次第だけど、もし後者なら、すでにアップされているようなコードを 標準モジュールにおいておけばいい。たとえば、
Sub 非表示() Dim 範囲 As Range Dim c As Range Application.ScreenUpdating = False Set 範囲 = Sheets("Sheet1").Range("E11:E311") 範囲.EntireRow.Hidden = False 'いったん全表示 For Each c In 範囲 If Len(c.Text) = 0 Then c.EntireRow.Hidden = True Next Set 範囲 = Nothing Application.ScreenUpdating = True End Sub
Sub 再表示() Sheets("Sheet1").Range("E11:E311").EntireRow.Hidden = False End Sub
★さらに追伸) Empty での比較(IsEmptyも同様)は、数値の0でもEmptyとみなされる。 なので、空白かどうかは、"" で比較するか 長さが0かで判定するのが無難。
(ぶらっと)
>個別シートのイベントではなく「全シート」でおなじようなイベント処理をしたいので >「ThisWorkbook」モジュールでイベントを受けたい? すみません。複数のシートがあるのでこちらの方が理想でしたが、、、 (イッコウ)
>複数のシートがあるのでこちらの方が理想でしたが、、、
なら、ThisWorkbookモジュールで、Sheet○○○ というイベントを使う。 Private Sub Workbook_SheetActivate(ByVal Sh As Object) とか Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) とか Private Sub Workbook_SheetCalculate(ByVal Sh As Object) とかとか。
(ぶらっと)
Private Sub Workbook_SheetActivate(ByVal Sh As Object) で出来ました。 マクロ素人なのでご質問なのですが、
>Private Sub Workbook_SheetActivate(ByVal Sh As Object) とか >Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) とか >Private Sub Workbook_SheetCalculate(ByVal Sh As Object) とかとか。
この使い分けはどこで見極めればよろしいのでしょうか? すごく初歩的な質問で申し訳ないのですが。 (イッコウ)
いずれも Workbook_Sheet○○○。 で、シートモジュールでいえば Worksheet_○○○ にあたる。 Worksheet_○○○ については、いいよね? もし、そこも・・・ということなら「VBA シートイベント」で検索すると、どっさり解説ページが。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html とか http://www.k1simplify.com/vba/tipsleaf/leaf311.html とか http://excelvba.pc-users.net/fol3/3_6.html とかとか
(ぶらっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.