• ベストアンサー

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/17068)
回答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

  • エクセル~空白のセルのある行を非表示に。

    エクセルで。 例えば、100行の表があって、1行目から順番にデータを入れていくんですが、 データが50行までで終わってしまった場合に、51行目からを、非表示にしたいのです。 Aドライブからのデータの読み込みは、マクロをつかっているので、できればそのあとに文章をくっつけて、1つのマクロで作業を完了したいのです。 具体的に言いますと・・・ A列には1~100までの数字が入力してあります。 B~E列には取り込んだデータ(数字)をVLOOK関数で文字に変換するようになってます。 それ以降は、固定した単位(m3)や、データの数字がそのまま入る・・・という感じです。 そして、101行目はそれぞれの列の合計を出すようにしてます。 つまり、データを読み込んだあと、例えば50行しかデータが無かったら(B50やC50などが空白だったら)、51行目から100行目までをいわゆる『表示しない』にしたいのです。 だいぶ考えましたが・・・・。 よろしくお願いします。

  • Excelで、セル範囲(自分の1行下:空白セルの上)、を求めることできますか?

    Excelで、セル範囲(自分の1行下:空白セルの上)、を求めることできますか? A列 ────── 2004年   3 ← =sum(A2:A3) 2004/11  1 2004/12  2        ← 空行 2005年  5 ← =sum(A6:A8) 2005/1  3 2005/2  2 2005/3  0        ← 空行 sum()の引数(合計範囲)を求めることできますか? 手作業で"A6:A8"等入力していかないとできないのでしょうか?

  • 特定のセルが空白だったら、その行を非表示にしたい。。。

    A2からV500にデータが入っています。 すべてにデータが入るわけではなくて、 B列が空白セルの行は、非表示にして印刷をかけたいのですが、可能ですか? うーん…うまく説明できないー。

  • 空白セルを非表示に

    A1:B50の範囲にデータが入っています。A1:A50までに空白のセルがあれば、その行を非表示にするマクロを組みました。 Dim rw As Integer Application.ScreenUpdating = False For rw = 1 To 50 If Range("A" & rw) = "" Then Rows(rw).EntireRow.Hidden = True End If Next Application.ScreenUpdating = True これをA1:B50の範囲でどちらか入っているデータの多い方に合わせて非表示にするときはどうなるのでしょうか。説明がヘタですみません・・・ たとえばデータの入っているセルが、 A列がA1:A10まで、B列がB1:B:15までで以下空白の場合、今のマクロではA列でしか空白を判定しませんよね?なのでA11以下は空白にされてしまい、B12:B15までのデータも一緒に非表示されてしまいます。 どうしたらよいか教えて下さい。

  • 関数で『指定範囲が空白の時は合計も空白』○が付いたら合計を表示

    エクセル2003で出席表を作っております。 A列には名前(2行目から104行目)、B~AA列(仮)まで日付、この場合関数で『指定範囲が空白の時は合計も空白』○が付いたら合計を表示させたいのですが、イメージで言うと「IF(ISBLANK(単一セル),"",COUNTIF(B2:B104,"○"))」の単一セルではなく(複数行)なんです。 この関数を使って休日(不特定)は空白表示にしたいのですが可能でしょうか?

  • エクセルVBAで不一致に空白セルを挿入

    エクセル2010です。 A、B列ともソートされています。 ごく少数ですが同一列内に重複するデータもあります。 そして A列に、1行目からA、B、C、E、F、F、H B列に、1行目からA、B、D、E、F、G、I (カンマは実際にはありません。) というような文字列データがある場合 別シートに A列に、1行目からA、B、C、空、E、F、F、空、H、空、 B列に、1行目からA、B、空、D、E、F、空、G、空、I、 (空は空白セルの意味です。) というように、お互いが一致しない場合は空白で飛ばし、一致するものは同じ行にするにはどのような方法がよろしいでしょうか? 例のように少ないデータなら目で見て手作業でできますが、実際は千件以上のデータです。 VBAでも関数でも結構です。よろしくお願いします。

  • Excelで空白セルをつめて表示させたい

    お世話になります。 Excelの操作について教えてください。     A列  B列 1行  3 2行       2 3行  5 4行  4    1      ↓     A列  B列 1行  3    2 2行  5    1 3行  4 4行 と、空白でないのセルだけを、上に詰めて別のシートに表示させたいです。 出来れば関数を使って行いたいです。 いくつか同じような質問があったのですが、なかなかうまくいきません。 どなたか、ご教授下さい。

  • エクセルVBAで範囲の指定をしたいです(初心者)

    エクセルVBAで範囲の指定をしたいです(初心者) 列AからJがデータが入る範囲です。 列AとBとCには必ず数値等が何かしら入ります。 列Dは常に空白です。 列E以降は何か入ることも入らないこともあります。 7行目までデータがある場合、 A1セルからこの場合はJ7セルまでを範囲指定したいのですが 行数は未定なので、 Range("A1").Select Range(Selection,Selection.End(xlDown)).Select でA列のデータ最終行まで下がり、そこから9つ右の列までを 範囲指定するというのがよくわかりません。 自動記録で絶対参照と相対参照を切り替えてやってみたのですが、 どうしても Range(Selection, Selection.End(xlDown)).Select ActiveCell.Range("A1:J7").Select と常にA1からJ7が指定になってしまいます。 バージョンは2003です。 つたない質問文で申し訳ありませんが、 どなたか宜しくお願いいたします。

  • エクセル 非表示行を上書きせずにコピーする方法

      エクセル2010を使っております。 例えば、 A列とB列にデータが入っており、B列のデータをそのままA列に平行移動で上書きコピーしたいのですが、 条件がありまして、 特定の行(ここでは10行目から15行目としますが)を非表示状態にしております。 この非表示行を飛ばして上書きしたいのです。 ですから、結果としては ・A列の1~9行目まではB列の1~9行目のデータが入っていて ・A列の10~15行目までは元のA列の10~15行目までのデータが入っていて ・A列の16行目以降にはB列の16行目以降のデータが入っている、 ということになります。 可視セルを使ってもみたのですが、 どうしてもA列の10行目以降にB列の16行目以降のデータが入ってしまいます。 どのように処理したらよいかアドバイスよろしくお願いします。

  • エクセルの行・列のタイトルについて

    「A1:V17」の範囲で横長の表を作りました。 「A列:B列」と「1行:2行」を2・3ページ目にも表示させたいのですが、どのようにすればいいでしょうか? 「ページ設定」画面の「行のタイトル」に「$1:$2」、「列のタイトル」に「$A:$B」と入れると、1行目のタイトル部分が2ページ以降、B列の範囲で切れてしまいます。 行と列とを同時に設定することは出来ないのでしょうか? ご協力お願いします。

専門家に質問してみよう