[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『重複していたら全部削除』(そら)
エクセル初心者です。 重複しているデータのひとつを削除する方法はわかったのですが 重複していたら両方とも削除する方法がわからなかったのでお願いします。
例) 1 山田 ●● 2 安達 ●× 3 鈴木 ×● 4 鈴木 ×● 5 山田 ●×
3鈴木 ×● と 4鈴木 ×●
は完全に同じなので両方削除する方法をお願いします 1 山田 ●● 2 安達 ●× 3 山田 ●×
改行の仕方がわからず・・・ 一列に表示されていますが、 1は1行目 2は2行目ですm(_ _)m
たとえば 山田 と 最初の ● と 次の ● はそれぞれ 別のセルにはいってるのかな?
(ちょっと、整形しておいた)
(ぶらっと)
ちなみに >重複しているデータのひとつを削除する方法はわかったのですが これは、どんな方法ですか?
また、エクセルのバージョンは何ですか?
(HANA)
A B
1山田 ●● です
名前(山田)で1列 ●●で1列です。
HANAさん
重複を削除と言うか表示しない方法です。
フィルターのオプションで「重複レコードは無視する」ってのです。
エクセルのバージョンは2000と2003です。
よろしくお願いします。
(そら)
一例。
Sub 非表示() Dim dic As Object Dim c As Range Dim dkey As Variant
Set dic = CreateObject("Scripting.Dictionary") For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp)) dkey = c.Value & vbTab & c.Offset(, 1).Value If Not dic.exists(dkey) Then Set dic(dkey) = c Else Set dic(dkey) = Union(dic(dkey), c) End If Next
For Each dkey In dic If dic(dkey).Count > 1 Then dic(dkey).EntireRow.Hidden = True End If Next
dic.RemoveAll 'Dictionary内のオブジェクト消滅 Set dic = Nothing
End Sub
Sub 再表示() Rows.Hidden = False End Sub
(ぶらっと)
上のコードは、現行がフィルターオプションということを踏まえ、対象行を非表示にしているけど 「削除」が希望なら以下。
Sub 削除() Dim dic As Object Dim c As Range Dim dkey As Variant
Set dic = CreateObject("Scripting.Dictionary") For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp)) dkey = c.Value & vbTab & c.Offset(, 1).Value If Not dic.exists(dkey) Then Set dic(dkey) = c Else Set dic(dkey) = Union(dic(dkey), c) End If Next
For Each dkey In dic If dic(dkey).Count > 1 Then dic(dkey).EntireRow.Delete End If Next
dic.RemoveAll 'Dictionary内のオブジェクト消滅 Set dic = Nothing
End Sub
(ぶらっと@連投)
フィルタオプションの設定を使用する方法です。 [A] [B] [C] [D] [E] [F] [G] [1] 名字 名前 [2] 山田 ●● TRUE [3] 安達 ●× [4] 鈴木 ×● [5] 鈴木 ×● [6] 山田 ●× [7]
D2セルに =SUMPRODUCT(($A$1:$A$100=A2)*($B$1:$B$100=B2))=1 の数式をいれておきます。 データ数が100行を超える場合は数式を適宜変更してください。
フィルタオプションの設定で
抽出先 ○選択範囲内(F) ●指定した範囲(O) リスト範囲(L) [ A:B ] 検索条件範囲(C) [ D1:D2 ] 抽出範囲(T) [ F1 ] □重複するレコードは無視する(R) [ OK ]
を指定すると、F:G列に重複が除かれて抽出されます。 [A] [B] ・・・・ [F] [G] [1] 名字 名前 名字 名前 [2] 山田 ●● 山田 ●● [3] 安達 ●× 安達 ●× [4] 鈴木 ×● 山田 ●× [5] 鈴木 ×● [6] 山田 ●× [7]
(HANA)
ひゃぁ〜、すごい。 フィルターオプションでこんな条件をいれることができたんですなぁ。いや、眼福、眼福。 今後、VBA処理をする場合に、このケースがでてきたら、VBA内で使わせてもらいます!!
追伸)ということは、このSUMPRODUCTをコアにして、TRUEのものを上から詰めて表示していく関数(きっと、すごく長い、40cm?ぐらいの関数) を記述すればフィルターオプションなしで、抽出できる予感。 もちろん私には手に負えない代物ですが。でも、みてみたいなぁ。
(ぶらっと)
ぶらっとさん
HANAさん
とってもわかりやすく説明していただき
ありがとうございました!!
出来ましたm(_ _)m
ちなみに・・・
ぶらっとさんの式はどこに入れるのでしょうか??
初歩的な質問ですみませんm(_ _)m
(そら)
>ぶらっとさんの式はどこに入れるのでしょうか??
私の「式」は、忘れてください。(HANA)さんが提示された操作で処理しましょう。
ちなみに、以下は「余談」なのでスルーしてもらってOK。
提示したものは「式」ではなく、一般には「マクロ」と呼ばれているもの。 本当は、厳密な言葉としては「マクロ」ではないんだけど、エクセル上も、Excel4時代(および、それ以前の)の「マクロ」という言葉を 継承しているし、皆さんも、「マクロ、マクロ」と言いなれているね。
で、エクセルで、このブックが立ち上がっている状態で ・Alt/F11 こうすると、見たことがない画面(VBE画面)がでてくると思う。 ・ここで、メニューの挿入から標準モジュールを選ぶと、真っ白なスペースが表示されるので そこに、アップした「式」を全てコピペ。 ・右上の「Xボタン」をおしてブックに戻る。 ・ブック側のメニューの、ツール->マクロ->マクロを選択すると、小さなアダイアログがでる。 ・そこに、コピペしたものの「マクロ」の名前(非表示や再表示や削除)がでてくるので たとえば非表示を選んで実行ボタンをおす。
(ぶらっと)
>追伸)ということは〜〜 どうなんでしょうね?SUMPRODUCT関数を絡めるのは難しいのでは?
たとえば、INDEX(MATCH($A$2:$A$6&"_"&$B$2:$B$6,$A$2:$A$6&"_"&$B$2:$B$6,0),)こんなのは {1,2,3,3,5}が得られるので、重複していない番号の行が取り出せれば良さそうに思います。
でもこう言うのは、作業列を使う方が賢いと思います。 私はVLOOKUP関数が好きなので、それをからめつつ 単純な数式でやるなら [A] [B] [C] [D] [E] [F] [G] [H] [1] 番号 氏名 氏 名 番号 氏 名 [2] 1 山田_●● 山田 ●● 1 山田 ●● [3] 2 安達_●× 安達 ●× 2 安達 ●× [4] 鈴木_×● 鈴木 ×● 3 山田 ●× [5] 鈴木_×● 鈴木 ×● [6] 3 山田_●× 山田 ●× [7] [8] A2=IF(COUNTIF(B:B,B2)=1,COUNT($A$1:A1)+1,"") B2=IF(C2="","",C2&"_"&D2) F2=IF(COUNTIF(A:A,ROW(A1)),ROW(A1),"") G2=IF($F2="","",VLOOKUP($F2,$A:$D,COLUMN(C1),FALSE))
(HANA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.