- 締切済み
文字「3M」はexcelで行数多いと重複削除不可
excel vba でRemoveDuplicatesを使用して、重複削除を行っていますが、 次の場合、重複削除ができません。重複削除方法を教えて下さい。 但し、ソートやIF文を使用しない方法をお願いします。 理由は、処理時間が掛からないようにしたいためです。 現象) ワークシートのA列の274行目と11512行目に、「3M」が記載されています。A列は、1行目から11512行目まで値が記載され、その内、重複は、上記の「3M」だけです。 vbaを起動して、重複削除させても「重複した値は見つかりませんでした。」となります。 この文字「3M」以外の文字に置き換えると削除できます。また、「3M」を隣接した行に並べると削除できます。 また、vbaでなく、excelのコマンドの「重複削除」を行っても、同じ現象です。 重複行の間隔がいくつだと削除できないかを調べました。 間が10行以上は削除できませんでした。9行以下は削除できました。 添付画像参照下さい。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
データー重複の削除、はエクセル2007に創設されたようです。 ーー 完全ではないが、追試することができました。 例 A列のセルに、数字の連番を入れておく。その1部を同じ値に変えて Sub 重複削除() Range("A3") = "7g" Range("A38") = "7g" Range("A1").CurrentRegion.RemoveDuplicates Columns:=Array(1), Header:=xlYes MsgBox Range("A38") End Sub でも、A38セルはそのまま(削除されないということ)。 ・他の、文字が最初に来る文字列では削除される。 ・近くのセルの場合 Sub 重複削除2() Range("A3") = "7g" Range("A10") = "7g" Range("A1").CurrentRegion.RemoveDuplicates Columns:=Array(1), Header:=xlYes MsgBox Range("A10") End Sub では削除される。 ーー 原因は小生ごときには判らない。 ーー フィルター詳細設定で、条件は、なし(空白)にして、「重複するレコードは無視する」で(2番目は)消えました。2か所の「7g」の例です。 VBAでも、これに相当するコードはあります(AdvancedFilter)。 「3M」に当たる文字列が、決まっているなら、VBAのRangeのFindで探し 、2つめ以降をセル削除すれる方法がある。
- kkkkkm
- ベストアンサー率66% (1725/2595)
適当な文字に置換してから重複削除したらいかがですか。 Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp)).Replace What:="3M", Replacement:="mm", LookAt:=xlPart Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp)).RemoveDuplicates Columns:=1, Header:=xlNo
お礼
ありがとうございました。 お礼が遅くなりました。 置換する方法、アイデアとして良かったです。 ただ、当方の説明が適切でなかったです。申し訳ありません。 調べてみると、重複削除が不可な文字が必ず決まっているとは限らなかったです。 「imogasi」殿の例「7g」を参考にすると、 最初の文字が数字の場合で2文字目以後が数字でない場合に発生するようです。 数字だけの場合は、重複削除はできました。 貴重な時間を割いて回答頂きありがとうございました。
お礼
ありがとうございました。 お礼が遅くなり申し訳ありませんでした。 マイクロソフトのバグと思われます。修正されることを期待します。 ご指摘頂き、重複削除不可の文字が決まっていないことに気づきました。 ありがとうございました。 ご教示頂いた「フィルター詳細設定」の操作は、理解できていないですが、 他の方法を検討します。 追伸 「よねさんのWordとExcelの小部屋」というところの「Dictionaryを利用する」でできそうと思います。検討します。 ありがとうございました。