プロが教えるわが家の防犯対策術!

いつも大変お世話になっております。

例えば図のような場合、C列でフィルタするとB列に製品名が表示されますが、この時に製品名の重複を避けた一覧表をどこかに表示したいのですが。

A列にカウント(COUNTIF($B$2:$B$12,B2)-COUNTIF(B2:B12,B2)+1)でナンバリングして1でフィルタして重複回避しようとしましたが、C列に空白セルが有ることが分かりこの方法ではダメだと分かりました。

どなたか回避方法を教えてください。
VBAはあまり使ったことが無いのですが簡単なVBAならOKです。

「エクセルでフィルタ後の列の重複を回避した」の質問画像

A 回答 (6件)

失礼しました。


ようやく質問の意図が理解できました。

そもそもカウント数が間違っているという事になりますね。
COUNT関数ではなく、COUNTIFS関数で数を数えるようにしてみましょう。
それで解決すると思う。

・・・

同じ行にあるB列とC列のセルの値が等しい行の数を数えるという事です。

 COUNT($B$2:B2,B2)
 ↓
 COUNTIFS($B$2:B2,B2,$C$2:C2,C2)

これで「1」が返る行だけを表示させればいい。
    • good
    • 0
この回答へのお礼

当方も前回のご回答への補足後、この質問の内容ならCOUNTIFSが使えることに気付きました。

がしかし、
実はどこかの補足で書いた?ようにこの表は実際には横に大きくて20列程度あり今後も増える可能性大の表です。
また、フィルタもC&Dとか、E&Hでフィルタした時のB列の重複の場合もありますので、今回の課題をCOOUNTIFSでは補助列がその分必要になる事に気付きました。

それなら最終フィルタ後のB列の結果を他のシートにコピペして、重複削除をかけるのが現実的かと。

何度もお手数をお掛けしましたが、本件は出直しとさせていただきます。
今の感じでは、最終フィルタ後の「B列を他のシートにコピペ&重複削除」をマクロの記録で「ボタン」クリックで解消できるかと。

本当にありがとうございました。

お礼日時:2022/10/17 08:55

C列が空白であるかどうかは関係なく、仮に空白が『C』であっても同じことが起こるように思われます。


対応策としては、B列とC列をつなぎ合わせた文字列の重複をカウントすればよいと思います。

添付図参照です。
A~C列は質問文より引用しました。E~F列が対応策です。

E2セルに『=(COUNTIF($F$2:$F$12,F2)-COUNTIF(F2:F12,F2)+1)』を入力します。
F2セルに『=B2&C2』を入力します。
E2~F2セルをデータ最下行までコピペします。

その状態で、C列を『A』、E列を『1』でフィルタをかければ完成です。
「エクセルでフィルタ後の列の重複を回避した」の回答画像6
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

ハイ、その通りでご回答の内容理解しました。

お礼日時:2022/10/17 08:44

No2です。



>ご回答の回答例ではB列の重複を回避した結果ではないでしょうか?
ご質問文に「製品名の重複を避けた一覧表」とあるけれど、B列の重複を除くという意味ではないのでしょうか?

>C列の機器Aor機器Bの2択ではなくC列にも複数の要因があって
>これらでフィルターしたときに表示されるB列の重複削除がしたいのですが。
説明してあるつもりですが、サンプルは「AまたはB」でフィルターをかけた例です。
その他のフィルタで行いたければ、その部分を入れ替えることで実現できます。

>当方Office2019ですが、UNIQUE関数が使えないようです。
はい。365環境とお断りしておきました。(2021でも可能)
2019の関数でも同様のことは可能ですが、かなり複雑になるので、No2の数式ですらフィルタの意味が伝わっていないようですので、複雑な関数になってしまうと(多分)増々無理であろうと推測します。

一番簡単なのは、
1)手動でフィルタをかけて
2)B列をどこかのシートにコピペ
3)2)の列を、エクセルの基本機能の「重複を削除」で処理
ではないかと思います。

まぁ、マクロや関数でも可能ですけれど、上記の方法がわかりやすいのではないでしょうか。
    • good
    • 0
この回答へのお礼

全く仰る通りで、ご回答の一番簡単な方法で対応しようとして、取り合えず実際にこれでリストにしました。

何か簡単なアイディアが有るかと・・・

お手数を桶化しました。

お礼日時:2022/10/14 15:49

(´・ω・`) よくよく考えてみたらオートフィルタで、


 A列で「1」を選択。
 C列で機器「A」を選択。
この順でも良いんじゃないの?
2か所にフィルタを掛けるのです。

その結果をコピーして貼り付けるか、
あらかじめ全体をコピーしたものにフィルターをかけて表示すれば良い。


質問の例では、C列で「A」と「空白」を選んでいるような気がするんですがいかがでしょう。
(「B」と「空白」は表示してほしくないんでしょ?)
「エクセルでフィルタ後の列の重複を回避した」の回答画像3
    • good
    • 0
この回答へのお礼

たびたびのご回答ありがとうございます。

午後一でお礼(補足)したつもりでしたがアップせずに閉じたようなので再度の補足です。(もし重複していたらごめんなさい)

当方も最初はそう思ってA列にCOUNT数を入れてみたのですが、危なくミスリードしそうになったので質問させてもらいました。

例えばご回答の表でABC1は機器Aを使う場合と、使用しないケースがあります。
この表のポイントは最初にHITしてくる製品名が機器列(C列)が空白の場合です。
2回目のフィルターでC列で機器AでフィルターするとABC1が落ちてしまします。

ご回答の図でも機器Aを使用したABC1が12行目にあるのに消えています。
似たような製品名が混在した中から機器A(B・・・・)を使用した製品名の一覧を作成するのが目的です。

最初の質問内容に抜けや誤解を招くような表現があったらご容赦ください。

お礼日時:2022/10/14 16:15

こんにちは



例えば、C列のフィルタで「AまたはB」をかけると、3行目の「ABC2」と8行目の「ABC2」が残りますが、これをC列の値は無視して重複と見做して省きたいということで良いでしょうか?

>重複を避けた一覧表をどこかに表示したいのですが。
別の列に表示するので良ければ、フィルタ操作をせずに関数でも可能です。

365環境であれば、例えば、上記の例とするなら、F2セルに
 =UNIQUE(FILTER(B2:B15,(C2:C15="A")+(C2:C15="B"),""))
を入力すると、F2:F8に以下のようにスピルされます。

ABC2
ABC3
ABC5
ABC4
ABC9
ABC10
ABC1
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
当方Office2019ですが、UNIQUE関数が使えないようです。

また、ご回答の回答例ではB列の重複を回避した結果ではないでしょうか?

当方はC列の機器Aor機器Bの2択ではなくC列にも複数の要因があってこれらでフィルターしたときに表示されるB列の重複削除がしたいのですが。

このお礼の内容が的外れならご容赦!

お礼日時:2022/10/14 08:17

C列に対して先にフィルタを掛ける。


そのあとA列にフィルタを掛ける。

……この手順でOK。

質問者さんのやり方は、A列にフィルタを掛けた後にC列にフィルタを掛けるという、
フィルタの優先順の誤りという事です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘の方法を試してみての質問です。
目的は機器Aを使用した製品一覧です。
よって先にA列でフィルターすると機器が空白のセル(ノイズ)が入ってきます。
よって残念ながら、フィルター順を変えることは目的が変わってしまうことになります。

お礼日時:2022/10/14 07:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!