- ベストアンサー
エクセルで特定の文字列が入った行を非表示にしたい
エクセル(97)で特定の列のセルに特定の文字列が入った行を非表示にする機能はありますでしょうか? 例えばC列の3行目以降から「無し」という文字列が入ったらその行を非表示にしたいのですが・・・
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
自動の意味がはっきりしないので、2つ書いてみました。 1.セルに『無し』と力すれば機能するマクロ 2.『無し』の入力済みのセルを非表示にするマクロ 両方とも、Sheet1を対象にし、Sheet1 のコードウインドウに貼り付けています。 '// ■ セルに『無し』と力すれば機能するマクロ ■ '// C列の3行目以降に『無し』を入力すると、その行を非表示にする '// 『無し』をコピーして複数セルに貼り付けても可 '// ※しかし、あまり多数のセルを操作すると重くなるので、 '// 100個以上は処理しないようにしています Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 100 Then Exit Sub '// 多数のセルの修正は無視する Dim rg As Range '// セル For Each rg In Target If rg.Column = "3" Then '// C列なら If rg.Value = "無し" Then Rows(rg.Row).Hidden = True '// 下2行を有効にすると、セルの『無し』をクリアすると行が表示される 'Else ' Rows(rg.Row).Hidden = False End If End If Next End Sub '// ■ 『無し』の入力済みのセルを非表示にする(マクロで一括処理) ■ '// C列で3行目から下のセルに『無し』があれば、行を非表示にする Sub selectRowHidden() Dim rw As Long '// 行カウンタ For rw = 3 To Range("C65536").End(xlUp).Row If Range("C" & rw).Value = "無し" Then Rows(rw).Hidden = True End If Next End Sub
その他の回答 (9)
- miwaki
- ベストアンサー率36% (14/38)
#7の補足 RANGE(C,n)は、厳密に表記すれば、RANGE("C"& n)で、nを3からデータが存在する限りカウントアップして"無し"かどうかチェックし"無し"なら当該行を削除する。ただし行を削除した場合、カウントを1つ下げるのを忘れないこと。 しかし、オートフィルタが簡単でしょうね。
- imogasi
- ベストアンサー率27% (4737/17069)
#5です。 >実は、3行目以降のセルに「無し」と書いてある行、「有り」と書いてある行、「空白」のある行があるとして 「無し」「有り」「空白」の入っている列はC列(だけ)ですよね。 ●一部訂正してみます。 Sub test01() Range("A65536").End(xlUp).Select d = Selection.Row MsgBox d For i = 3 To d If Cells(i, "C") = "無し" Then Cells(i, "C").EntireRow.Hidden = True End If Next End Sub とMsgbox dを入れて、実行すると表示(数字)はいくらと出ますか。最下行の番号数字ですか。 ●「無し」とは入っている行だけ非表示にしてますが 表のC列の「無し」の文字前後にスペースなどが入っていませんか。
お礼
昨日は、もうヘトヘトになってしまいましたので、 ご飯を食べてから早く寝てしまいました・・・、すみませんでした<(_ _)> そして、改めてお礼申し上げます。 >「無し」「有り」「空白」の入っている列はC列(だけ)ですよね。 説明抜けてまして申し訳有りません。 そうですC列での話です。 今いろいろ探り探りと実験をしつつ進めていますので、 本番のファイルを作る時はD列とかE列になるかも しれませんが、それはその都度コードを「C」から 「D」とかに変えてみてやってみようと思ってました。 例えばD列にしたい場合は、コードを If Cells(i, "D") = "無し" Then Cells(i, "D").EntireRow.Hidden = True という感じよろしかったですよね? >Msgbox dを入れて、実行すると表示(数字)は >いくらと出ますか。最下行の番号数字ですか。 まず、マクロを実行してみましたら、ダイアログが 出てきまして、常に「1」の数字と「OK」ボタンが 出てきました!!? 数字とはこの「1」のことですか? >表のC列の「無し」の文字前後にスペースなどが >入っていませんか。 C列の「無し」は中央揃えなどしてみたりしてますが、スペースを入れたりはしてません。 何か参考になりますでしょうか?
- miwaki
- ベストアンサー率36% (14/38)
C列3行目以降に「無し」となってれば、その行全体を削除したいということですね。 マクロでRANGE(C,n)を順に見て(nを3からデータ長分ループ)「無し」ならその行を削除することも可能です。 しかし難しく考えず、オートフィルタでC列が「無し」と等しくないとすればいかがでしょう。「無し」の行が非表示になります。しかし3行目以降というのが良く分かりませんが・・・。1~2行目に「無し」があっても非表示にしないという意味でしょうか。
お礼
アドバイスありがとうございます! >C列3行目以降に「無し」となってれば、 >その行全体を削除したいということですね。 実は、これに似た質問を昨日したのですが、もう一つのパターンとして「非表示」の方法も知っておきたかったので改めて質問させて頂きました。最終的にどっちにしようか決めようと思いまして・・・ >オートフィルタでC列が「無し」と等しくないと >すればいかがでしょう。「無し」の行が非表示に >なります。 オートフィルタの案もとても名案だと思いましたので、候補に入れています。ですが、VBAの勉強のためにも(というよりVBAの勉強の動機づけも深めるためにかな^^;)、「行」を非表示のやり方も完成させたかったのです。。 >しかし3行目以降というのが良く分かりませんが・・・。 >1~2行目に「無し」が >あっても非表示にしないという意味でしょうか。 「3行目以降」というのは、例えばって話だったのですが、1~2行目は「項目」などで使うかな・・・、っていうのをイメージして「3行目以降」ということにしました。なので状況に応じてコードは4行目からとか、5行目からとかに変えようと考えていました。
- miwaki
- ベストアンサー率36% (14/38)
条件付書式を使って、セルの内容が「無し」なら、フォントの色を白(バックの色)にすると見かけ上非表示になります。
お礼
ご返信ありがとうございます。 今回行を詰める方法を探していましたが、miwakiさんのアドバイスも今後の参考にさせて頂きます<(_ _)>
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。 >セルを選択しないで(マクロを実行し「無し」の文字がある行を)非表示にする方法まではさすがにないでしょうか セル選択を使用者に許した方が、自由度が上がると思いまして、そうしました。 「無し」の入った列は、例えば列Cとか1列だけとし第3行目以下データ空白行などはない、「リスト形式」の表であるのなら Sub test01() d = Range("A3").CurrentRegion.Rows.Count For i = 3 To d + 2 If Cells(i, "C") = "無し" Then Cells(i, "C").EntireRow.Hidden = True End If Next End Sub
お礼
ちょっとバタバタしてきましたので、家に帰ったらまた実験してみます!先にお礼申し上げます<(_ _)>
補足
家に帰ってさっそくやってみました! ですが、3行目だけしか非表示にならないのです(T_Y) 実は、3行目以降のセルに「無し」と書いてある行、「有り」と書いてある行、「空白」のある行が あるとして、「無し」の行だけを非表示にして (マクロ+ボタンなども使って自動化して)周りの 人も見やすく使いやすくしたいという要望があり、 挑戦しているところです^^;; 無理ならしかたないと言ってくれましたが、 私としてはいいものを使ってもらいたいという 気持ちもありまして… マクロの記録の仕方やボタンの作り方・登録の仕方は わかります。ですがVBAの分野までになるとまだ・・・ お手が空きましたら今一度、ご助言頂けないでしょうか?imogasiさんの記事が今回一番近い気がするのです<(_ _)>お願いします
- papayuka
- ベストアンサー率45% (1388/3066)
データの持ち方が不明ですが、、、 単純にオートフィルタのオプションで「無し」と「等しくない」では対応出来ませんか?
お礼
>単純にオートフィルタのオプションで「無し」と「等しくない」では対応出来ませんか? これもいいアイデアですね! これをマクロで自動化すればそれでもいいように思います! アイデア感謝感謝でございますm(_ _)m
- moon00
- ベストアンサー率44% (315/712)
内容を非表示とし、空白行として見せたいということであれば、 条件付き書式で可能だと思います。 3行目を選択して「ツール」から「条件付き書式」を選択肢。 「数式が」として「=$C3="無し"」として書式で文字色を 「白」とします。(背景色と同じにする。) 後は、書式コピーで次行以下にコピーすればOKです。 「非表示」というのが、その分行を詰めて表示したい、 ということであれば、この回答は無視して下さい。
お礼
アイデア感謝します<(_ _)> ですが、リクエスターの希望と致しましては >行を詰めて表示したい、 とのことでした。。 でも、この方法も、他の場面で役に立ってくるかもしれませんので一つの方法として心に留めておきます!(^0^)!
- imogasi
- ベストアンサー率27% (4737/17069)
VBAで下記を標準モジュールに貼りつける。 Sub test01() Dim cl As Range For Each cl In Selection If cl = "無し" Then cl.EntireRow.Hidden = True End If Next End Sub 「無し」が入っている・または入っていないか、を判別をする範囲を指定(2列以上でも可はテスト済み)して、 実行。 入っている行は非表示になります。 コマンドボタンをシートに貼りつけ、クリックイベントを 実行のキッカケにすることも出来ます。
お礼
いつもお世話になっております! かなり、私の求めてた形に近いです! セルを選択しないで(マクロを実行し「無し」の文字がある行を)非表示にする方法まではさすがにないでしょうか? 私もこれからエクセルの上級の資格を取得してからマクロ・VBAなども専門に勉強してみようと考えてるのですが、今の地点ですとあまりに難しすぎるので、出来ればお力をお貸し頂けないでしょうか? よろしくお願い致しますm(_ _)m
- sero
- ベストアンサー率47% (916/1944)
自動でというのは無理です。 手動でも良いなら、作業用の列に =IF(ISERROR(FIND("無し",C3)),"",1) と入力し、必要行だけコピー。 その後オートフィルタをかけて非表示にするという手があります。
お礼
>作業用の列に =IF(ISERROR(FIND("無し",C3)),"",1) と入力し、 これを(C3のセルで)やってみたのですが、セルに入力してエンターを押しましたら何やら長いエラーが出てしまいます。。 また、色々試してみます! アドバイスありがとうございました!
お礼
二つのパターンを記述して下さってありがとうございます! 書き方が悪くてすみませんでした、私が求めていたやり方は、 >■ 『無し』の入力済みのセルを非表示にする(マクロで一括処理) ■ こちらの方でした!まさにぴったりの方法です! でも、 >■ セルに『無し』と力すれば機能するマクロ ■ これもとてもいいと思います! どちらにするのかはリクエスターのかたと相談して決めてこうと思います! nishi6さん!本当にありがとうございましたm(_ _)m また、皆様!アイデアやお力をお貸し頂きましてありがとうございました!