いつもお世話になっております。
以前こちらで同様の質問が投稿されておりまして、そちらの回答を参考に(原文ほとんどそのままですが・・・)行折りたたみをしていたのですが、
もう少し改良出来るのではないかと思いご相談です。
参考質問は、かなり前に検索をしたので再検索出来なかったのですが・・・
現在、
8行目からデータが入っております。
非表示にしたい行には任意の色で1行全体を色付けしています。
色のついていない行のみ 表示をします。
Sub hidden1()
x = ActiveCell.SpecialCells(xlLastCell).Row
y = ActiveCell.SpecialCells(xlLastCell).Column
For i = x To 8 Step -1
For n = 1 To y
If Cells(i, n).Interior.ColorIndex <> xlNone Then Rows(i).Hidden = True
Next n
Next i
End Sub
こちらですと、すべてのセルを検索し、行の非表示をしていると思います。(VBAの知識が無いので 間違っているかもしれません)
現在データ量は300行程ですので そんなに時間はかからないのですが、今後1000行、2000行と増えた場合の事を考え改良したいと思いました。
非表示にしたい行のA列には必ず色がついているので
A列を検索し、色がついていればその行を非表示。
というようにする場合 上記どこの文を削れば良いのでしょうか?
出来れば 表示⇔非表示をボタン1個で切り替えられればと思っております。
もし、A列に非表示があれば表示する、
もし、A列に非表示がなければ色付き行を非表示にする
というようなマクロを教えていただければ幸いです。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
A列に非表示の行があるときは全行表示にして、そうでないときは色つきセルの行を非表示にするマクロサンプルです。
ただし色つきセルは「値が入っている」ことを前提にしていますから、そうでないなら補足してください。フォームツールバーのコマンドボタンをシートに配置して、右クリック→マクロの登録でマクロを割り当てておけば「表示⇔非表示をボタン1個で切り替え」できます
Sub Macro1()
Dim rng, r As Range
Application.ScreenUpdating = False
Set rng = Range(Range("A8"), Range("A65536").End(xlUp))
If Application.Subtotal(3, rng) = Application.Subtotal(103, rng) Then
For Each r In rng
If r.Interior.ColorIndex <> xlNone Then
r.EntireRow.Hidden = True
End If
Next r
Else
rng.EntireRow.Hidden = False
End If
Application.ScreenUpdating = True
End Sub
この回答への補足
PCが不調で 補足が遅れてしまい申し訳ございませんでした。
ご回答、アドバイスありがとうございます。
家で仮で作ったデータでは 表示⇔非表示が出来たのですが
本番のデータベースではエラーになってしまいました・・・
上から1行1行実行してみましたところ
For Each r In rng
の部分で、止まってしまったようです。
(今使用しているPCには本番用bookが入っていないので 確認できないのですが「実行エラー13」と出たと記憶しております・・・)
>ただし色つきセルは「値が入っている」ことを前提にしていますから・・・
の部分ですが、7行目に色をつけたデータベースのタイトルがあり、所々セル結合しております。
上記の件は関係しているのでしょうか?
大変お手数おかけいたしますがアドバイスよろしくお願いいたします。
No.5
- 回答日時:
#2です
>上から3段目 Application.ScreenUpdating = False の下へ
> MsgBox(r.Address)
そこに挿入したらエラーになります。ですから補足していただいたメッセージは意味を持ちません。r.Addressが意味をもつのはFor文以降だからです。
>3段目から止まってしまっていたようです
3段目ってどの行を指していますか。
Application.ScreenUpdating = False
で止まる(黄色く反転する)のは考えにくいです。もし
Set rng = Range(Range("A8"), Range("A65536").End(xlUp))
の行で止まっているなら、実際のシートをコピーしてから、怪しそうな行を1行ずつ削除してステップ実行すればどの行でエラーになったかを特定できると思いますので、それが分かったらエラーコードと共に補足をお願いします。(実際のシートが見えないので、その特定は回答者にはできません)
また、特定作業のときは
Application.ScreenUpdating = False
はコメントにしておくとよいと思います。そうすると画面描画もされます。
なお今回のマクロで2003,2000の違いはないでしょう。また7行目までは関係ありません。また今度補足するときは「お礼」欄に記入をお願いします。補足欄に書かれると、記入されたことが分かりません。お礼欄ならメールが来るので分かるからです。
アドバイスありがとうございます。
会社PCで検証用として、本番用と同様のシートを作りマクロを動かしてみましたがやはりエラーになってしまいました。
その検証用シートを 家PCへ転送し、家PCでマクロを動かしてみたところ きちんと行表示⇔非表示が出来ましたので
会社のPCが 良くなかったようです・・・
色々 アドバイス、ご尽力くださりありがとうございました。
PCの環境で出来なく残念でしたが 勉強になりました!!
No.4
- 回答日時:
#03です
Error(13)は「型が一致しません」です。
結合セルがあるときマクロが意図しない動作をすることはよくあるのですが、今回のマクロは代入は基本的に行っていないのでなぜエラーになったか悩んでいます。少なくとも7行目のタイトルは関係なさそうです。
試しに
・A列とB列のセルをを結合
・A列の複数のセルを結合
・A列からC列まで、複数の行を結合
・A列は結合せず、B列とC列を結合
してみて、掲載したマクロを動かしてみましたが正常に動作しました。
ステップ実行をご存じのようですので
For Each r In rng
の下に
MsgBox(r.Address)
を書き加えて、どのセルまでは正しく処理しているか、どのセルでエラーになったのかをみれば、どんな条件の時にエラーになったか分かると思います。どんなパターンがNGか分かったら教えてください
なお念のため確認ですがロジックは何か追加されていませんか?
追加ロジックが影響しているとなると、お手上げです。
この回答への補足
アドバイスありがとうございます。
申し訳ございません。
はじめの私の調べ方が悪く、エラー箇所の訂正です。
3段目から止まってしまっていたようです。
上から3段目 Application.ScreenUpdating = False の下へ
MsgBox(r.Address)
へ書き加えたところ、
「実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていません」と出ました。
お教えいただいたもの以外は書き加えていないです。
ちなみに、家のPCで作ったテスト用エクセルはエクセル2003、
本番用エクセルはエクセル2000です。この辺は関係しているのでしょうか?
本番用シートは、
A列1~6まで空欄色設定無し、7にタイトル、8から数字のみのデータ(00001、00002等)に色設定があったりなかったりとなっております。
B以降は、データの入力があったりなかったりのセルで、所々列の非表示をしております。
(列を全部表示した状態でもエラーが出てしまったので関係ないと思いますが・・・)
うまく説明出来ず申し訳ございません。
No.2
- 回答日時:
A列のみチェックします。
Sub hidden1()
x = ActiveCell.SpecialCells(xlLastCell).Row
'y = ActiveCell.SpecialCells(xlLastCell).Column 削除
For i = x To 8 Step -1
'For n = 1 To y 削除
If Cells(i, 1).Interior.ColorIndex <> xlNone Then Rows(i).Hidden = True ' 変更 n→1
'Next n 削除
Next i
End Sub
PCが不調で お礼が遅れてしまい申し訳ございませんでした。
ご回答、アドバイスありがとうございます。
どの部分を削り、変更すれば良いのか教えていただき 勉強になりました。
自分なりに色々削ったりしたのですが エラーになっていたので助かりました。
ありがとうございました。
No.1
- 回答日時:
行1まで検索するようにした。
Sub hidden1()
x = ActiveCell.SpecialCells(xlLastCell).Row
n = 1
For i = x To 1 Step -1
'For n = 1 To y
If Cells(i, n).Interior.ColorIndex <> xlNone Then Rows(i).Hidden = True
'Next n
Next i
End Sub
PCが不調で お礼が遅れてしまい申し訳ございませんでした。
ご回答、アドバイスありがとうございます。
無事色付き行、非表示にすることが出来ました!
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Excel(エクセル) 【マクロ】リボン、行列、数式・ステータスバを非表示に 4 2022/12/12 07:32
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) 【Excel VBA】条件に合った行の表示・非表示を行う方法 3 2023/03/18 12:31
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル マクロ オートフィ...
-
excel 小さすぎて見えないセル...
-
excelのデータで色つき行の抽出...
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセル 上下で列幅を変えるには
-
アクティブになっている行をマ...
-
特定の文字がある行以外を削除...
-
AのセルとB行を比較して、一致...
-
Excel グラフのプロットからデ...
-
EXCELで最後の行を固定
-
セルの色によって条件文をつけ...
-
エクセル マクロ等を利用した各...
-
Excel2007で、指定範囲の行高さ...
-
エクセル マクロで数値が変っ...
-
Excelマクロ 期間を指定してデ...
-
貼り付けた数式を最終行まで繰...
-
Excel VBA アクティブセルから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
エクセル2016で時間を入力して...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報