
エクセルの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によって取得しております。
出来れば後学のために処理の簡単な説明も付けていただけると助かります。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
使い捨てマクロでよくやるけど。
読めばわかると思うけど。
わからないところがあったらさらに聞いていったほうが早いかな。
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
の部分で「アプリケーション定義またはオブジェクトのエラー」が出てしまいます。
No.7
- 回答日時:
#3 です。
>Aのセルの要素が重複しているこのような場合に1つだけを残したい、
読み間違えました。私は、A, B, C をあわせてというようにしてしまいました。#3の回答は、撤回します。改めて書く必要もありません。「フィルタ・オプション」を使った、#6 さんので良かったのでした。

No.6
- 回答日時:
参考です。
本件は、VBAを持ち出す必要は全く無いと思います。
Advanced filter機能だけで済みます。
タイトルのセル「A」を選んで、CtrlShiftを押した状態で、下矢印を
押します。すると、最終行まで選択されます。
次に、メニュの「データ・フィルタ・フィルタオプションの設定」
を選び(エラーが出ても無視)
「重複するレコードは無視」にチェックマークを入れます。
「OK」を押すことで、重複行は、隠されます。
この状態で、全セルを選択して、コピー、新しいシートを選択して、
ペーストしてやれば、完了です。
No.5
- 回答日時:
おお、本当だ。
ごめんなさい。
1行目を
t=2
にしないと駄目ですね。
あのIfのところは、セル(t,1)の値がセル(t-1,1)と同じときは、ってことなんですがtが1だと参照するセルがないのでそういうことになります。基本的なミス。ごめん。
No.4
- 回答日時:
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関数で重複数を表示して、オートフィルタで絞り込んで削除する方がよほど簡単ではないでしょうか
No.3
- 回答日時:
こんにちは。
それは、本当にマクロが必要なのですか?
ちょっと見た限りでは、手動できる範囲ですね。
最初に、1行目を挿入します。
そして、D列にでも、D1 に、何でもよいのですが、仮に「統合」とします。
次に、
D2 の数式は、以下のようなものを作り、
=A2&","&B2&","&C2
D2 をコピーして、1万行まで選択(D2:D10000) として、同じ場所で、貼り付けしてしまいます。
それから、データ-フィル・タオプション
○指定した範囲
□重複するレコードは無視する
抽出範囲は、適当な場所に、セル1つを設定して、
「OK」で、
重複するレコードは削除されます。
後は、抽出したデータを、再び範囲を選択して、
データ-区切り位置-カンマやタブなどの・・・
で、「コンマ」の切り分けをします。
後は、元の場所に上書きすればよいです。
これをいくらマクロにしても、せいぜい、記録マクロ程度にしかならないのです。それ以外の方法もありますが、結局のところ、Rangeオブジェクトを取得しながらですから、1万ものデータになると遅いし、あまり利口ではないような気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで連続データから、数...
-
excelで、スクロールをすると限...
-
エクセルの画面で十字マークが...
-
エクセルでハイパーリンクのU...
-
エクセルで任意のセルをクリッ...
-
セルをクリックすると付箋のよ...
-
エクセル 数値を全て「1」にす...
-
Excel 小さくなったスクロール...
-
ピポットテーブルエラー解決方法
-
フィルタを解除した後の表示位置
-
Excelで表のデータを並び替えた...
-
エクセルで「1~15」の乱数...
-
エクセルの範囲指定
-
<至急>エクセルで「め」のキ...
-
エクセルでカーソルが四方に矢...
-
エクセルで1つおきに列を削除...
-
Excel2003 横に オートフィルって
-
エクセルでウインドウ枠を固定...
-
エクセルVBAでセル範囲のデータ...
-
Excel 表中の、列の一番右側に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで連続データから、数...
-
excelで、スクロールをすると限...
-
エクセルの画面で十字マークが...
-
エクセルで任意のセルをクリッ...
-
Word 表 文字数カウント
-
セルをクリックすると付箋のよ...
-
Excel 小さくなったスクロール...
-
エクセル 数値を全て「1」にす...
-
エクセルでハイパーリンクのU...
-
複数のセルの入力内容を一度に...
-
EXCEL アルファベットと数字の...
-
エクセルでカーソルが四方に矢...
-
エクセル 画面上の行数を調節...
-
excelで1行ごとに一気に削除す...
-
Shift押しながら、矢印ボタンで...
-
フィルタを解除した後の表示位置
-
Excelで表のデータを並び替えた...
-
エクセルの範囲指定
-
Excel選択を繰り返すとセルの色...
-
エクセルで、結合したセルを選...
おすすめ情報