• ベストアンサー

Excelのダブりをチェックし、削除するマクロ

ExcelのA列に半角英数字のIDが入っています。 このA列のIDにダブりがあるかどうかをチェックし、 ダブりがあった場合にダブりがなくなるように削除するマクロを作成したのですが どのようにマクロを作成すればよいかわからず手詰まっております。 なお「0001」と「1」は別のIDとして処理をしたいです。 大文字小文字は区別しません。 ※できれば関数にしたいのですが、関数では削除ができないと思いましたので  マクロで実現できればと思っています。 ぜひ教えていただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • kichikuma
  • ベストアンサー率18% (202/1080)
回答No.1

マクロを作成する必要はありません。 https://www.microsoft.com/ja-jp/atlife/tips/archive/office/tips/002.aspx マクロと言うよりはVBAで記述したいならば、単純にA列の値を一つ一つ比較して重複していたらその行を削除すれば良いです。

snin1107
質問者

お礼

まさか標準機能であるとは……目から鱗でした。 非常にためになりました。ありがとうございます!

その他の回答 (2)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

極めて、鈍くさいマクロで申し訳ございません。 1万行ほどのデータで確認しましたが、私のマシンで、2分ほどかかりました。 本来は、「Find()」を使うべきなのでしょうけど、「Find()」を使った場合、例えば「AB1」というのが、何回出てくるか分からず、それを「Do Until f Is Nothing~Loop」や「For Each~Next」で繰り返す方法がうまくゆきませんでした。 以下のマクロは、極めて単純に1個目の文字列を「s」に入れ、それを、2行目から最後まで探す、という単純なものです。 その際、「UCase()」を使って、すべて大文字にしています。 見つかった行を削除し・・・、と、あとはこれの繰り返しですが、行はだんだん減ってゆくわけですから、「s」に何も入らないときが必ずやってきます。 そのときは、「For Next」を抜け出して、終了(「Finished!」というメッセージを出力)します。 Option Explicit Sub Test() Dim i, j, r As Long Dim s As String r = Range("A1").End(xlDown).Row For i = 1 To r - 1 s = Cells(i, 1).Value If s = "" Then Exit For End If For j = i + 1 To r If UCase(s) = UCase(Cells(j, 1).Value) Then Rows(j).Delete End If Next j Next i MsgBox ("Finished!") End Sub

snin1107
質問者

お礼

回答ありがとうございます。 ご教示いただいた手順で稼働が確認できました。 2万行までテストいただいたので、大変恐縮です! 実際には500行ぐらいなので非常に助かります!ありがとうございました!

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

直ぐ関数やマクロが頭にくるらしいが、下記の操作ではどうか。やってみたか。 データー重複の削除ー(列の指定) ーー もし知っているなら、質問にそれをやっても、ここがニーズに合わないなどと注記して 質問したら。 2003以前のバージョンではこの操作はなかったと思う以ので、(フィルタオプションの設定であったかも?)質問にはエクセルのバージョンを書け。 ーー VBAでやるなら (1)デ―タ全行の処理を繰り返す方法 (2)ソート法 (3)特別なエクセルの操作があればそれを使い、マクロの記録を取る。 などがある。 (2)は(A)元データの行に連番を振り、(B)データをソートして(C)ID列を 直前の行と比較して、同じなら行削除(D)元データの連番列でソート(その列も削除) のようなもの。 ーー こういうロジックを自分で考えられるように、日ごろから頭の訓練をしておかないと、仕事などでは、VBAは使えない。1週間も掛けて質問して回答を修正などやってられないだろう。 仕事がらみなら、(文系的な)金額や、数などを扱うものなら、AccessVBAの方が適しているだろう。 エクセル<ー>アクセスのデータ相互移動はやりやすいですから。 また数種の回答の、それぞれの良さも判別する力も必要なはず。

snin1107
質問者

お礼

ご指摘ありがとうございます。 次からはExcelのバージョンなども記載するようにいたします。 頭の訓練を心がけます。

関連するQ&A

  • エクセル関数で文字列の中のスペースの有無を調べたい。

    エクセル関数について教えてください。 全てが半角のはずの文字列・A1セルについて、下記について調べたいです。 1.同列(A列)の他のセルに入力されている文字列とのダブリチェック(同じ文字列がないかの確認)     *ダブリがある場合"ダブリ"表示 2.A1の文字列中のスペースの有無        *スペースがある場合"スペース"表示 3.A1の文字列中に全角が混ざっていないか      *全角がある場合"全角"表示 1.については、 =IF(COUNTIF(A:A,A1)>=2,"ダブリ","") の関数を使用してチェックが出来ると思うのですが、 2.については、関数TRIM 及び 置換での削除方法、3.については、 関数ASC での半角変換 しか手段が見つかりませんでした。 上記のものをマクロを組んでいる中に組み込みたいので、出来れば、上記3つの結果をひとつのセル(C1)に表示させたいのですが、可能でしょうか? *A1セルに上記3つが当てはまる場合、C1セルに "ダブリスペース全角" と表示させたい。 どれについて引っかかっているのかがわかればいいので、記号などに置き換えてもかまいません。 可能な限り調べては見たのですが、私の知識ではどうにもなりませんでした。 もし、いい案などがあればご紹介してください。 宜しくお願いいたします。

  • EXCELの異なるシートにある数字のダブりをチェックしたい

    EXCELのシート1の、列Aに数字が5000個位ありまして、それと同じようにシート2の列Aにも数字が5000個位あります。 シート1とシート2の数字にダブりがあるかどうかを調べたいのです。どのようにしたらよろしいでしょうか?数式の関数などで出来るのでしょうか?

  • excelでマクロが思うように動きません

    EXCELでのマクロを使った文字列検索についてお尋ねします。 EXCEL2003のシートにフォームボタンを設置し、そのボタンに 以下のマクロを設定しています。 ここから--------------------------------------------- Sub 検索() Cells.Select Application.Dialogs(xlDialogFormulaFind).Show End Sub ここまで--------------------------------------------- ボタンをクリックすると、検索ダイヤログが開き、任意の文字列を 検索できるのですが、別シートまで検索してしまいます。 【希望1】検索対象をアクティブシートのみにしたい。 表示される“検索ダイヤログ”では、以下項目が設定可能ですが、 1.検索する文字列 2.検索方向 3.対象 4.大文字と小文字を区別 5.完全に同一なセルだけを検索 6.半角と全角を区別 【希望2】変更可能な以下の項目を固定(変更できないように)したい。 2.は“列”に固定 3.は“値”に固定 4.5.6.はチェックボックスでon/offできるようになっていますが、  全てoffに固定 【希望3】出来れば検索ダイヤログには1.の“検索する文字列”欄と、 “次を検索”ボタン、“閉じる”ボタンの3つだけを表示したい。 このような希望を満たすマクロは作成可能でしょうか? おわかりの方がいらっしゃいましたら、ご教授ください。 よろしくお願い致します。

  • エクセルで左端のスペースを削除したいです。

    こんにちは いつもお世話になっています。 エクセル2003を使っています。 A列に人名の文字列があります。左端に半角のスペース、文字列の中に全角のスペース、右端にスペースはありません。文字の個数は人名のため様々です。 ここで、左端の半角スペースだけを削除したいのです。 Ltrim関数というのが当てはまるのでしょうか。 半角スペースの削除の方法を教えてください。

  • 文字列のエラーチェック

    Javaをはじめて間もないので、基本的なことなのかもしれませんが、回答いただけると嬉しいです。 (1)文字の空白チェック、AllSpace (2)文字列が数字かどうかチェック、convertAllDigit (3)文字列が英字かどうかチェック、AllCharacter (4)英数字の半角処理? convertHalfSize の使い方がいまいちよくわからず困っています。 よいサンプルや例がありましたら教えていただけると助かります。

  • エクセルマクロでの行削除の方法について

    エクセルマクロを使用しての行削除の方法についてお伺いします。 現在業務でエクセルに画像内の文字データを入力しています。 入力データは列ごとに半角全角のきまりがあり、 データが入力された行列以外はすべて削除しそれをCSVで保存という流れになっているのですが、 今のところ関数を入れて半角全角チェックをし、それが済んだあとに、 実際のデータ部分以外の箇所をすべて削除し保存しています。 調べたら半角全角はvbNarrowとvbWideという関数があると知り、 列については、特定位置から始まるのでマクロの記録で対応できています(列項目は予め数が決まっていますので)。 ただ、行については画像にどれだけデータがあるかで開始位置が変わってきます。 ***以下は試したマクロ記録です。*** Rows("9:9").Select→何も知らずに「"9:9"」の所で"開始位置の変数:開始位置の変数"としエラーで迷ってます。 Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp Columns("F:F").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Delete Shift:=xlToLeft 不特定の行から最終行までを選択削除する方法をご存じの方がいましたらご教授お願いいたします。 上記のマクロ使用環境はExcel2003です。

  • エクセルでのマクロ

    A列とB列のデータで重複するものをチェックするマクロを組むには どういう式を作成すればいいでしょうか? 具体的なマクロをよろしくお願い致します。

  • マクロで自動チェックをしたい

    EXCELで業務上、表を作成します。チェックを目検でしているのですが、マクロでできないものかと思い投稿しました。 (1)特定の列の数字がすべて小数点1桁であること。 (2)特定の文字列が右寄せになっていること。 (3)フォントサイズが11であること。 (4)指定範囲に縦罫線・横罫線がすべてに引けていること (5)指定範囲内のセルで「###」となって文字が表示されていない箇所があるか。 このようなことを、マクロを作ってチェックができないものかと考えています。 ただ、マクロを作成するスキルがないので、サンプルマクロを教えていただけるとありがたいです。 よろしくお願いします。

  • エクセルのマクロで文字の置換について

    エクセルのマクロを使った文字の置換についてお聞きしたことがありましす。 やりたいイメージは例として添付の画像としてアップしましたが、 ・エクセルシートに英数文字列の表がある(例では2行2列ですが、実際は6行48列ぐらいです) ・その表を各英数文字列の間に半角カンマ","を入れて、メモ帳に貼り付けたい   ※実際メモ帳に貼り付ける動作は手動で行うので、クリップボード上で「各英数文字列    の間に半角カンマ","が入っている状態」で構いません。 ・各英数文字列の最初の2文字は必ず"0a"、その後の英数字は3桁または4桁です。 ちなみに、エクセルシートで英数文字列の表をそのままコピーしてメモ帳でペーストすると 各英数文字列の間にスペース(空白)が入ってしまいます。 その後、メモ帳で置換などを使い半角カンマ","を入れてもいいのですが、そこまでをマクロで行いたいと思っております。 上記のことがそもそもエクセルのマクロで出来るかどか分かりませんが、なにか有用な方法がございましたらご教授お願い致します。  ※使用OS:Windows7、エクセルバージョン:2007

  • マクロで半角・全角スペースと改行を削除したい

    マクロ初心者です。 BookA-sheetAの「F1:F40」に入っている文字列左右(前後)の半角・全角スペースと、 改行コードを削除したいのですが、書いてみたマクロはエラーが出てしまいます。 trim関数と、改行コード削除はどう組み合わせればよいのでしょうか? 初心者で申し訳ないのですが、ご教示いただければ幸いです。

専門家に質問してみよう