• ベストアンサー

エクセル 同じ文字を自動消去

エクセルのメールアドレス一覧表があるのですが 同じメールアドレスが複数がある時、一つづつ消すのは 時間がかかり大変です。自動検索して自動消去する方法はないでしょうか?

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

  • ベストアンサー
回答No.10

こんばんわ。まだ、解決していないみたいですね。 ちょっと面倒かもしれませんが、A1に適当な文字(アルファベットでも数字でも何でもよい)を1文字入れてエンターキーを押した時に行が削除できるようにマクロを組んでみました。1行目は、空白行として下さい。次のように操作します。 1.データの入力されているブックを開き、ALT+F11キーを押してVBE画面を表示する。 2.画面左上にあるVBEProjectと書いてある下のSheet1をダブルクリックし、右側の白い部分に下記のコードをコピー・ペーストする。 3.再びALT+F11キーを押してエクセルの画面にもどる 4.A1に適当な文字を1文字入力するとマクロが動作する。 このマクロはA1とA2が同じ・B1とB2が同じ・C1とC2が同じであった時、2行目のデータを削除するようにしてあります。 もし、うまく動作しなかった場合には、VBAProjectの下にブックに挿入されているシートの枚数文(例えばシートが3枚あったとしたらShet1・Sheet2・Sheet3)コードエディタがあります。Sheet2・Sheet3もそれぞれダブルクリックしてそれぞれのコードエディタに同じようにコードを貼り付けて実行してみて下さい。こちらでは確認済みなので多分今度は動作すると思います。 お手数をおかけいたしますが、よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRow As Integer Dim i As Integer Dim j As Integer Dim k As Integer Dim myCnt As Integer If Target.Address = "$A$1" Then Application.EnableEvents = False myRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To myRow - 1 If Cells(i, 1).Value <> "" Then For j = i + 1 To myRow For k = 1 To 3 If Cells(i, k).Value = Cells(j, k).Value Then myCnt = myCnt + 1 If myCnt = 3 Then Rows(j & ":" & j).ClearContents End If End If Next k myCnt = 0 Next j End If Next i Do myRow = Cells(Rows.Count, 1).End(xlUp).Row If Cells(myRow, 1).End(xlUp).Row = 1 Then Exit Do For i = 2 To myRow If Cells(i, 1).Value = "" Then Rows(i & ":" & i).Delete Next i Loop Application.EnableEvents = True End If End Sub 前回アクセスキーを使ってマクロを実行させようとしましたが、うまく動かなかったので、コマンドボタンで実行させる方法もご紹介しておきます。この方法を実行するには、次のように操作して下さい。 1.データが入力されているシートを開く。 2.メニューバーにマウスポインターを合わせて右クリック 3.出てきたプルダウンメニューのVisualBasicをクリック 4.出てきたツールバーのかなづちとスパナのマーク(コントロールツールボックス)をクリック 5.出てきたツールバーの一番右端の上から2番目(コマンドボタン)をクリックし、配置したい位置にマウスポインターを合わせクリックする。 6.配置されたコマンドボタンをダブルクリックするとVBE画面になり、コードエディターに自動的に Private Sub CommandButton1_Click()   ここに下のコードをコピー・ペーストする。 End Sub と表示される。 Dim myRow As Integer Dim i As Integer Dim j As Integer Dim k As Integer Dim myCnt As Integer myRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To myRow - 1 If Cells(i, 1).Value <> "" Then For j = i + 1 To myRow For k = 1 To 3 If Cells(i, k).Value = Cells(j, k).Value Then myCnt = myCnt + 1 If myCnt = 3 Then Rows(j & ":" & j).ClearContents End If End If Next k myCnt = 0 Next j End If Next i Do myRow = Cells(Rows.Count, 1).End(xlUp).Row If Cells(myRow, 1).End(xlUp).Row = 1 Then Exit Do For i = 2 To myRow If Cells(i, 1).Value = "" Then Rows(i & ":" & i).Delete Next i Loop もし、変更点・ご不明な点がございましたらご遠慮なくお知らせ下さい。

jones0901
質問者

補足

本当にありがとうございます 試してみます また結果報告しますので その時はどうぞよろしくお願い致します

その他の回答 (9)

回答No.9

もう1つ質問です。 今現在、どのような事をしているのでしょうか? 例えば、A1セルに手入力で、アドレスを入力しているとすれば、 A1セルに入力後、直ぐに(マクロを実行する為のボタンなどを押さないで) 行を削除するマクロを作る事も出来ます。 もう少し今現在、行っている様子がわかると、A1,B1,C1と入力しないでも A1のみで、処理することも可能かと思いますので、少し細かい所を教えて頂ければと思います。

回答No.8

#5の補足について もう少し具体的に教えて頂けますか? 1行目(A1,B1,C1・・・)に入力したアドレスをA2~A?までを検索し、重複した行を削除する ということでよろしいのでしょうか?

回答No.7

こんばんわ。マクロダイアログボックスは表示されたとのことですが、そのボックスの右下にあるオプションボタンをクリックしてカーソルが点滅しているところに半角小文字でeと入力してOKボタンをクリックして×ボタンでダイアログボックスを閉じていますよね。それからCTRL+eを押すと砂時計が出てきて画面の変化がないということでよろしいのでしょうか。 あなた様はEと大文字でかかれていますが、大文字で入力してしまったということはないですか。もし大文字で入力してしまったのであれば、ctrl+Shift+eキーを同時に押すと動くと思います。 これで動かなかった時は、再度お知らせ下さい。 お手数をおかけいたしますが、よろしくお願いいたします。

jones0901
質問者

補足

返事遅れてすいません。私の説明、誤解不足でよく 見てみるとアドレスはA1,A2,A3,A4,A5・・・・のように 並んでいました。ひょっとしてこれが原因でしょうか? 大変失礼致しました

回答No.6

こんばんわ。ワードでは動かないと思います。エクセルで再度実行してみてください。 この時の確認なのですが、ALT+F8キーを押した時にマクロダイアログボックスが表示されますでしょうか。 私はエクセル97を使ったことがないので、もしかしたらダイアログボックスが表示されないかもしれません。ダイアログボックスが表示されない場合は、お知らせ下さい。別の操作方法をご紹介したいと思います。 お手数をおかけいたしますが、よろしくお願いいたします。

jones0901
質問者

補足

はい 問題なくマクロダイアログボックスが表示されました 

回答No.5

#4さんへ ちょっとマクロを見て思った事を2点あげさせてください。 (1)メールアドレスの重複チェックは、A1セルのみ対象でよいのでしょうか?    これは、質問者への補足質問になるのかな? (2)このマクロだと、同じメールアドレスが2行並んでいると片方しか削除されないとおもいます。    そのような状況が無ければ問題はないでしょうけど。

jones0901
質問者

補足

お忙しい所すみません マクロを作っていただく事は可能でしょうか? A1セルのみ対象ではなくA1,B1,C1,,,,を対象にしたいのですが。。。可能でしょうか?

回答No.4

早速補足いただきまして有難うございます。サンプルマクロを作ってみました。下記のように操作してみて下さい。 1.データの入力されているブックを開き、ALT+F11キーを押してVBE画面を表示する。 2.画面左上にあるVBEProjectと書いてある下のSheet1をダブルクリックし、右側の白い部分に下記のコードをコピー・ペーストする。 3.再びALT+F11キーを押してエクセルの画面にもどる 4.ALT+F8キーを押してマクロダイアログボックスを表示させ、右のオプションをクリックして、カーソルが点滅しているところに小文字でeと入力し、OKボタンをクリックする。その後×ボタンでマクロダイアログボックスを閉じる。 CTR+eを押してみてください。マクロが実行されて削除されているのがお解りいただけると思います。 Sub Test1() Dim myRange As Range For Each myRange In Range("A2:" & Cells(Rows.Count, 1).End(xlUp).Address) If myRange.Value = Range("A1").Value Then myRange.EntireRow.Delete shift:=xlShiftUp End If Next End Sub もし、不都合なことがありましたらご遠慮なくお知らせ下さい。

jones0901
質問者

補足

ありがとうございます そっそく試してみましたが、CTR+Eを押すと砂時計がでて 何か処理をしようとしているのですが、何も変化がありません WORD97が原因なんでしょうか?

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

(1)関数式で、自分や他行を削除することは出来ないと思います。((3)のようにソートを使う一部に関数式を 使うのは別として) (2)ダブっている行を色づけし、削除する手間と正確性を 図ることは出来ます。 A.ダブリを考えている列(仮にA列とする)の最下行まで範囲を指定。 B.書式-条件付き書式-左のボックスで▼をクリックして「数式が」を出す。右のボックスに=countif(a:a,a1)>1と入力 する。 C.「書式」をクリック。 D.「パターン」タブをクリック。色を選ぶ。OKクリック。 E.ダブった行は、色がつくから上から、行削除していく。   削除でダブりが解消されると1つ残った行の色が消える。 (3)別法 ソートしても良いならA列でソートする。B列に列挿入する。 A1はデータなしとする。B2に関数式=IF(A2=A1,"",A2)をいれる。B列最下行まで複写。B列にB列を値複写。B列でソートする。上部のB列の空白部を範囲指定して、行削除する。 アドレスとして働かなくする必要があれば、働かないようにしてから上記を行ってください。

  • mneko
  • ベストアンサー率33% (46/139)
回答No.2

メニューバーの「データ」->「フィルタ」->オートフィルで メールアドレスの項目で(列)重複データ(特定の)を選択して その重複データだけを表示させて行削除そすれば良いと思います。

回答No.1

はじめまして。 マクロを書けば簡単にできると思います。 もしご希望でしたらサンプルマクロを作ってみたいと思いますので次のことをお知らせ下さい。 1.メールアドレスが入っているセル番地とシートの名前(Sheet1,Sheet2等シートタブについている名前) お手数をおかけいたします。よろしくお願いいたします。

jones0901
質問者

補足

本当に助かります ぜひお願い致します セル番地はA1 シートは1です ちなみに環境はエクセル97です

関連するQ&A

  • 検索する時、今まで入力してきた文字やメールアドレスが出るのを消去する方法を教えてください。

    インターネットで検索する文字やメールアドレスを入れるとき、今まで使ってきた検索する文字やメールアドレスが、検索する文字やメールアドレスを入れる時に下に、沢山出るようになりますけれど、それを消去する方法を教えてください。すべて、いったんすべてを消去して新しくまた使える方法が解かればありがたいのですが、 検索する文字やメールアドレスを入れるときに、今まで使った事がある文字やメールアドレスが、下に自動的に出るのを無くす方法を教えてください。

  • エクセル操作点線消去

    アドバイスお願いします。 エクセルで一覧表を作ったとき、画面の右側の列に点線が表示され、 プリントした時に、点線の右側の表が写りません。 もし点線が原因であれば、点線の消去の方法を教えてください。 PCはXPです。 よろしくお願いします。

  • エクセルについて

    メールアドレスをエクセルで作ったような時(CSV形式でエクスポートしたような時)、そのメールアドレスの表をプロバイダー別にまとめるようなことは、エクセルで出来ますでしょうか?検索をつかうとひとつづつ取り出していくような形だと思うので、並べ替えのように一発で出来る方法はあるものでしょうか?よろしくお願いします。

  • エクセルでメールの自動送信は可能?

     1枚の書類に担当者がそれぞれ確認内容を記載しながら 仕事を進めています。  各書類を番号で管理し、それをエクセルの 表で台帳管理しています。  途中の担当者が急遽他の仕事に時間を とられるなど仕事に遅れを生じる場合がある のですが、それらをエクセルの表で管理し 全体の調整に使っています。    エクセルの表には、各作業の開始、終了日が 記載されています。 そこで、質問なんですが・・・  エクセルに記載した日付から特定の期間(例えば 一週間)たつと、予め登録しておいた 担当者のアドレスに自動的に電子メールが送信 されるようにしたいのです。  催促のメールの自動送信ということです。 何かいい方法はありますでしょうか?

  • エクセルの文字制限からの文字消去は?

    エクセル2007を使用していますが、現在セル内に60~100程の文字が入っております。 それを50文字に制限し、セル内の50以上の文字を消去したいのです。 例えば 60文字の入っているセルを 50文字制限にして、その差の文字の10文字を自動で消去したいのですが どうすればいいでしょうか?

  • エクセル 文字入力の自動化について

    エクセル初心者です。 Excelで、複数行のセルの値の先頭に"0"を挿入したいのですが、 行数が多すぎるので、自動化したいです。 何か方法を教えていだたけないでしょうか。 例:"12345"を"012345"にしたいのです。 よろしくお願いします。

  • エクセルの自動転記について

    エクセル2003です。 行動予定一覧表を作成中です。 シート1に一覧表 シート2には日付別になっており、 その日付別のを一覧表に自動転記させたいと思っています。 画像をご覧になっていただくのが解りやすいと思うのですが、 項目は、一覧表も日付別も同じものです。 ただ、一覧表にはシート2では欄がなかった日付を加えたいのですが、 これも計算式にて表示出来たらと思っています。 一覧表には、日付別シートの表の中で空欄の場合は、転記されないようにしたいのですが、 可能でしょうか? VBAは苦手なので、出来れば計算式で乗り切りたいと思っています。 何かいい案等があれば教えていただきたいです。 よろしくお願いします。

  • Excel 複数のシートを使って自動入力させていです。

    Excel 複数のシートを使って自動入力させていです。 Sheet1に「一覧表」とし、A1に日にち・B1に入荷先・C1「品物名」・D1「金額」を入力していく一覧表を作成しました。 入荷先の名前をSheet2.3に作り、入荷先ごとにリストを作成したいです。 一覧表に入力しただけで、自動的に入荷先ごとのシートに自動的に入力されてるってことって出来ますでしょうか? 例   A   B   C   D 1 日にち 入荷先   品物   金額 2 4/1 Aスーパー たまねぎ  100 3 4/5 B商店    きゅり   50 これをSheet1「一覧表」をした場合、 Sheet2を「Aスーパー」とし、Sheet2を「B商店」として。同じ表を作成しておく。 一覧表のシートにAスーパーでの購入を入力すると、「Aスーパー」のシートに自動的に表が作られていく 説明下手で申し訳ありませんが、よろしくお願いします!

  • 文字の消去について

    Yahoo の検索画面について質問です。 何って説明したらいいか分かりませんが・・・ 検索を掛けると、検索を掛けた言葉が検索の文字入力画面に残ってしまいます。 ・・・意味通じますか? この履歴のようなものを消去したいのですが、可能ですか? 可能なら消去の方法を教えてください

  • エクセルでこんな表を自動的に作りたいです

    エクセルで下記のような停止値一覧表があります。 <停止値一覧> 記号  停止値 a    3 b    2 c    5 d    4 e    10 上記のデータを元にして、下記のような記号別の連番表を別シートに自動的に作りたいのです。。。 <連番表> No  記号 0   a 1   a 2   a 0   b 1   b 0   c 1   c 2   c 3   c 4   c 0   d 連番表の「No」は連続データで、 ・開始値=ゼロ、 ・停止値=<停止値一覧>の停止値からマイナス1した値、 ・増分=1 です。 関数で簡単に出来ますでしょうか?それともマクロか何かになるのでしょうか..? 分かりにくい説明で恐縮ですが、いい方法をお分かりの方、助けて頂けないでしょうか。 よろしくお願いします。 追記:エクセルは2002を使用しています

専門家に質問してみよう