マルシェル新規登録で5000円分当たる

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


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

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

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

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

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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで電話番号を取り出すには?

簡単な質問かもしれないですがお願いします。
エクセルで、***-***-***という番号があって、
それを、市外局番、市内局番、番号というふうに取り出したいのですが、市外局番が2桁、3桁、4桁、5桁、市内局番が2桁、3桁、4桁、5桁、最後の番号が2桁、3桁、4桁、5桁と、どんなパターンが来ても市外局番、市内局番、番号と取り出す為にはどうすればいいのでしょうか?

説明が下手で申し訳ないです。

Aベストアンサー

こんにちは。

ハイフンで区切られた元データを残さずに、市外局番・市内局番・番号に分けるだけなら、関数を使わなくても簡単にできます。


現在、電話番号が入力されているセルの右に市内局番・番号用の列を2つ用意します。
 ↓
電話番号が入力されているセルを範囲指定します。
 ↓
メニューの「データ」→「区切り位置」をクリックしてください。
 ↓
「元のデータの形式」で「カンマやタブなどの・・・」を選んで、「次へ」をクリックしてください。
 ↓
「区切り文字」の「その他」をチェックして、その右の欄に半角ハイフンを入力し、「次へ」をクリックしてください。
 ↓
「列のデータ形式」で「文字列」を選んで、「完了」をクリックしてください。
 ↓
市外局番・市内局番・番号が別々のセルに表示されます。

Qエクセルで電話番号から市内局番だけを抜き出したいのですが

エクセルで、「○○-△△-××××」というようにハイフンで区切られた電話番号が入力されたセルに対し
市内局番だけ(または最後の番号だけ)を抜き出したいのですが、そういうことは可能でしょうか?

よろしくお願いします。

Aベストアンサー

No.4のarukamunです。

012-345-6789
0123-45-6789

012や0123を求めたいのであれば、

=LEFT(A1,FIND("-",A1)-1)

345や45を求めたいのであれば、

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

6789を求めたいのであれば、

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

は正常に動作すると思います。
もしかすると、345-6789や45-6789を求めたいのでしょうか?

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

で良いですね。
取りあえず、上記の方法は、携帯電話等の長い電話番号でも問題ないと思います。もし、これ以外のものを求めたいのであれば、詳細にどこを求めたいのかを補足してください。

Qエクセル 数値だけ抽出するには?

エクセルで、文字列+スペース+数字と入力されているセルから数値だけ取り出す方法を教えていただけますか?
文字列とスペースの字数は一定で、数値の桁数は6-8桁と変動します。
A列からb列のように変換したいのです。

A列          B列
PMID:_12345678    12345678
PMID:_123456     123456

宜しくお願いいたします。

Aベストアンサー

B1に
VALUE(REPLACE(A1,1,6,""))
でよいでしょう.

数値の桁数には依存しません.

Qエクセルで電話番号を - で分割する方法

エクセルで電話番号のデータが入っています。ハイフンごとで3つのセルに分けて取り出す関数があれば教えてください。
01-2345-6789
012-345-6789
0123-45-6789
01234-5-6789
050-1234-5678 とハイフンの位置も桁も種類があります。左右の部分はLEFTとRIGHTで取り出せるのですが真ん中がうまく取り出せません。
よろしくお願いします。

Aベストアンサー

 A列が
01-2345-6789
012-345-6789
0123-45-6789
01234-5-6789
050-1234-5678 として
B列 =LEFT(A1,FIND("-",A1)-1)
C列 =LEFT(RIGHT(A1,LEN(A1)-FIND("-",A1)),FIND("-",RIGHT(A1,LEN(A1)-FIND("-",A1)-1)))
D列 =RIGHT(A1,LEN(A1)-LEN(B1)-LEN(C1)-2)
で如何でしょうか。

Qエクセルのセル内から数字だけを抽出する方法を教えて下さい

エクセルのセル内から数字だけを抽出する方法を教えて下さい
あるデータの列(備考欄)には様々な文字が入っていて、
その中に●名(●は数字)が入っています その数字だけを取り出して
別の列に移す関数を教えて下さい
※この列には他の数字は入っていません、最大で2ケタです

よろしくお願いします

Aベストアンサー

セル内の文字列の中に2桁までの数字が入っている場合に、その数字部分を抽出したいなら以下のような数式になります。

=MID(A2,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A2)&1234567890)),1)&IF(ISNUMBER(MID(A2,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A2)&1234567890))+1,1)*1),MID(A2,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A2)&1234567890))+1,1)*1,"")

Qエクセルで数字の頭に0を追加する方法はありますか?

エクセルのVLOOKUP関数を使って検索をしようと思いますが、
検索する番号が一つが6桁の番号で表示されており、もう片方が7桁の番号で表示されています。
つまり、6桁は頭に0が付いていなくて、7桁には頭に0が付いています。
【例】 6桁=123456、7桁=0987654

ですから同じ表示にしたいのですが、出来れば6桁の頭に0を付けたいのです。
【例】 6桁=123456 → 7桁=0123456

どうすれば、変換できるかよい方法がありましたら教えて下さい。よろしくお願いいたします。

なお、対象セルは3千個程あるので、とてもじゃないけど一個づつは出来ません。
また、当方素人なので出来れば判り易い方法でお願い致します。

Aベストアンサー

範囲選択をして右クリック
セルの書式設定
 ↓
表紙形式
 ↓
ユーザー定義
 ↓
種類のところに 0000000
と記入すれば頭に0が付きます。

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QEXCEL VBA 文字列から電話番号を抽出したいのですが

EXCELのVBAで質問です。

abc123-4567(def)
のように、電話番号の前後に文字が含まれているものから、
電話番号を検出し、
abc【固定電話】123-4567(def)
のように。文字列を追加したいです。
また、携帯電話の場合はの除外とします。

abc123-4567(def) → abc【固定電話】123-4567(def)

ちなみに固定電話の番号は「xxx-yyyy」と桁数は固定です。

このような処理をするにあたって、どのような方法を取ればよいでしょうか。
具体例挙げていただけると幸いです。

Aベストアンサー

こんばんは!

元データはA列の2行目以降にあり、B列に表示するとします。
尚、電話番号が「○○○-××××」以外の場合はA列データをそのままB列に表示するようにしてみました。

Sub Sample1()
Dim i As Long, k As Long, str As String, buf As String
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
For k = 1 To Len(Cells(i, "A"))
str = Mid(Cells(i, "A"), k, 1)
If str Like "[0-9,-]" Then
buf = buf & str
If Not str Like "[0-9,-]" Then Exit For
End If
Next k
If Len(buf) = 8 Then
If IsNumeric(Left(buf, 3)) And IsNumeric(Right(buf, 4)) Then
Cells(i, "B") = Replace(Cells(i, "A"), buf, "【固定電話】" & buf)
End If
Else
Cells(i, "B") = Cells(i, "A")
End If
buf = ""
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんばんは!

元データはA列の2行目以降にあり、B列に表示するとします。
尚、電話番号が「○○○-××××」以外の場合はA列データをそのままB列に表示するようにしてみました。

Sub Sample1()
Dim i As Long, k As Long, str As String, buf As String
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
For k = 1 To Len(Cells(i, "A"))
str = Mid(Cells(i, "A"), k, 1)
If str Like "[0-9,-]" Then
buf = buf & str
If Not str Like "[...続きを読む

QEXCELで、特定の文字を含むセルを抽出したいのですが。

仕入れ帳のようなシートで、B列に商品名があります。
商品名に特定の文字(数字又は文字)を含む時、空白列のC列に、その文字を抽出する方法をご教示ください。B列の商品名は変化させずにです。
意図は、当シート内で並べ替えをする時に、C列をキーとするためです。
商品名が、各種文字と数字で構成されており、そのままでは、希望する並べ替えができないのです。
宜しくお願い致します。

Aベストアンサー

「IF」関数、「ISERR」関数、「FIND」関数を組合せれば可能ですね。
たとえば、文字「a」を検索するなら、B2セルを対象として、C2セルに、

=IF(ISERR(FIND("a",B2)),"","aが入っています")

と入れます。

注意事項として、アルファベットを検索する場合、大文字と小文字を区別します。
つまり、上の例ではB2セルに「a」があれば、「aが入っています」、と表示されますが、「A」では表示されません。
(「FIND」を「SEARCH」にすれば「a」・「A」どちらでも表示される)

QエクセルでハイパーリンクのURLだけを文字抽出したい

ホームページからコピーし、エクセルにリンク文字をペーストすると、青文字(文字にハイパーリンクがかかった状態)が貼りつきます。その張り付いた文字の、リンク先URLを文字としてほしい(http○○・・)のですが、できますか?
青文字を右クリックしてハイパーリンクの編集からURLは見られるのですが、たくさんのリンクリストからURLだけを抽出するのが大変なので、よい方法がありましたらお願いします。

Aベストアンサー

No3 です。
サブアドレスの存在を忘れていました。
訂正です。

Public Sub GetURL()
  Dim h As Hyperlink
  Dim a As String
  Dim s As String
  For Each h In ActiveSheet.Hyperlinks
    a = h.Address
    s = h.SubAddress
    If s <> "" Then
      a = a & "#" & s
    End If
    h.Range.Offset(0, 1) = a
  Next
End Sub


人気Q&Aランキング