アプリ版:「スタンプのみでお礼する」機能のリリースについて

※内容を一部変えて再度質問させていただきます。


調べても分からなかったので、どなたかご教授お願いします。

エクセル2007を使用し、ある表から電話番号だけを抜き出したいのですが、
電話番号の書かれているセルに、余分なことが複数入れられているため、
オートフィルタでの抽出や、Alt+Hでの置き換えがうまくいきません。

同セルの中にこれだけの情報が入っています。
「車の年式・車名・担当者・電話番号」
※データは・のように記号等で区切らず、スペースを空けたり、繋がったりしています。

また電話番号はハイフンがあったりなかったりと統一性がありません;

「車の年式・車名・担当者・電話番号」でゴチャゴチャになっているセルを
「電話番号」のみにしたいのです。

申し訳ありませんが、マクロ等VBAは分かりませんので、
それ以外の方法がありましたら教えていただけないでしょうか?
どうぞよろしくお願いいたします。

A 回答 (5件)

>「車の年式・車名・担当者・電話番号」


>※データは・のように記号等で区切らず、スペースを空けたり、繋がったりしています。

>また電話番号はハイフンがあったりなかったりと統一性がありません;

>残念なことに電話番号も先頭に入れたり半ばに入れたりと無茶苦茶です;

このようなデータでも基本的に何らかの区切り文字があると思うのですが・・・

それはさておき、上記の条件では、電話番号の判断基準が無いのでマクロや関数では抽出できません。

例えば、文字列中の数字が最初に出てくる位置と最後に出てくる位置までの文字数がハイフンやカッコを除いて10桁のような判断基準が決まっていれば関数で対応することも可能です。

いずれにしろ、電話番号を判断するのは、エクセルにしろ人にしろ「数字」がポイントになるので、どのように記載されている数字を抽出したいのかを(複数ある場合は抽出したくない数字の例)などを、実際のデータ(特に電話番号部分)をそのままできる限り具体的に例示されたほうがより的確な回答が得られると思います。
    • good
    • 0

電話番号以外のデータがきちんとリスト化された物があるなら話は別ですが、現状ではNo.2の方の仰る通り、「人間って素晴らしい」なんです。



遊びでマクロを作ってみました。
A1:A5の文字列から、数字の塊を切り分け、一番大きな塊が5個以上連続した数字であれば電話番号として抜き出し、隣のセルに表示しています。
電話番号っぽいものが無いときは「?」を表示します。

マクロ等は判らないとのことですので説明は省略しますが、このマクロも局番の区切りに「-」を使われるとOUTだったりして完璧なものではありません。

Sub PhoneNum()
  Dim RE
  Dim r As Range
  Dim nOff, sTarget, sString, nAns, aAnsLen, i
  
  Set RE = CreateObject("VBScript.RegExp") '正規表現使用
  For Each r In Range("A1:A5") '対象データ
  nOff = 1  '何列右側に電話番号を表示するか
    sTarget = StrConv(r.Text, vbNarrow)
    sTarget = Replace(sTarget, "-", "") '「-」を削除して電話番号を5個以上連続した数字に
    RE.Pattern = "[^0-9\n]|^\n"
    RE.Global = True
    sString = RE.Replace(sTarget, ",") & ","
    sData = Split(sString, ",")
    nAns = 0
    nAnsLen = Len(sData(0))
    For i = 1 To UBound(sData)
      If nAnsLen < Len(sData(i)) Then
        nAns = i
        nAnsLen = Len(sData(i))
      End If
    Next i
    '5個以上連続した数字の塊があれば、電話番号として表示
    If nAnsLen >= 5 Then
      r.Offset(0, nOff) = "'" & sData(nAns)
    Else
      r.Offset(0, nOff) = "?"
    End If
  Next
End Sub
「エクセル2007電話番号だけを抜き出した」の回答画像4
    • good
    • 0

 完全自動というわけにもいきませんが、以下の方法を参考までに。





 エクセルの中身をワードにコピーする。

 車の年式・車名・担当者・電話番号の、各項目の間にTabを挿入する。

 それをエクセルに戻すと、項目毎にセル分けされる。

 あとは電話番号を拾っていく(別セルに移動)。



 一つのセルに書き込まれている電話番号だけを拾うより、わずかながらマシになると思います。
 
    • good
    • 0

質問の状況では無理です



質問者が ここが電話番号だ と判断するロジックを全てマクロプログラム化するしかありませんが、それでもカバーできるのは9割行けば上出来でしょう

試みにその列に書かれていることから 電話番号を抽出する判断基準を箇条書きにしてみることです
そして、その書いた判断基準だけで 電話番号に該当するものを抜き出してみることです

そのくらい 人間は優秀なのです

不用意にそのようなデータ形式を設計したことが諸悪の根源です

数百データなら バックアップを取り  目で見ながら別の欄に電話番号を入力するのが 一番速くできるでしょう

または CSV出力し、それを空白区切りで読み込み、うまくいかなかったデータを手修正する

バックアップを取っておいて、いろいろ試みると良いでしょう
    • good
    • 0

電話番号が常に最後にあるのであれば、


何をしたいかの検索で
同じように”単語”で検索するとRIGHTというのがあります。
この関数は末尾から指定文字数を返すもので、電話番号なら10~12文字ぐらいで指定してやれば
できると思います。-や空白は手で直してください。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
残念なことに電話番号も先頭に入れたり半ばに入れたりと無茶苦茶です;
今後の参考にさせていただきます。

お礼日時:2012/03/13 16:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!