[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『重複行を削除する』(まらお)
お世話になります
ご教示頂けたら幸いです
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.