• ベストアンサー

エクセルで行の自動非表示の方法は

シート2からシート1に文字及び数字をリンクさせています。 例 =IF(シート2!A2=FALSE,シート2!A1,””) このとき、シート1の例のセルが空白の場合シート1の例の行を全部非表示にする方法を教えてください。 どうぞ、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • suzusan7
  • ベストアンサー率64% (22/34)
回答No.3

前準備に作業が必要です。 まず、表の作成ですが、データ数が10、最終行が44となることから、 54行までの表を作成します。表の外枠が太線のように異なる罫線であるならば、 54行目の下線は55行目から上線で罫線を書くと都合が良いです。 こうすると仮にデータが何もなくて10行全て非表示となった場合、 54行目が非表示となっても55行目は非表示にはならないので外枠は消えなくなります。 それで、あとは以下のコードをシートモジュールへ。 Private Sub worksheet_activate() Dim 範囲 As Range Dim i As Integer Dim データ数 As Integer Application.ScreenUpdating = False Set 範囲 = Range("E6:E15") データ数 = 範囲.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("e44").Offset(i, 0).EntireRow.Hidden = True Next i Application.ScreenUpdating = True End Sub 54行までの表からトータルで10行非表示にすることで、44行表示されます。 お望みのことはこういうことでいいんですよね?

m-happy-t
質問者

お礼

思っていたように出来ました。 ありがとうございます。 また、これからも、よろしくお願いします。

その他の回答 (2)

  • suzusan7
  • ベストアンサー率64% (22/34)
回答No.2

最終行というのは書式のみの行のことでしょうか? ページ数やデータの量、構成といったものが全く見えません。 そのような状態で、行の挿入、削除をするとまた不都合がでると思います。 ですから、参考までに以下の2つの方法ではどうでしょうか? 1.印刷用シートを作成する。 2.余分に空白行を作成しておき、不要な分を非表示にする。 1の方法は前回のマクロの中でデータが空でなければ、印刷用シートに データをコピーとすることでできると思います。 この方法であれば決った書式で印刷できるようになります。 2の方法は例えば1ページが30行とすると、30行の空白行を予め作成しておき、 10行のデータがあれば空白行から10行非表示にして合計30行にする方法です。 前回のマクロでデータの有無をチェックする際に数を数えていけば可能と思います。 この方法であれば、ページが増えても最終行は30の倍数にできるというように ページ数に関係なく対応できると思います。 どの方法が適当かは構成等によると思いますので、 方法の案を書かせていただきました。

m-happy-t
質問者

補足

2の方法を詳しく教えてください マクロの範囲E6:E15(この範囲以外にデータは入りません)   A     B     C     D     E     F 1 2                総括表 3種別   細別    ・・・・   ・・・   ・・・   ・・・ 4                        ・・・   ・・・ 5・・・ 6・・・  ・・・                ・・・ ・ ・ 44 ・・・は文字及び数字です 行が非表示になっても44で固定したいです よろしくお願いします

  • suzusan7
  • ベストアンサー率64% (22/34)
回答No.1

こんばんは。 関数では無理なので、マクロを使用することになります。 シートの構成が見えないので、飽くまでも例ですが。 シートがアクティブになったときに、シートのA1~A20の範囲を調べて、 セルが空であればその行を非表示に、そうでなければ表示するマクロです。 シートモジュールに貼り付けてください。 Private Sub worksheet_activate() Dim 範囲 As Range Application.ScreenUpdating = False Set 範囲 = Range("A1:A20") For Each c In 範囲 If c.Value = Empty Then c.EntireRow.Hidden = True Else c.EntireRow.Hidden = False End If Next Application.ScreenUpdating = True End Sub

m-happy-t
質問者

補足

ありがとうございます。思っていたように出来ました。 お礼が遅くなり済みませんでした。 使用して一部不都合がありましたので、もう少し、教えていただけますか。 回答のマクロで行が、非表示になると表の行が少なくなるので、1行非表示になると、1行最終行に行を追加できないのでしょうか。 よろしくお願いします

関連するQ&A