dポイントプレゼントキャンペーン実施中!

エクセルのVBAで質問です。
以下のような表で、

  A B C
1 赤 10 ×
2 青 20 ○
3 青 20 ○
4 黄 30 ×
5 緑 10 ○
6 紫 15 △
7 紫 15 △
8 紫 15 △
Aのセルの要素が重複しているこのような場合に1つだけを残したい、
つまり3行目と7.8行目を削除したいのです。
(実際の列数は10、行数は1万程度あります)
このような場合、どのようなマクロを組めばいいでしょうか?
なお、最終行の場所は
lngMaxRow = Cells.SpecialCells(xlLastCell).Rowによって取得しております。

出来れば後学のために処理の簡単な説明も付けていただけると助かります。
宜しくお願いします。

A 回答 (7件)

使い捨てマクロでよくやるけど。


読めばわかると思うけど。
わからないところがあったらさらに聞いていったほうが早いかな。

t = 1
Do Until t = IngMaxRow
If Cells(t, 1) = Cells(t-1,1) Then
Rows(t).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
t = t - 1
End If
t = t + 1
Loop

この回答への補足

回答ありがとうございます。
すみません、
If Cells(t, 1) = Cells(t-1,1) Then
の部分で「アプリケーション定義またはオブジェクトのエラー」が出てしまいます。

補足日時:2007/01/31 15:16
    • good
    • 0

#3 です。



>Aのセルの要素が重複しているこのような場合に1つだけを残したい、

読み間違えました。私は、A, B, C をあわせてというようにしてしまいました。#3の回答は、撤回します。改めて書く必要もありません。「フィルタ・オプション」を使った、#6 さんので良かったのでした。
    • good
    • 0

参考です。


本件は、VBAを持ち出す必要は全く無いと思います。
Advanced filter機能だけで済みます。
タイトルのセル「A」を選んで、CtrlShiftを押した状態で、下矢印を
押します。すると、最終行まで選択されます。
次に、メニュの「データ・フィルタ・フィルタオプションの設定」
を選び(エラーが出ても無視)
「重複するレコードは無視」にチェックマークを入れます。
「OK」を押すことで、重複行は、隠されます。
この状態で、全セルを選択して、コピー、新しいシートを選択して、
ペーストしてやれば、完了です。
    • good
    • 0
この回答へのお礼

すみません、VBAの形で必要だったのです。
回答してくださったみなさんありがとうございました。

お礼日時:2007/02/01 09:08

おお、本当だ。


ごめんなさい。
1行目を
t=2
にしないと駄目ですね。

あのIfのところは、セル(t,1)の値がセル(t-1,1)と同じときは、ってことなんですがtが1だと参照するセルがないのでそういうことになります。基本的なミス。ごめん。
    • good
    • 0

Sub Macro2()


Dim idx As Long
 For idx = Range("A65536").End(xlUp).Row To 1 Step -1
  If Application.CountIf(Range(Range("A1"), _
    Range("A65536").End(xlUp)), Cells(idx, 1)) > 1 Then
   Cells(idx, 1).EntireRow.Delete '行削除
  End If
 Next idx
End Sub

最終行から上に向かって、COUNTIF関数でA列に同じ値があるか調べて結果が1より大きければ重複です。簡単にするならCOOUNTIF関数の記述は
 CountIf(Range("A1:A10000",Cells(idx,1)))
にしてもよいです。

でもシート上にCOUNTIF関数で重複数を表示して、オートフィルタで絞り込んで削除する方がよほど簡単ではないでしょうか
    • good
    • 0

こんにちは。



それは、本当にマクロが必要なのですか?

ちょっと見た限りでは、手動できる範囲ですね。

最初に、1行目を挿入します。

そして、D列にでも、D1 に、何でもよいのですが、仮に「統合」とします。

次に、
D2 の数式は、以下のようなものを作り、

=A2&","&B2&","&C2

D2 をコピーして、1万行まで選択(D2:D10000) として、同じ場所で、貼り付けしてしまいます。

それから、データ-フィル・タオプション

○指定した範囲
□重複するレコードは無視する

抽出範囲は、適当な場所に、セル1つを設定して、

「OK」で、

重複するレコードは削除されます。

後は、抽出したデータを、再び範囲を選択して、

データ-区切り位置-カンマやタブなどの・・・
で、「コンマ」の切り分けをします。
後は、元の場所に上書きすればよいです。

これをいくらマクロにしても、せいぜい、記録マクロ程度にしかならないのです。それ以外の方法もありますが、結局のところ、Rangeオブジェクトを取得しながらですから、1万ものデータになると遅いし、あまり利口ではないような気がします。
    • good
    • 1

ここを参考に作成してみては?


http://www.officetanaka.net/excel/vba/tips/tips1 …
    • good
    • 0

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