• ベストアンサー

エクセルで特定の文字列が入った行を非表示にしたい

エクセル(97)で特定の列のセルに特定の文字列が入った行を非表示にする機能はありますでしょうか? 例えばC列の3行目以降から「無し」という文字列が入ったらその行を非表示にしたいのですが・・・

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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

noitigo
質問者

お礼

二つのパターンを記述して下さってありがとうございます! 書き方が悪くてすみませんでした、私が求めていたやり方は、 >■ 『無し』の入力済みのセルを非表示にする(マクロで一括処理) ■ こちらの方でした!まさにぴったりの方法です! でも、 >■ セルに『無し』と力すれば機能するマクロ ■ これもとてもいいと思います! どちらにするのかはリクエスターのかたと相談して決めてこうと思います! nishi6さん!本当にありがとうございましたm(_ _)m また、皆様!アイデアやお力をお貸し頂きましてありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (9)

  • miwaki
  • ベストアンサー率36% (14/38)
回答No.9

#7の補足 RANGE(C,n)は、厳密に表記すれば、RANGE("C"& n)で、nを3からデータが存在する限りカウントアップして"無し"かどうかチェックし"無し"なら当該行を削除する。ただし行を削除した場合、カウントを1つ下げるのを忘れないこと。 しかし、オートフィルタが簡単でしょうね。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.8

#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列の「無し」の文字前後にスペースなどが入っていませんか。

noitigo
質問者

お礼

昨日は、もうヘトヘトになってしまいましたので、 ご飯を食べてから早く寝てしまいました・・・、すみませんでした<(_ _)> そして、改めてお礼申し上げます。 >「無し」「有り」「空白」の入っている列は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)
回答No.7

C列3行目以降に「無し」となってれば、その行全体を削除したいということですね。 マクロでRANGE(C,n)を順に見て(nを3からデータ長分ループ)「無し」ならその行を削除することも可能です。 しかし難しく考えず、オートフィルタでC列が「無し」と等しくないとすればいかがでしょう。「無し」の行が非表示になります。しかし3行目以降というのが良く分かりませんが・・・。1~2行目に「無し」があっても非表示にしないという意味でしょうか。

noitigo
質問者

お礼

アドバイスありがとうございます! >C列3行目以降に「無し」となってれば、 >その行全体を削除したいということですね。 実は、これに似た質問を昨日したのですが、もう一つのパターンとして「非表示」の方法も知っておきたかったので改めて質問させて頂きました。最終的にどっちにしようか決めようと思いまして・・・ >オートフィルタでC列が「無し」と等しくないと >すればいかがでしょう。「無し」の行が非表示に >なります。 オートフィルタの案もとても名案だと思いましたので、候補に入れています。ですが、VBAの勉強のためにも(というよりVBAの勉強の動機づけも深めるためにかな^^;)、「行」を非表示のやり方も完成させたかったのです。。 >しかし3行目以降というのが良く分かりませんが・・・。 >1~2行目に「無し」が >あっても非表示にしないという意味でしょうか。 「3行目以降」というのは、例えばって話だったのですが、1~2行目は「項目」などで使うかな・・・、っていうのをイメージして「3行目以降」ということにしました。なので状況に応じてコードは4行目からとか、5行目からとかに変えようと考えていました。

すると、全ての回答が全文表示されます。
  • miwaki
  • ベストアンサー率36% (14/38)
回答No.6

条件付書式を使って、セルの内容が「無し」なら、フォントの色を白(バックの色)にすると見かけ上非表示になります。

noitigo
質問者

お礼

ご返信ありがとうございます。 今回行を詰める方法を探していましたが、miwakiさんのアドバイスも今後の参考にさせて頂きます<(_ _)>

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

#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

noitigo
質問者

お礼

ちょっとバタバタしてきましたので、家に帰ったらまた実験してみます!先にお礼申し上げます<(_ _)>

noitigo
質問者

補足

家に帰ってさっそくやってみました! ですが、3行目だけしか非表示にならないのです(T_Y) 実は、3行目以降のセルに「無し」と書いてある行、「有り」と書いてある行、「空白」のある行が あるとして、「無し」の行だけを非表示にして (マクロ+ボタンなども使って自動化して)周りの 人も見やすく使いやすくしたいという要望があり、 挑戦しているところです^^;; 無理ならしかたないと言ってくれましたが、 私としてはいいものを使ってもらいたいという 気持ちもありまして… マクロの記録の仕方やボタンの作り方・登録の仕方は わかります。ですがVBAの分野までになるとまだ・・・ お手が空きましたら今一度、ご助言頂けないでしょうか?imogasiさんの記事が今回一番近い気がするのです<(_ _)>お願いします

すると、全ての回答が全文表示されます。
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

データの持ち方が不明ですが、、、 単純にオートフィルタのオプションで「無し」と「等しくない」では対応出来ませんか?

noitigo
質問者

お礼

>単純にオートフィルタのオプションで「無し」と「等しくない」では対応出来ませんか? これもいいアイデアですね! これをマクロで自動化すればそれでもいいように思います! アイデア感謝感謝でございますm(_ _)m

すると、全ての回答が全文表示されます。
  • moon00
  • ベストアンサー率44% (315/712)
回答No.3

内容を非表示とし、空白行として見せたいということであれば、 条件付き書式で可能だと思います。 3行目を選択して「ツール」から「条件付き書式」を選択肢。 「数式が」として「=$C3="無し"」として書式で文字色を 「白」とします。(背景色と同じにする。) 後は、書式コピーで次行以下にコピーすればOKです。 「非表示」というのが、その分行を詰めて表示したい、 ということであれば、この回答は無視して下さい。

noitigo
質問者

お礼

アイデア感謝します<(_ _)> ですが、リクエスターの希望と致しましては >行を詰めて表示したい、 とのことでした。。 でも、この方法も、他の場面で役に立ってくるかもしれませんので一つの方法として心に留めておきます!(^0^)!

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

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列以上でも可はテスト済み)して、 実行。 入っている行は非表示になります。 コマンドボタンをシートに貼りつけ、クリックイベントを 実行のキッカケにすることも出来ます。

noitigo
質問者

お礼

いつもお世話になっております! かなり、私の求めてた形に近いです! セルを選択しないで(マクロを実行し「無し」の文字がある行を)非表示にする方法まではさすがにないでしょうか? 私もこれからエクセルの上級の資格を取得してからマクロ・VBAなども専門に勉強してみようと考えてるのですが、今の地点ですとあまりに難しすぎるので、出来ればお力をお貸し頂けないでしょうか? よろしくお願い致しますm(_ _)m

すると、全ての回答が全文表示されます。
  • sero
  • ベストアンサー率47% (916/1944)
回答No.1

自動でというのは無理です。 手動でも良いなら、作業用の列に =IF(ISERROR(FIND("無し",C3)),"",1) と入力し、必要行だけコピー。 その後オートフィルタをかけて非表示にするという手があります。

noitigo
質問者

お礼

>作業用の列に =IF(ISERROR(FIND("無し",C3)),"",1) と入力し、 これを(C3のセルで)やってみたのですが、セルに入力してエンターを押しましたら何やら長いエラーが出てしまいます。。 また、色々試してみます! アドバイスありがとうございました!

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう