
エクセルの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で質問しましょう!
似たような質問が見つかりました
- Windows 7 エクセルで重複データから抽出したい 2 2022/05/18 23:31
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで連続データから、数...
-
excelで、スクロールをすると限...
-
エクセルの画面で十字マークが...
-
EXCEL アルファベットと数字の...
-
Excel 小さくなったスクロール...
-
複数のセルの入力内容を一度に...
-
セルをクリックすると付箋のよ...
-
エクセル 画面上の行数を調節...
-
エクセルで任意のセルをクリッ...
-
excelで1行ごとに一気に削除す...
-
エクセルVBAリストボックスに表...
-
ピポットテーブルエラー解決方法
-
エクセルでハイパーリンクのU...
-
Excel選択を繰り返すとセルの色...
-
エクセル 数値を全て「1」にす...
-
セルを斜めに選択してカットする
-
Excelで表のデータを並び替えた...
-
余計なお世話的な「入力規則」...
-
エクセルで、結合したセルを選...
-
組み合わせパターンについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelで、スクロールをすると限...
-
エクセルで連続データから、数...
-
EXCEL アルファベットと数字の...
-
複数のセルの入力内容を一度に...
-
エクセルの画面で十字マークが...
-
Excel 小さくなったスクロール...
-
セルをクリックすると付箋のよ...
-
エクセル 画面上の行数を調節...
-
エクセル 数値を全て「1」にす...
-
エクセルでハイパーリンクのU...
-
excelで1行ごとに一気に削除す...
-
エクセルで、結合したセルを選...
-
Excelで表のデータを並び替えた...
-
エクセルで任意のセルをクリッ...
-
エクセルVBA 複数行にまたがっ...
-
エクセルでカーソルが四方に矢...
-
エクセルで0を除いて昇順に並...
-
Excel選択を繰り返すとセルの色...
-
ピポットテーブルエラー解決方法
-
エクセルで1つおきに列を削除...
おすすめ情報