- 締切済み
Excelで出席者表をつくる。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tsubu-yuki
- ベストアンサー率46% (179/386)
決してマクロが得意なわけではありませんが(笑)。 私ならどうするのかなぁ?で考えてみました。 (1)全行を舐めて、E列が「2」だったら非表示 Sub SAMPLE01() ' ※非表示にする処理 ' 2行目から「B列に値が存在する最終行」まで繰り返し For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row If Cells(i, 5).Value = 2 Then ' その行のE列が「2」だったら ' 「1だけを表示」にするなら ' If Cells(i, 5).Value <> 1 Then Rows(i).EntireRow.Hidden = True 'その行を非表示 Else ' その行が「2」以外だったら(念のため) Rows(i).EntireRow.Hidden = False 'その行は非表示にしない End If Next i End Sub Sub SAMPLE02() ※全行を再表示する Cells.EntireRow.Hidden = False End Sub ※この二つを別なマクロとして、二つのボタンにそれぞれ設定。 (2)フィルタをON-OFFするマクロ Sub SAMPLE03() If ActiveSheet.AutoFilterMode Then ' 既にフィルタがかかっていたら Range("A1").AutoFilter ’ フィルタを解除 Else ' フィルタがかかっていなかったら Range("A1").AutoFilter Field:=5, Criteria1:="<>2" ' 「2以外」でフィルタ ' 「1」だけを抽出するなら ' Range("A1").AutoFilter Field:=5, Criteria1:="=1" End If End Sub ※これだとボタン一つで済みます。 どちらかだろうなぁ。 せっかく > マクロ学習を始めたので、 とのことですので、(個人的に)覚えておきたい書き方をもう一つ。 (1)と同様、全行を舐めます。 Sub SAMPLE04() ' 2行目から「B列に値が存在する最終行」まで繰り返し For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row Select Case Cells(i, 5).Value ' 各行のE列の値で処理を分岐 Case 1 ' 「1」だったら Rows(i).EntireRow.Hidden = False ' その行は表示 Case 2 ' 「2」だったら Rows(i).EntireRow.Hidden = True ' その行は非表示 Case Else ' 「その他(Else)」だったら Rows(i).EntireRow.Hidden = True ' その行は非表示 End Select Next i End Sub 条件分岐が多いときに、書いた後で見易いように・・ 条件が増えたり減ったりしそうなときにいじりやすいように・・ という、場面によっては重宝する書き方です。 ※全行表示は、上述SAMPLE02をそのまま使います。 どちらにしても、私はなるべくシンプル派なので、 フィルタのON-OFFを採用するかなぁ。 余談ではありますが・・・ Cells(Rows.Count, 2).End(xlUp).Row これで、2列目(=B列)における「一番下」の行番号を拾います。 「仮に」出席者の列(B列)に歯抜けがあっても 最終行まで処理を続けてくれます。 Do While ~ Loop で繰り返すと、 B列が歯抜けを起こしていると、そこで処理が止まってしまい、 それ以降の行についてはノータッチ・・という状況に陥ります。 ※当然、歯抜けが100%無いデータセットなら問題は無いです。 なので、Do ~ Loopを使うなら 「歯抜けの可能性がより低い(はずの)「No.(A列)」が空白になるまで」 の方が良いような気がします。 まぁ、好みの問題ではありますけどね。
- f272
- ベストアンサー率46% (8626/18446)
私なら,こんな感じにします。 Sub Macro2() Set a = Range("E2") Do While Not IsEmpty(a.Offset(, -3)) If a.Value = 2 Then a.EntireRow.Hidden = True Set a = a.Offset(1) Loop End Sub
お礼
マクロが止まってしまうのです。 今しばらく時間をかけて、対策を考えて見ます。 ありがとうございます。
お礼
マクロが途中で止まってしまうのです。 時間をかけて、解析してみます。 ありがとうございました。