質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

6129閲覧

複数データを比較し、同じものがあったら削除する。マクロ

tattakahiiii

総合スコア27

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/09/13 23:16

編集2018/09/13 23:22

VBA

1Sub serach_delete 2 3Dim i as integer 4Dim j as Integer 5 6For i 1 to Cells(Rows.Count, 1).End(xlUp).Row 7For j 2 to Cells(Rows.Count, 1).End(xlUp).Row 8 9If Cells(i, 4).Value = Cells(j, 4).Value Then 10Rows(j).delete 11 12End If 13 14next j 15next i 16 17End Sub

1(i)行目と2(j)行目のセルを比較し、同じ内容であれば、
jの行を削除する。削除し終わったら、1(i)行目と3(j)行目を比較。データの内容が異なっていればスルー・・・といったマクロを組みたいと思っております。

私が作成したマクロを実行すると、削除しなくてもいいデータが削除されてしまいます。どなたか原因が分かる方、もしくは、他に良いやり方があれば、ご教示頂ければと思います。

以上、宜しくお願い致します。


数字と漢字と空白が混じったデータとなっております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

  1. iのループの終わりが1つ余計。
  2. jのループが2から固定になっている。
  3. 削除したあとjのカウンタが進んでしまうので一行飛ばしてしまう。

上記3点が問題でしょうか。

VBA

1Sub serach_delete() 2 3 Dim i As Integer 4 Dim j As Integer 5 6 'For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 7 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row - 1 '(1) 8 'For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row 9 For j = i + 1 To Cells(Rows.Count, 1).End(xlUp).Row '(2) 10 11 If Cells(i, 4).Value = Cells(j, 4).Value Then 12 Rows(j).Delete 13 j = j - 1 '(3) 14 End If 15 16 Next j 17 Next i 18 19End Sub

投稿2018/09/14 00:26

編集2018/09/14 00:46
ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ExcelVBAer

2018/09/14 00:39

よくあるケースですが、 行単位で削除する場合、最終行から上へ回さないと、 j の本来の位置がずれるので、正しく処理できないケースが出てきますね。
ttyp03

2018/09/14 00:47

jがずれる件、指摘が漏れてたので追記しておきました。 本来なら下から回したいですよね。
ExcelVBAer

2018/09/14 00:51

本来、ということであれば、 行単位でクリアして、 キーとなる列でソートをかける事が多いですね。 位置ズレのバグが起きにくいですし、 処理時間も早くなりますよ~ (行削除はデータ量が多いと時間がかかるので。。。)
ttyp03

2018/09/14 00:56

データ量にもよりますが、本気でやるなら画面描画も無効にしたり、色々ありますね。
tattakahiiii

2018/09/14 04:51

解決致しました。ありがとうございました!
guest

0

重複削除をする機能は、不具合があるので使わない方がいいみたいです。
修正パッチ等で、もう直っていればいいと思いますが、
確認しにくいので、マクロや数式で対応する方が無難ですね。

こういうケースでよく使うのは、
Scripting.Dictionary です。

Dictionary の Exists,Add を使えば簡単です。
詳細はご自分で調べてください。

投稿2018/09/14 00:25

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_george

2018/09/14 02:12

重複削除に不具合があるんですか? 情報に疎いせいなのか初めて聞きました。 どんな不具合が挙がっているんですか?
ExcelVBAer

2018/09/14 02:29

エクセル 重複削除 不具合 で検索してみてください。
s_george

2018/09/14 02:33

検索して1ページ目だけ見ましたが、不具合らしい報告は見つけれませんでした。 もっと深く見ないと出てきませんか?
ExcelVBAer

2018/09/14 02:55

こちらではChromeの検索結果の1ページ目に10個ある中、5つが該当しています。 がんばってください。
s_george

2018/09/14 04:30

もしかして空白スペースがあると削除できないってのを不具合だとおっしゃってますか? もしそうであるならば果たして不具合と言うべきなのでしょうか?
guest

0

重複削除をする機能はバージョンにもよりますがExcelの機能を探せばあったりしますよ

投稿2018/09/13 23:57

編集2018/09/14 00:40
n_takapyon

総合スコア443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

n_takapyon

2018/09/14 00:39

あっ。。。ケアレスミス失礼しました。 動きを正しく認識してませんでした。 解答を編集しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問