• ベストアンサー

Excelで重複行を非表示にする方法(重複行の最後の行だけ表示させる方法)について教えてください。

エクセルで重複するデータを非表示にする方法は、[データ]→[フィルタ]→[フィルタオプションの設定]を選択し、[重複するレコードは無視する]にチェックを入れればできますが、デフォルトでは重複行の最初の行だけを表示し、残りの重複行を非表示にしてしまいます。 最初の重複行ではなく最後の重複行だけを残し、他の行を非表示にしたいのですが方法がわかりません。 ちなみに上記の[重複するレコードは無視する]にチェックするまでの流れをマクロに記録させ、マクロの編集をクリックすると下記のような記述になっていました。 Columns("A:A").Select Range("A1:A100").AdvancedFilter Action:=xlFilterInPlace, Unique:=True このソースのどの部分を変更すれば、1番最後の重複行だけを残し他の行を非表示にすることが可能になるのか教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.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列の重複を対象にしています 最終行から比較していく方法です

neodada
質問者

お礼

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

フィルタオプションの設定のマクロの記録の延長でなく、 別の考えに基づいてコードを作らないとダメでしょう。 ーーーー 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列 a 1 a 2 a 3 f 4 d 5 d 6 s 7 結果 a 3 f 4 d 6 s 7

neodada
質問者

お礼

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

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

ちょっと無理やりになりますが 作業列に =COUNTIF(A1:$A$100,A1) として1行から100行まで貼り付け 結果として1のみをフィルターに掛ければお望みの表示に マクロの修正でできるのかな?

neodada
質問者

お礼

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

関連するQ&A