プロが教える店舗&オフィスのセキュリティ対策術

エクセルで重複するデータを非表示にする方法は、[データ]→[フィルタ]→[フィルタオプションの設定]を選択し、[重複するレコードは無視する]にチェックを入れればできますが、デフォルトでは重複行の最初の行だけを表示し、残りの重複行を非表示にしてしまいます。
最初の重複行ではなく最後の重複行だけを残し、他の行を非表示にしたいのですが方法がわかりません。
ちなみに上記の[重複するレコードは無視する]にチェックするまでの流れをマクロに記録させ、マクロの編集をクリックすると下記のような記述になっていました。

Columns("A:A").Select
Range("A1:A100").AdvancedFilter Action:=xlFilterInPlace, Unique:=True

このソースのどの部分を変更すれば、1番最後の重複行だけを残し他の行を非表示にすることが可能になるのか教えてください。
よろしくお願いします。

A 回答 (3件)

フィルタの設定には無いようです



シンプルに

Sub test()
Dim i, ii As Integer
For i = Range("a65536").End(xlUp).Row To 2 Step -1
For ii = i - 1 To 1 Step -1
If Cells(i, 1).Value = Cells(ii, 1).Value Then
Rows(Cells(ii, 1).Row).EntireRow.Hidden = True
End If
Next ii
Next i
End Sub

A列の重複を対象にしています
最終行から比較していく方法です
    • good
    • 0
この回答へのお礼

回答していただきありがとうございました。
最終的にこの方法を参考にした結果、問題を解決することができました。
結構悩んでいましたので助かりました。

お礼日時:2009/02/06 12:45

フィルタオプションの設定のマクロの記録の延長でなく、


別の考えに基づいてコードを作らないとダメでしょう。
ーーーー
1つの方法
行番号順の降順ソートして、重複を非表示とする。
Sub test01()
d = Range("A65536").End(xlUp).Row
MsgBox d
S = "H"
Range(S & 1) = 1
Range(S & "1:" & S & d).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1
Range("A1:" & S & d).Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range(S & 1), Order2:=xlDescending
m = Cells(1, "A")
For i = 2 To d
MsgBox m & " " & Cells(i, "A")
If Cells(i, "A") = m Then
Rows(i).EntireRow.Hidden = True
Else
End If
m = Cells(i, "A")
Next i
End Sub
ーーー
別の考えで(こちらのほうがソートしたり、行番号を作業列に持たないだけ、ベターか)、
自分の行より下行で、自分と同じ値の行の件数が1になったとき(自分が最後を意味する)だけ残す。
Sub test02()
d = Range("A65536").End(xlUp).Row
For i = 1 To d
x = Cells(i, "A")
If Application.WorksheetFunction.CountIf(Range("A" & i & ":A1000"), x) = 1 Then
Else
Rows(i).EntireRow.Hidden = True
End If
Next i
End Sub
上記はデータが1000行までと仮定したコード。A1000を適宜増減のこと。
ーーーー
例データ
A列   B列
a1
a2
a3
f4
d5
d6
s7
結果
a3
f4
d6
s7
    • good
    • 0
この回答へのお礼

回答していただきありがとうございました。
おかげさまで問題が解決しました。

お礼日時:2009/02/06 12:36

ちょっと無理やりになりますが


作業列に
=COUNTIF(A1:$A$100,A1)
として1行から100行まで貼り付け
結果として1のみをフィルターに掛ければお望みの表示に

マクロの修正でできるのかな?
    • good
    • 0
この回答へのお礼

回答していただきありがとうございました。
おかげさまで問題が解決しました。

お礼日時:2009/02/06 12:36

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