- ベストアンサー
EXCEL VBA 指定範囲内で特定の列に空白セルを含む行を非表示
初めて質問します。 A列に日付、B~H列にデータが入っています。 A列の日付が本日までの範囲で(明日以降の空行はそのまま残して)、B列に空白がある行だけ非表示にしたいのですが、何かいい方法はないでしょうか? 。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 '標準モジュールが良いです。 Sub Test1() Dim myDate As Long Dim i As Variant myDate = Date i = Application.Match(myDate, Range("A:A"), 0) If IsError(i) Then MsgBox "本日の" & Format$(myDate, "yy/MM/dd") & "が見つかりません。", 48 Exit Sub End If On Error Resume Next 'B列に対して(かならず、1行目から行うこと) With Range("B1").Resize(i).SpecialCells(xlCellTypeBlanks) If Err.Number > 0 Then MsgBox "非表示にすべきセルが見つかりません!", 48 Exit Sub Else .EntireRow.Hidden = True 'True 非表示 MsgBox .Cells.Count & "行が非表示になっています。", 64 End If End With On Error GoTo 0 End Sub メッセージ等が不必要でしたら、その部分は削除してください。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17070)
Sub test01() Dim cl As Range Range("B2:B100").SpecialCells(xlCellTypeBlanks).Select For Each cl In Selection r = cl.Row 'MsgBox r Rows(r).EntireRow.Hidden = True Next End Sub -- SpecialCells(xlCellTypeBlanks).Select を使うところがミソか 1つづつB列のセルを空白か聞いていっても出来るが。
お礼
早速のご回答ありがとうございます。 A列の日付が本日まで、というところでちょっと躓いています。 お知恵を拝借できるとありがたいのですが・・・
- zap35
- ベストアンサー率44% (1383/3079)
「EXCEL VBA」と明示してあるので >何かいい方法はないでしょうか? は「丸投げでお願いします」ということですね。 ご自身はトライされましたか。どこでつまづきましたか? それがないと身に付きませんよ。 A列の日付が昇順になっているのか、ランダムなのかも書かれていないので、ランダムと見なします。また空白とは「式も何も入力されていないセル」と見なします。マクロサンプルを書きますから条件が違うならご自身で修正してください。 Sub Macro1() Dim r, trg As Range Set trg = Range("B1", Range("A1").End(xlUp).Offset(0, 1)) For Each r In trg.SpecialCells(xlCellTypeBlanks) If IsDate(r.Offset(0, -1)) Then If r.Offset(0, -1) <= Date Then r.EntireRow.Hidden = True End If End If Next r End Sub
お礼
早速のご回答ありがとうございます。 自分の求めているとおりのご回答でありがたく思います。 残念ながら実行してみると、 If IsDate(r.Offset(0, -1)) Then のところで、実行時エラー'1004'アプリケーション定義またはオブジェクト定義のエラーです、の表示が出ます。 ただし、結果はきちんとB列が空白の行が非表示になります。 これは、どこが悪いのでしょうか? ついでに、自分なりに考えたのはJ列に作業列を作って、日付が今日以前の場合は"0"、明日以降の場合は"1"を表示させて、Bが空白でJが"0"の場合に非表示にしたら良いのでは?ということでトライしていました。 大変すっきりしたコードで感心しています。
お礼
う~ん、完璧です。 これだけシンプルにできるとは、まさに目から鱗です。 ありがとうございました。