ExcelVBAで行の非表示、表示をコード化

このQ&Aのポイント
  • ExcelVBAを使用して、特定の行を非表示にする方法について説明します。
  • Excel2003でのVBAを使って、sheet1シートの2行目、4行目、10行目を非表示にするマクロとすべての行を表示にするマクロを実装しています。
  • 現在、2つのマクロを組み合わせ、特定の行が非表示であればすべての行を表示し、非表示でなければ特定の行を非表示にするコードを作成したいと考えています。
回答を見る
  • ベストアンサー

ExcelVBAで行の非表示、表示をコード化

現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

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

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

With ThisWorkbook.Worksheets("sheet1")   If .Rows("2").Hidden Or .Rows("4").Hidden Or .Rows("10").Hidden Then     .Rows.Hidden = False   Else     .Rows("2").Hidden = True     .Rows("4").Hidden = True     .Rows("10").Hidden = True   End If End With こんなところですかね?

kenkichi55
質問者

お礼

ありがとうございます。 私も同じようなコード(withは使わなかったけど)で書いたのですが IF文でエラーがでて困っておりました。 .Rows("2").Hidden = TRUE としていたのがいけなかったのですね 助かりました。

関連するQ&A

  • ExcelVBAで行の非表示、表示をコード化したい

    現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

  • 塗りつぶしのない行を非表示にするマクロ

    塗りつぶしのない行を非表示にするマクロを作成したいのですが、 どこが問題で実行できないのかわかりません! 例えば8行目に対して実行したい場合を教えてください! ちなみに自分で作成したVBAはこんな感じです。 Sub macro1() If Rows("8:8").Interior.Color = xlNone Then Rows("8:8").EntireRow.Hidden = True End If End Sub よろしくお願いします。 ちなみにexcel2007です。

  • エクセル 行の表示非表示のマクロでエラーが

    たとえば     列A  行1 2300  行2 1500  行3  500  行4  300 となっていて、ボタンを押すたびに行2~行4の表示非表示を切り替えるマクロを以下のように設定しました。   Sub ()   With Rows("2:4")   .Hidden = Not .Hidden   End With   End Sub そして、A1のセルを保護しシートを保護したところマクロにエラーが出て使えなくなりました。 解決方法はあるのでしょうか? よろしくお願いします。

  • ExcelVBA 行を非表示にするとボタンが消える

     Excel2016です。調べても解決できなかったので,初めて質問させていただきます。  マクロで行を非表示にしたらコマンドボタンやチェックボックスが消えてしまいます。非表示にする行にはかからないようにオブジェクトを設置していますが,消えてしまいます。コントロールの書式設定で「セルにあわせて移動やサイズ変更をする」「セルにあわせて移動するが変更はしない」「セルにあわせて移動やサイズを変更しない」のいずれに設定しても消えてしまいます。一部消えない(見えている)オブジェクトもありますが,シートやオブジェクトをクリックしたり,画面を切り替えたりすると消えてしまいます。  しかし,「オブジェクトの選択と表示」で確認すると,消えたオブジェクトは全て残っています。  この状態で上書き保存をし,一旦ブックを閉じて再度開くと,オブジェクトは表示されており,機能します。  オブジェクトを配置した位置は,非表示処理をする14~35行より上と,それより下ですが,全て消えてしまいます。全てのオブジェクトを14行目より上に配置しても消えてしまいます。  しかし,別のシート(B)で全てのオブジェクトを非表示する行より上に配置して同様の処理をした場合は,消えません。  ※問題のシート(A)は,元々シートBをコピーして,更に別の処理を加えたりしたものなので,基本的には同じ処理を行っています。  また,その他の確認できた現象として,Ctrl+Wでブックを閉じた場合,通常はウィンドウの位置は変わりませんが,シートAでマクロ実行後に閉じた場合はなぜかウィンドウの位置がずれます(移動します)。ブックを開いて,何もせずにCtrl+Wで閉じた場合は移動しません。  念のため,オブジェクトの高さ等が0になってしまっているのかもしれないと思い,行を非表示にした後にオブジェクトの高さ・幅を変更するコードを追加してみてもやはり消えたままでした。  また,マクロを使用せずに手動で行を非表示にした場合は,オブジェクトは消えませんでした。  このオブジェクトが消える問題を解決する方法を教えていただきたいです。よろしくお願いいたします。 <コードの一部> Dim i As Integer For i = 14 To 35 Step 3 If Len(Cells(i, 9)) = 0 Then Range(Cells(i - 1, 9), Cells(i + 1, 9)).EntireRow.Hidden = True Next i なお, Range(Cells(i - 1, 9), Cells(i + 1, 9)).EntireRow.Hidden = True を Rows(i - 1).Hidden = True Rows(i).Hidden = True Rows(i + 1).Hidden = True に変えてみてもオブジェクトは消えます。

  • 行を非表示するVBA

    下記は行を非表示するVBAです、 エラーになり非表示できませんどこが間違っているのですか、よろしくお願いします。 Sub Macro7() Dim a As Integer a = 15 Rows("a:a").Select Selection.EntireRow.Hidden = True End Sub

  • 空白のセルを行削除する。EXCELマクロなのですが・・

    VBA初心者です。 データーをHPから、単純にコピーしてきて、 EXCELに貼り付けています。 フィルターをかけても、画像かなにかがセルに張り付いているのか、 空白行をすべて削除できません。 いろいろ試して(HPから、空白セルの行削除について書かれてあるマクロを貼り付けて)動いたのが、このVBAです。 しかし、遅いので、早いVBAに簡略できればいいのですが。。 大体、1000行ぐらいの文字を貼り付けて、3/1ぐらいが空白行です。A行のセルの空白のみを、削除したいのですが。  まったくの素人なので、わかりません。 どうかよろしくお願いいたします。 Sub 空白の削除() x% = Worksheets("sheet1").Range("A65536").End(xlUp).Row For i = x% To 1 Step -1 If Worksheets("sheet1").Cells(i, 1).Value = "" Then Worksheets("sheet1").Rows(i).Delete Next End Sub

  • エクセルの行選択マクロ

    エクセル2010にて。 行を選択した状態から、1行目から現在行の1つ上までを選択し、それを非表示とするマクロを組みたいのです。 VBAは全く分からず・・・ 変数を宣言し、その変数を代入すれば良いかと試行錯誤しましたが判らず。 Sub 3行目から現在行より上を選択して非表示() '  Dim x As Integer  x = ActiveCell.Row Rows("3:x-1").Select Selection.EntireRow.Hidden = True End Sub では、全く動作せず。。 例えば20行目を選択した状態で、マクロを実行すると3~19行目までが非表示になるようにしたいのです。御教示下さいませ。

  • エクセルVBAで非表示にする方法

    エクセルのVBAを使って表示・非表示の切り替えをする方法を教えてください。 マクロは初心者のため、コードを書いていただけると嬉しいです。 (1)6~9行目、11~14行目、16~19行目…151~154行目まで を表示・非表示 (2)合計列・差額列 (列に名前を入れています。ABCなどどの列に入るかはケースによりかわります) 今のところ、 Rows("6:9").Hidden = True Rows("11:14").Hidden = True Rows("16:19").Hidden = True . . . Columns("Q:R").Hidden = True で誤魔化していますが、時間がかかりますし、列はその都度設定している状況です。 ご指導お願いします。

  • 結合されているセル行の中から1行だけを非表示にするマクロ

    結合されているセル行の中の1行だけを非表示したいと思っています。 例えばA1:A5が結合していて、B1:E5までは一切結合されていない状態で、3行目だけを非表示にしたいのですが、 Rows("3:3").Select Selection.EntireRow.Hidden = True とすると、1~5行目まで全てが非表示になります。 マクロを自動記録すると Rows("3:3").Select Range("B3").Activate Selection.EntireRow.Hidden = True となるのですが、この通りにコーディングしても、やはり1~5行目が非表示になります。 1行だけを非表示にしたい場合は、どのように記述すれば良いのでしょうか? よろしくお願いします。

  • 二つの行のうち、どちらかが、セルの値がゼロのとき、その列を非表示にする

    二つの行のうち、どちらかが、セルの値がゼロのとき、その列を非表示にする windows7 excelでマクロ作成中の初心者です。 以下のコードで27行目のセルの値が0のとき列を非表示にします。 Private Sub 列非表示_Click() Dim 列番号 As Long 'シートが保護されていたら保護を解除 Worksheets("最新明細").Activate If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 Then Cells(27, 列番号).EntireColumn.Hidden = True End If Next 列番号 ActiveSheet.Protect End Sub ------------------------------------------------- Private Sub 列表示_Click() Dim 列番号 As Long 'シートが保護されていたら保護を解除 Worksheets("最新明細").Activate If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 Then Cells(27, 列番号).EntireColumn.Hidden = False End If Next 列番号 ActiveSheet.Protect End Sub この27行と、もう一行の28行、どちらかの行が、0のときに列を非表示・表示したいのですが、出来ません。 試行錯誤してもできないのです。どうかよろしくおねがいします。 For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 or Cells(28, 列番号).Value = 0 Then or( Cells(27, 列番号).EntireColumn.Hidden = True, Cells(27, 列番号).EntireColumn.Hidden = True) End If

専門家に質問してみよう