• ベストアンサー

EXCEL VBA 指定範囲内で特定の列に空白セルを含む行を非表示

初めて質問します。 A列に日付、B~H列にデータが入っています。 A列の日付が本日までの範囲で(明日以降の空行はそのまま残して)、B列に空白がある行だけ非表示にしたいのですが、何かいい方法はないでしょうか? 。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 メッセージ等が不必要でしたら、その部分は削除してください。

cat4386
質問者

お礼

う~ん、完璧です。 これだけシンプルにできるとは、まさに目から鱗です。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

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列のセルを空白か聞いていっても出来るが。

cat4386
質問者

お礼

早速のご回答ありがとうございます。 A列の日付が本日まで、というところでちょっと躓いています。 お知恵を拝借できるとありがたいのですが・・・

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

「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

cat4386
質問者

お礼

早速のご回答ありがとうございます。 自分の求めているとおりのご回答でありがたく思います。 残念ながら実行してみると、 If IsDate(r.Offset(0, -1)) Then のところで、実行時エラー'1004'アプリケーション定義またはオブジェクト定義のエラーです、の表示が出ます。 ただし、結果はきちんとB列が空白の行が非表示になります。 これは、どこが悪いのでしょうか? ついでに、自分なりに考えたのはJ列に作業列を作って、日付が今日以前の場合は"0"、明日以降の場合は"1"を表示させて、Bが空白でJが"0"の場合に非表示にしたら良いのでは?ということでトライしていました。 大変すっきりしたコードで感心しています。

関連するQ&A