エクセルの関数で教えてください。


数万件の電話番号リストがありまして、国番号が入っている場合その国番号の部分だけを削除する関数を作りたいと思っております。

国番号リストを別途作成し、電話番号の始まりがそのリストと一致する場合を削除するという感じです。

国番号リスト↓
http://www003.upp.so-net.ne.jp/yf6/kuni.html

例えば「354-**-***-*****」という電話番号があれば最初の「354-」を削除したいのですが、そのような関数は作れますでしょうか?

あるいはエクセルの関数でなくても上記のようなことが出来ればいいのですが。。。

ご教授の程何卒お願いいたします!!

回答の条件
  • 1人2回まで
  • 登録:2007/07/05 20:16:04
  • 終了:2007/07/06 00:05:30

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/07/05 23:57:23

ポイント100pt

VBA での実装例です。


先頭にシートを追加しA列に国番号の一覧をコピーします。

D列に変換対象の電話番号リストをコピーします。

(削除してしまうのは問題だと思いますので、C列に国際番号を、D列に国際番号を除いた番号をおきました。)


コメントを有効にしていただければ、不明な点は補足します。

Sub divINN()
    Dim lastRowA As Long
    Dim lastRowD As Long
    lastRowA = Range("A" & Rows.Count).End(xlUp).Row
    lastRowD = Range("D" & Rows.Count).End(xlUp).Row
    
    Dim i As Long
    Dim j As Long
    
    Dim sWord As String
    For j = 1 To lastRowA
        sWord = Cells(j, "A").Value & "-"
        For i = 1 To lastRowD
            If InStr(Cells(i, "D").Value, sWord) = 1 And Cells(i, "C").Value = "" Then
                Cells(i, "C").Value = "'" & sWord
                Cells(i, "D").Value = "'" & Replace(Cells(i, "D").Value, sWord, "")
            End If
        Next
    Next
End Sub
id:ion10

すごいっっ!!!!!

完璧です!!!

ありがとうございました!!!!!!!!!

2007/07/06 00:04:36

その他の回答(1件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/07/05 23:57:23ここでベストアンサー

ポイント100pt

VBA での実装例です。


先頭にシートを追加しA列に国番号の一覧をコピーします。

D列に変換対象の電話番号リストをコピーします。

(削除してしまうのは問題だと思いますので、C列に国際番号を、D列に国際番号を除いた番号をおきました。)


コメントを有効にしていただければ、不明な点は補足します。

Sub divINN()
    Dim lastRowA As Long
    Dim lastRowD As Long
    lastRowA = Range("A" & Rows.Count).End(xlUp).Row
    lastRowD = Range("D" & Rows.Count).End(xlUp).Row
    
    Dim i As Long
    Dim j As Long
    
    Dim sWord As String
    For j = 1 To lastRowA
        sWord = Cells(j, "A").Value & "-"
        For i = 1 To lastRowD
            If InStr(Cells(i, "D").Value, sWord) = 1 And Cells(i, "C").Value = "" Then
                Cells(i, "C").Value = "'" & sWord
                Cells(i, "D").Value = "'" & Replace(Cells(i, "D").Value, sWord, "")
            End If
        Next
    Next
End Sub
id:ion10

すごいっっ!!!!!

完璧です!!!

ありがとうございました!!!!!!!!!

2007/07/06 00:04:36
id:rikuzai No.2

りくっち回答回数1366ベストアンサー獲得回数1412007/07/06 00:02:59

ポイント10pt

電話番号がA列に入っていて、

全ての電話番号に国番号が入っており、これを全て除去したものを表示するなら

=MID(A1,FIND("-",A1)+1,LEN(A1))

で先頭の「-」以前の国番号を除いた番号を表示します。


一覧を作成し、これに従って除去する場合は、

電話番号がA列に入っていて、

一覧の国番号がSheet2のA列に記入されているとして、

=IF(COUNTIF(Sheet2!A:A,LEFT(A1,FIND("-",A1)-1))>0,MID(A1,FIND("-",A1)+1,LEN(A1)),A1)

で、一覧に国番号があれば削除、なければそのままの電話番号を表示します。


以上ご参考まで。

  • id:rikuzai
    ありゃ…残念。やっと回答できるなとおもったら間に合わず…。
  • id:ion10
    すいません、終了した瞬間に回答が入ってきました。
    「20ポイントを使って回答をオープン」というのがありますので、
    もしよろしければ回答を再度UPしていただいてもよろしいでしょうか。

    (何故か現在それを押しても何も表示されません。)


    よろしくお願いいたします。
  • id:fuentebella
    数万件のデータのExcelで回答1を行った場合、どれくらい時間がかかったのか知りたいです!! (いつもせいぜい数百行ぐらいのexcelしか使ったことがないので)
  • id:rikuzai
    >ion10さん
    昨夜は色々と人力に不具合があったみたいですね。
    私も比較的早くに回答しようとしたんですが回答が登録されなくて。
    開けてくださってありがとうございました。
  • id:rikuzai
    あ、回答オープンしてくださったのtaisinさんだったんですね。
    (今確認しました…orz)
    ありがとうございました。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません