外部データベースで、電話番号がばらばらにテキスト型で入力されているのですが、
それをきれいな数値型に修正したいと思っています。
全角だったり半角だったり、()があったり、ハイフンがあったりなのですが、
すべて統一して数字のみにしたいです。
追加クエリで、そのようなばらばらなデータを、数値のみにして自分のDBに追加していきたいのですが、よい方法がありましたら、教えて下さい。

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

A 回答 (2件)

ユーザ定義関数を作るのは同じですが、


Access2000なら、

Sub A()
  Msgbox ChangeTelNumber("(03)123-1234")
End Sub

Public Function ChangeTelNumber(byref sBuf As String) As String

  sBuf = StrConv(sBuf, vbNarrow)
  sBuf = Replace(sBuf, "(", "")
  sBuf = Replace(sBuf, ")", "")
  sBuf = Replace(sBuf, "-", "")

  ChangeTelNumber = sBuf

End Function

なんてどうでしょう。
    • good
    • 0

ユーザー定義関数を作ってみました。

半角文字にして、指定した文字を削除します。
電話番号の先頭はゼロが多いので、下の結果は文字にしてあります。(03)123-4567は031234567 になります。

'半角の数値のみにする関数
Public Function Str2Numeric(Moji As String) As String
  Dim L As Integer 'カウンタ
  Dim LenMoji As Integer '電話番号の文字長

  Moji = StrConv(Moji, vbNarrow) '半角にする
  LenMoji = Len(Moji) '最初の電話番号の文字長
  For L = LenMoji To 1 Step -1
    Select Case Mid(Moji, L, 1)
      Case "(", ")", "-" '削除する文字を登録する
        Moji = Left(Moji, L - 1) & Right(Moji, Len(Moji) - L) '削除
    End Select
  Next
  Str2Numeric = Moji
End Function
    • good
    • 0

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

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

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

Q【Access】レポートで数値型データが時刻型?で表示される

作業環境
・WindowsXP
・Access2007

よろしくお願いします。

クエリをレコードソースにしたレポートを作成した時、一つの数値型フィールドが時刻型?(0:00:00)で表示されてしまいます。

【材料コード】という数値型フィールドなのですが、このフィールドのみ正常に表示されません。
他の数値型フィールド(金額、数量etc)は正常に表示されています。
新規にテキストボックスを作っても、(0:00:00)と表示されます。
レポート表示前に、パラメータとして材料コードを指定しますが、クエリの段階では正しく材料コードが取得できています。
問題のフィールドの書式や規定値へ特殊な設定をしていない事は確認済です。

他のテキストボックスとコントロールソースを交換するという方法も考えましたが、
例)【工場コード】テキストボックスのコントロールソースを【材料コード】とし、
【材料コード】テキストボックスのコントロールソースを【工場コード】とする

上記の場合だと、材料コードが正常に表示されて、工場コードが(0:00:00)と表示されてしまいます。


何か原因として考えられる事はないでしょうか。

作業環境
・WindowsXP
・Access2007

よろしくお願いします。

クエリをレコードソースにしたレポートを作成した時、一つの数値型フィールドが時刻型?(0:00:00)で表示されてしまいます。

【材料コード】という数値型フィールドなのですが、このフィールドのみ正常に表示されません。
他の数値型フィールド(金額、数量etc)は正常に表示されています。
新規にテキストボックスを作っても、(0:00:00)と表示されます。
レポート表示前に、パラメータとして材料コードを指定しますが、クエリの段階...続きを読む

Aベストアンサー

入れ替えても そのテキストボックスの表示がおかしいとなると
>問題のフィールドの書式や規定値へ特殊な設定をしていない事は確認済です。
これは、テーブルのことですよね?
実際のレポートのテキストボックスに書式が入っているのではないですかね
そうであれば、入れ替えた時の状態にも一致します。

Qアクセスのデータ型。数値型についてお聞きしたいのですが・・・

アクセスのデータ型。「数値型」ですが、「フィールドサイズ」に

(1)バイト型(0~255の範囲。小数点以下の数値は扱えない)
(2)整数型(-32,768~32,767の範囲。小数点以下は扱えない)
(3)長整数型(-2,147,483,648~2,147,483,647の範囲。小数点以下は扱えない)
(4)単精度浮動小数点型(-3.402823×10^38~3.402823×10^38の範囲。
            小数点以下の数値が扱える)
(5)倍精度浮動小数点型(-1.79769313486231×10^308~-1.79769313486231×
           10^308の範囲。少数点以下の数値が扱える)
(6)十進型(-10^28-1~10^28-1の範囲。小数点以下の数値が扱える)

と6種類決められますが、それぞれの「選び方の違い」と「その理由」を
教えてください。

たとえば、(1)~(3)くらいなら分かります。
扱える数値の桁数が違うということですよね?で、(1)~(3)を選ぶ時と(4)~(6)を
選ぶときで大きな違いというと、「小数点以下の数値が扱えるかどうか」
ですよね?そういう認識であっているか・・・ということと、上記の(1)~(6)を
「選び分ける必要がある場合」というのを教えてください。

なぜ、このような6種類に分かれているのか、人に説明しないとなりません。

よろしくお願い致します。m(_ _)m

アクセスのデータ型。「数値型」ですが、「フィールドサイズ」に

(1)バイト型(0~255の範囲。小数点以下の数値は扱えない)
(2)整数型(-32,768~32,767の範囲。小数点以下は扱えない)
(3)長整数型(-2,147,483,648~2,147,483,647の範囲。小数点以下は扱えない)
(4)単精度浮動小数点型(-3.402823×10^38~3.402823×10^38の範囲。
            小数点以下の数値が扱える)
(5)倍精度浮動小数点型(-1.79769313486231×10^308~-1.79769313486231×
           10^308の範囲。少...続きを読む

Aベストアンサー

整数型と浮動小数点型の大きな違いは、少数点以下の数字を扱えるかどうかで合っていると思います。
補足すると、浮動小数点型の方が整数型より大きい数字が扱えます。
長整数型なら21億くらいまでしか扱えませんが、浮動小数点型なら、兆、京・・・と非常に大きい数字が扱えるようになります。
有効数字として、どのくらいのケタを保持できるかが、精度になります。
倍精度は単精度の倍の精度です(当たり前ですが)

コンピュータが2進数で数字を表現していることはご存知のことだと思いますが、2進数で少数を表す場合、必ずしも10進数の少数と一対一に対応するわけではありません。2進数を10進数に直すのはnビットめの数字(0,1)*2のn乗の和ですが、少数の場合は-n乗になります。つまり1/2+1/4+1/8っていうような感じになります。0.75だったら、1/2+1/4で表現できますが、0.3とかになると1/4+1/32+・・・という感じできっちり表現しきれないので、0.299・・・という近似値になります。

それで問題があるようでしたら、十進型を使えば?ってことだと思います。

整数型と浮動小数点型の大きな違いは、少数点以下の数字を扱えるかどうかで合っていると思います。
補足すると、浮動小数点型の方が整数型より大きい数字が扱えます。
長整数型なら21億くらいまでしか扱えませんが、浮動小数点型なら、兆、京・・・と非常に大きい数字が扱えるようになります。
有効数字として、どのくらいのケタを保持できるかが、精度になります。
倍精度は単精度の倍の精度です(当たり前ですが)

コンピュータが2進数で数字を表現していることはご存知のことだと思いますが、2進数...続きを読む

QACCESS2003。数値型のフィールドに30億以上の数値を入力できない。

 DVDに焼いたファイルのデータベースをアクセスに入力しているのですが、そのサイズをバイト単位で入力しているのですが、3ギガ以上の数字を入力すると、
「このフィールドに入力した数値がただしくありません。たとえば数値型のフィールドに文字列を挿入しました」
とでます。
 もうこれはテキスト形式のフィールドにするしかないのでしょうか?いままでたくさんのファイルを登録してきたので、ここでテキスト形式にすると以前のファイル等で不都合がでないか懸念を持っています。
 理想は数値型でなんらかの設定をして3ギガ、30億以上の数値を入力できないものでしょうか?よろしくお願いいたします

Aベストアンサー

ヘルプで数値型を検索すればわかると思いますが、
バイト型:0~255
十進型:-10^28 ~ 10^28(mdbの場合)
整数型:-32,768~32,768
長整数型:-2,147,483,648 ~ 2,147,483,647
単精度浮動小数型:-3.402823E38 ~ -1.401298E-45 と 1.401298E-45 ~ 3.402823E38
倍精度浮動小数型:1.79769313486231E308 ~
-4.94065645841247E-324 と 4.94065645841247E-324 ~
1.79769313486231E308
になります。
長整数型では30億は入力できません。21億が限界です。
容量を取りたくなければ単精度浮動小数型、容量があってもいいなら十進型にしてください。

QACCESS2000数値型⇒テキスト型変換

ACCESS2000でクエリーで例えば25.0の数値を"25.0"そのままの形の文字列に変換したいのですが、Formt関数とか使っても"25"になってしまいます。"25.0"と表示させる方法ないでしょうか?お願いします。

Aベストアンサー

> 「#」は値が該当の桁の値がゼロ、または存在しないときに表示を抑止することを意味し、
> 「0」は該当の桁の値がゼロ、または存在しないときに0を表示することを意味します。

下記に訂正します。

「#」は値が該当の桁が存在しないときに表示を抑止することを意味し、「0」は該当の桁が存在しないときに0を表示することを意味します。

Qマクロで、数値データをテキストデータにするには?

テーブルのあるフィールドを、テキストデータから数値データにデータ系列を変更したいのですが、それを「マクロで」実行したいんですが、できますでしょうか?
どうぞよろしくお願いいたします。m(__)m

Aベストアンサー

 マクロでなくとも、以下のようなクエリーを応用してはいかがでしょうか。なお、テーブルの更新は経験的に怖いので、別のテーブルで作業をやられるといいでしょう。

●「テーブル文字」のフィールド「文字」のデータを「テーブル数字」のフィールド「数字」に格納する。
 クエリーは以下のようになります(クエリーの画面を出せないので、SQLで記します。クエリーでSQL画面を表示して以下をコピーペーストするといいでしょう)。
 

INSERT INTO テーブル数字 ( 数字 )
SELECT テーブル文字.文字
FROM テーブル文字;

 さて、事前に、フィールド「文字」(文字型)のある「テーブル文字」とフィールド「数字」(数値型)のある「テーブル数字」を作ります。何かの数字を「テーブル文字」のフィールド「文字」に入れてクエリーを実行すると、自動で型変換され、テーブル数字に格納されます。なお、型変換ができないほど、数字とは似つかないデータの場合には、その行はエラーとなりnullかなにかが格納されると思います。

 オーム社のSQL Server 7 MSDE対応という本が、いろいろなSQLの例が出ていて便利です。Access97以降でならば使えると思います。

 マクロでなくとも、以下のようなクエリーを応用してはいかがでしょうか。なお、テーブルの更新は経験的に怖いので、別のテーブルで作業をやられるといいでしょう。

●「テーブル文字」のフィールド「文字」のデータを「テーブル数字」のフィールド「数字」に格納する。
 クエリーは以下のようになります(クエリーの画面を出せないので、SQLで記します。クエリーでSQL画面を表示して以下をコピーペーストするといいでしょう)。
 

INSERT INTO テーブル数字 ( 数字 )
SELECT テーブル文字.文字
FROM ...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報