こんにちは、Ryoです。
以前の記事で重複データの削除について書きましたが、削除せずにデータは残したまま非表示にしたいケースもあるかと思います。VBAで処理する場合はAdvanceFilterメソッドを使うことで実行できますので、今回はその内容について書いていきます。
1.サンプル概要
以下画像の様な表があり「品番」が重複していますので、その重複行に対して処理を実行し非表示にします。(画像内黄色部)
≪実行前≫
≪実行後≫
このように非表示化されます。
2.サンプルコード
◆非表示化
Sub Sample1() Range(Cells(1, 1), Cells(9, 1)).AdvancedFilter _ Action:=xlFilterInPlace, Unique:=True End Sub
重複行を非表示化するにはAdvancedFilterメソッドを使用します。
AdvancedFilter(Action,CriteriaRange,CopyToRange,Unique)
構文としてはこのようになりますが、今回のサンプルで使用しているのは引数Actionと引数Uniqueを使いますのでCriteriaRangeとCopyToRangeは省略します。
Range(Cells(1, 1), Cells(9, 1)).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
まず「品番」のA列に対して重複行を抽出しますので、Rangeで範囲を指定しAdvancedFilterの引数ActionにxlFilterInPlaceを指定することでA列のデータをフィルタして表示します。
その上で引数UniqueにTrueを指定することで、重複データが非表示となります。
◆非表示の解除
Sub Sample2() Range(Cells(1, 1), Cells(9, 1)).AdvancedFilter _ Action:=xlFilterInPlace, Unique:=False End Sub
非表示状態を解除する場合ですが、Sheet上で対象行を選択して「再表示」をしても、フィルターなので当然解除出来ません。手動操作で実施する場合は「データ」タブの「クリア」でOKです。
VBAで実行する場合は上述の様にSample1のサンプルコードで指定したUniqueをFalse指定すれば非表示状態は解除されます。
または前述の手動操作クリアに相当する以下記述でもOKです。
Sub Sample3() ActiveSheet.ShowAllData End Sub
3.まとめ
本サンプルでは「品番」のA列に対してのみ実行していますが、表全体を範囲指定して実行しても結果は同じです。行全体を対象として非表示にしますから当然ですけどね(笑)
書いていて思いましたが、重複行を削除するよりも一時的に非表示にする方が利用頻度高いかもしれませんね。
記述自体はサンプル通り簡単ですから、知っておくと便利なものだと思いますので機会があれば活用をご検討くださいませ!
以上、重複した行を非表示にする方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo