• ベストアンサー

急ぎ!色のついたセルを非表示に!!

たびたび失礼します。 エクセル2000で 色のついたセルだけ非表示にする方法を 教えて下さい。 VBAは素人なのでVBAの場合 捜査方法を詳しくお願いします! 緊急ですー。よろしくお願いいたします

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

  • ベストアンサー
noname#148473
noname#148473
回答No.5

それほどヒマでもないのですが、乗りかかった船だと思って作ってみました。 まず新しいブックを作成してください(ブック内にSheet1~Sheet3があることを確認、なければ作ってください) Sheet1のA列にリストAの内容をコピーしてください。 Sheet2のA列にリストBの内容をコピーしてください。 次にメニューバーから「ツール」→「マクロ」→「VisualBasicEditor」を選びます。VisualBasicEditorが別ウィンドウで起動します。VisualBasicEditorのメニューバーの「挿入」→「標準モジュール」を選びます。 画面の右半分に真っ白な広いウィンドウが開きますので、ここに下記の点線内の内容を貼り付けます。 '----------------------------------------- Sub データ比較() Dim sa(65536) As Byte Dim ii, fg, de1, de2 As Integer Dim c1, c2, c3 As Integer Dim c As Variant Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Set WS3 = Worksheets("Sheet3") de1 = WS1.Range("A1").End(xlDown).Row de2 = WS2.Range("A1").End(xlDown).Row WS3.Range("A1") = "AB両方" WS3.Range("B1") = "Aのみ" WS3.Range("C1") = "Bのみ" WS3.Range("A2:C65536").ClearContents For Each c In WS1.Range("A1:A" & de1) fg = 0 For ii = 0 To de2 - 1 If StrComp(c, WS2.Range("A1").Offset(ii, 0).Value) = 0 Then WS3.Range("A2").Offset(c1, 0).Value = c sa(ii) = 1 fg = 1 c1 = c1 + 1 ii = de2 End If Next If fg = 0 Then WS3.Range("A2").Offset(c2, 1).Value = c c2 = c2 + 1 End If Next For ii = 0 To de2 - 1 If sa(ii) = 0 Then WS3.Range("A2").Offset(c3, 2).Value = _ WS2.Range("A1").Offset(ii, 0).Value c3 = c3 + 1 End If Next End Sub '----------------------------------------- 貼り付けたら、Excelのほうに戻って、 メニューバーから「ツール」→「マクロ」→「マクロ」を選びます。「マクロ」と書かれたウィンドウが画面上に開きます。「データ比較」という行が反転していることを確認して(反転していないときは、クリックして反転させる)「実行」ボタンを押します。Sheet3に実行結果が書き出されます。 以上です。お望みのような結果が得られましたでしょうか? (ふぅ、しんど)

puriboo
質問者

お礼

ご回答ありがとうございました☆ なんとかできました! また質問することもあると思いますが よろしくお願い致します(^o^)/

その他の回答 (6)

  • moon00
  • ベストアンサー率44% (315/712)
回答No.7

#3です。 条件、というのは、色を付けるために使っている条件です。 条件付き書式を使用しているということは、 その設定においてある数値以上であるとか、等しいとかの 条件をつけているのではありませんか? その条件式を作業列にもってくればできるのではないかと。 例えば「=a1=p1×0.5」という式で条件付けをしているなら、 作業列に=if(a1=p1×0.5,1,0)とすれば 条件を満たしている場合は、「1」となります。 この列をキーにしてオートフィルタで抽出できないか、 ということです。

puriboo
質問者

お礼

ご回答ありがとうございました☆ なんとかできました! また質問することもあると思いますが よろしくお願い致します(^o^)/

noname#9284
noname#9284
回答No.6

あまりあれこれ言っても puriboo さんをお忙しくさせるだけと思っていましたが、 ちょっとだけ書かせていただきますね。 どこかのシートにSheet1のデータの下にSheet2のデータをつぎ足す形でコピーします。 もちろん見出しは1行目だけにあります。 データは上から隙間なく詰めてあるとします。 これを、名前をキーにして並べ替えます。 そして、名前がA列だとすると B2に =IF(A1=A2,"",1) として、B1の右下の小さな黒いハンドルをWクリックして下までコピーして下さい。 自分より一つ前の行のセルが同じ行のセルと一致したら「1」が戻ります。 (重複しているという事です) B列を選択してコピーし、値の貼り付けをします。 今度はB列をキーにして並べ替えます。 あとは1が立っている行を削除します。

puriboo
質問者

お礼

ご回答ありがとうございました☆ なんとかできました! また質問することもあると思いますが よろしくお願い致します(^o^)/

noname#9284
noname#9284
回答No.4

> おっしゃるとおり、先程紹介していただいた > 条件付書式で色をつけました。 > これでは不可能のようですね・・・。 そうですね、お役に立てなくて申し訳ありません。 しかし前のご質問に関数で比較する方が簡単ですというご回答がありますので 参考にされてみてはいかがでしょうか。 応用が利きますよ。 削除したい行、または削除したくない行に関数で○など戻るようにしておいて、 その上でフィルタオプションを使って絞込みをする、という手があります。

puriboo
質問者

お礼

ご回答ありがとうございました☆ なんとかできました! また質問することもあると思いますが よろしくお願い致します(^o^)/

  • moon00
  • ベストアンサー率44% (315/712)
回答No.3

最終形をどうしたいのか、がいまいち見えてないので 的外れの回答でしたらすみません。 条件付き書式で色をつけているということは、 何らかの条件を満たす行を表示、もしくは非表示したい、 ということですよね? 例えば作業列を作り、その条件を満たすものを「1」 満たさないものを「0」とする計算式(if式)を入力して それでオートフィルタをかける、という手法では できませんか?

puriboo
質問者

補足

説明不足で申し訳ないです。 具体的にしたいことは リストA、リストB があり 重複するレコードを抽出したい ということです。 まず重複リストを条件付書式で色をつけました。 そのあと、色をつけたセルを行単位で非表示にしたい のです。 エクセルに詳しくないのですが、 >その条件を満たすものを「1」 >満たさないものを「0」 たとえば、作業列を作り、隣の列が緑だったら 「1」、 そうじゃなければ「0」という風にするときは どうしたらよいのでしょう? それができればたしかにオートフィルタで できますね。 IF関数で”A1が緑”とかはどうやって指定すれば 良いのでしょうか? ご回答よろしくお願いいたします

noname#9284
noname#9284
回答No.2

ANo.#1で書いた者ですが、削除になっていますね。 実はトゲがある書き方をしたつもりは全くなかったのです・・・。 先のサイトでご紹介した 「別シートにある文字列との重複チェック 」にある条件付き書式で色を付けられ、 その後それについて質問されたのかも知れないと思って 先のご質問との関連をお聞きしたまでです。 誤解を招いてしまったようでしたら申し訳ありません。 ご希望の操作はマクロ関数と名前の定義で実現するように思います。 ただ、これは今はヘルプにも載っていない方法ですので もし puriboo さんがご希望であればご紹介させていただきますがいかがでしょうか。 ただしこれはセルに直接色を付けた場合に限ります。 先にご紹介したサイトで条件付き書式によって付けられた色の場合は マクロ関数と言う手段が使えません。 というわけで先のご質問との関連をお聞きしたかったのです。

puriboo
質問者

補足

ご返信ありがとうございます。 おっしゃるとおり、先程紹介していただいた 条件付書式で色をつけました。 これでは不可能のようですね・・・。 うーん。 どうしようか悩んでいます。 うまく2つのリストの重複するものを 抽出したいのですが。 初めからマクロでやったほうが良いのでしょうか? 関数などかなり素人ですので 詳しくレクチャーしてただけると助かります。 よろしくお願いいたします!

noname#148473
noname#148473
回答No.1

セルだけを非表示にすることは不可能です。 非表示にする場合は行単位か列単位になります。 どちらを使うのか補足してください。 あと、あんまり「急ぎ!」とか「緊急!」とか書くのはどうかと思います。ここの回答者の皆さんは「ボランティア」なのですから、ご自分の都合ばかり声高に主張されるのは、あまり良い印象ではないです。 (#1の方の、すこ~しトゲのある文章も、そのあたりに起因していると思いますよ?)

puriboo
質問者

お礼

☆☆☆お礼投稿になってしまいましたが 補足です☆☆ ちなみに、行がかなりたくさんあるので それぞれを選択して、非表示にする、ではなく 例えば、選択範囲内で色のついたセルを含む行を 非表示に。 みたいな方法がありましたら、よろしくお願いいたします

puriboo
質問者

補足

焦りのあまり、マナー違反をしてしまい 申し訳ありませんでした。 色のついたセルを含む行単位での (もしくは色のついてないセルを含まない行) 非表示で構いません。 操作方法ご存知でしたら、よろしくおねが致します。

関連するQ&A