[[20171024160602]] 『重複行を削除する』(まらお) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『重複行を削除する』(まらお)

お世話になります
ご教示頂けたら幸いです

Sub A列重複データ削除()

 ActiveSheet.Range("A1").CurrentRegion.RemoveDuplicates Columns:=2, Header:=xlYes
End Sub

A列重複のときは上記で削除できるのですが

これを 例えばB&D&Eが同じ場合上の方にある列を削除したいです

宜しくお願いいたします

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 RemoveDuplicatesではColumns引数で重複をチェックする列を指定できるが一番上のデータを
 残すようになっているようなのでいったんデータ範囲を上下逆にするなどの工夫が必要では。

(ねむねむ) 2017/10/24(火) 16:26


被りましたけど、ま、書いて置きます。

Sub Macro2()
'
' Macro2 Macro
'

'

    Columns("B:D").Select
    Range("B9").Activate
    ActiveSheet.Range("$B$1:$D$23").RemoveDuplicates Columns:=Array(1, 2, 3), _
        Header:=xlNo
End Sub

マクロの記録をしてみたら?
あ、でも、重複を削除の機能を使うと一番上が残るので、
どうにかして逆順に並べないといけないです。
並び替えれるキーとかありますか?
(まっつわん) 2017/10/24(火) 16:29


 よく見ると例では
 ActiveSheet.Range("A1").CurrentRegion.RemoveDuplicates Columns:=2, Header:=xlYes
 とColumns:=2としているということはA列ではなくB列で重複のチェックをしていないか?
(ねむねむ) 2017/10/24(火) 16:31

ねむねむ様 
有難う御座います

まっつわん様
有難う御座います

やっぱり逆にしないといけないのですね
あんまり データそのもをいじりたくないので

諦めます
今後共宜しくお願いいたします
(まらお) 2017/10/24(火) 16:56


あ、でも、重複を削除の機能を使うと一番上が残るので、

違う方法もVBA使うならどうにでもなりますよ?

行番号振っておけば、いつでも元の順番にも戻りますし。。。

エクセルの標準機能と他の機能が作れるのがVBAのいいとこですし。

上から順に見て行って重複があれば削除
ってのも出来なくはないです。
(まっつわん) 2017/10/24(火) 17:10


記録を基に作っていましたが

 .SetRange Range("A3", "AH").Cells(Rows.Count, 1).End(xlUp)
上記部分の書き方でエラーが出てしまいます

どの様にすればいいのでしょうか
ご教授お願いいたします

Sub Macro18()
'
' Macro18 Macro
'

'

    ActiveSheet.Range("A3").Select
     Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("A3"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("A3", "AH").Cells(Rows.Count, 1).End(xlUp)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

   ActiveSheet.Range("A:AH").RemoveDuplicates Columns:=Array(2, 4, 5), Header:=xlYes

    Range("A3").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("A3"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear

    With ActiveWorkbook.ActiveSheet.Sort
         .SetRange Range("A3", "AG").Cells(Rows.Count, 1).End(xlUp)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub
(まらお) 2017/10/24(火) 18:05


そうそう、マクロ化するってことは、
難しい手順やたくさんの手順であっても、
いつも同じように間違わずに自動で行えるのが利点です。
なので最終的に欲しい結果を得られる方法を確立するところから考えてみてください。

マクロの記録で記録される並び替えのコードは長ったらしいので、
古いバージョンのSortメソッドを使って書いてみました。

Sub test()

    With ActiveSheet
        With .Range(.Range("AH3"), .Cells(.Rows.Count, "A").End(xlUp))
            .Sort key1:=.Range("A1"), order1:=xlDescending, Header:=xlYes
            .RemoveDuplicates Columns:=Array(2, 4, 5), Header:=xlYes
            .Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
        End With
    End With
End Sub

Rangeプロパティの括弧の中は、
Range(範囲の左上のセル,範囲の右下のセル)が、基本ですが。
Range(範囲の右上のセル,範囲の左下のセル)でも大丈夫です。

 >Range("A3", "AG").Cells(Rows.Count, 1).End(xlUp)
上だと、
「"AG"」がセル範囲を示す文字列として成立してないのがまず1点
 >Range("A3", "AG:AG")
↑だと一応セル範囲としては成立するが、
結局A列からAG列という意味になって、「A3」と書いた意味がなくなる。
そして、
 >Range("A3", "AG:AG").Cells(Rows.Count, 1).End(xlUp)
となると、
「A列からAG列の範囲のセルで、シートの最大行目の1列目のセルから、
データが見えるセルまで上にジャンプしたセル」
という意味になるので、結局A列の最後のデータのセル1つの意味になります。

よく見かけて真似したかったのは、
Range("A3", "AG" & Cells(Rows.Count, 1).End(xlUp).Row)
こいう事だろうと思います。
Cells(Rows.Count, 1).End(xlUp).Row
で、A列の最終データのセルの「行番号」を取り出して、
それを、
「"AG"」という文字にくっつけて「AG1234」というようなセルを示す文字列を作って、
Rangeプロパティの括弧の中に書き込む。
そういうことだろうかなと想像します。

僕の書き方はちょっと癖があるかも知れませんが、
たくさんの回答者のコードをみて、
いろいろ覚えて、臨機応変に対応できるようになりましょう。

(まっつわん) 2017/10/25(水) 08:20


まっつわん様

有難う御座います

勉強になりました

今後共宜しくおねがいたします
(まらお) 2017/10/25(水) 09:04


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.