エクセルで楽々校務

学校現場で使えるエクセルファイルや小技の紹介をしています。掘り出し物があるかもしれません。あと、今までの実践での疑問点もつぶやきます。

VBA:選択行の表示・非表示をワンタッチで切り替えるマクロ

成績一覧表や通知票を作っていると、学年ごとに6種類作るのは面倒です。

私がよくやるのは、6年生のものを作っておいて、あとの学年は不要な行を非表示にして量産しています。

最後は紙に印刷するので、印刷されなければOKということ。

オートフィルターでも可能ですが、横に出る▼があまり好きではないので、マクロを組んでみました。また今回は書いてませんが、列方向にも対応させることができるので、

まあまあ便利です。(・・・自己満足(^^;)

 

右クリックメニューにも行列の表示非表示はありますが、ワンタッチでできるので、

システムとしては備えておくと案外便利なマクロです。

サンプルは、A列に●が入っている行の表示、非表示を切り替えできます。

For Next とFor Each の2種類を書いてみました。

順番に行を当たっていくFor Next よりも、

総当たりでA列を当たっていくFor Each の方が若干反応がいいです。

※説明については、できるだけ簡単に表現することにしています。

プロの方、ご了承ください(^-^;)

サンプルマクロです。標準モジュールで使用します。

Option Explicit

Sub A列●の行を表示非表示for_next()

Dim i As Long
Dim r As Range '範囲で定義
'ActiveSheet.Unprotect’シート保護解除

For i = 1 To 100000 'データ行が100行までなら100

If Range("A" & i) = "●" Then

 Set r = Range("A" & i).Rows
  If r.Hidden = True Then
   r.Hidden = False
  ElseIf r.Hidden = False Then
   r.Hidden = True
  End If
End If
Next
'ActiveSheet.Protect’シート再保護

End Sub

-------------------------------------------------------------------

Sub A列●の行を表示非表示for_each()

'こちらの方が反応が速い。

 

Dim r As Range '範囲で定義

'ActiveSheet.Unprotect 'シート保護解除


For Each r In Range("A1:A100000") 'データ行が100行までなら”A1:A100”

 If r = "●" Then

  Set r = r.Rows

   If r.Hidden = True Then
    r.Hidden = False

   ElseIf r.Hidden = False Then
    r.Hidden = True
   End If
 End If
Next

'ActiveSheet.Protect 'シート再保護

End Sub

--------------------------------------------------------

↓サンプルシートです。

 

 

3連休最終日ですね。もう2月が終わっちゃう・・・。

では、また!