• ベストアンサー

抽出する文字数が異なる場合

Access2003 クエリを作成中です。 「アドレス」テーブルの「電話番号」フィールドの編集作業をしていますが、市外局番のみを取り出す、つまり、-(ハイフン)より、前を取り出したいです。 郵便番号の場合、3ケタ-4ケタの為、Mid関数を用いることができたのですが、電話番号の場合、それが出来ずに困っています。 03-1234-5678 090-1234-5678 0000-1234-5678 などがあり、郵便番号のように Mid(アドレス!郵便番号,1,3) AS 郵便3ケタ Mid関数を使って、○文字、抽出することができません。 電話番号は、テーブル「アドレス」/フィールド「電話番号」です。

noname#248169
noname#248169

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

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

InStr関数で「-」の位置を検索し、その1文字前までを取り出せばいいのです。

noname#248169
質問者

お礼

Instr関数ですか。 最初使ったとき、ハイフンも出ましたが、「その1文字前」というお言葉で、-1を入れ、出来ました。 ありがとうございました。

その他の回答 (1)

  • fujiponxx
  • ベストアンサー率32% (186/580)
回答No.2

ハイフンの前の文字長は InStr(アドレス![電話番号],"-")-1 なので、 Mid$([アドレス]![電話番号],1,InStr([アドレス]![電話番号],"-")-1) でどうでしょうか?

noname#248169
質問者

お礼

出来ました。 >Mid InStr関数と聞いて、「左から~」の為、『Mid』ではなく、思いついた『left』関数を用いたのですが、Mid関数も出来ましたね。 因みに、応用をしてみようと思い、 では逆で、右(お尻)から「-」以降の4字を抜き出してみようと思い、leftをlightに変えましたが、未定義関数と言われました。 左があれば右があると思ったのですが‥‥まだまだ奥が深いですね。 ありがとうございました。

noname#248169
質問者

補足

‥‥考えてみたら、末尾は決まっているので、この方式で行く必要ないですね。 多分、また違う関数を用いるのでしょう。探してみます。 補足に書きましたが‥‥お礼です。 ありがとうございました。

関連するQ&A

  • Accessの電話番号フィールド

    Access2000以降について質問です。 顧客記録の電話番号フィールドについてお尋ねします。 異なるデータソース(テキスト形式)から各々に電話番号フィールドを含む2つのテーブルを作成したのですが、電話番号のフィールドがテーブル1では「ハイフンつき」の電話番号、テーブル2のほうでは「ハイフンなし」の電話番号になっています。また、いずれのフィールドもデータ型は「テキスト型」になっています。 やりたいことはテーブル1の電話番号にはないテーブル2の電話番号を含むレコードを不一致クエリを用いて抽出したいのですが、ハイフンがあるために全て不一致になってしまいます。 ハイフンを入れるのは地方の電話番号が多いため市外局番が3桁や4桁などで不揃いのためLEFT、RIGHT関数を用いて入れるのは不可能です。 そこでテーブル1のハイフンつき電話番号フィールドからハイフンを取り除きたいのですが、なにか方法はありませんか?VBAは分からないのでそれ以外でやる方法があれば教えて下さい。お願いします。

  • 全国の市外局番の一覧が載っているサイトありませんか

    仕事で住所、電話などのデータをある形式に揃える必要があるのですが、ハイフンなしの電話番号をハイフン付に変換するのが大変です。例えば03****2222は03-****-2222となり、045***4444は045-***-4444となります。市外局番が2桁、3桁、4桁(たまに5桁の所も)と地区によってバラバラなので、計算式の利用にも限度があり、困っています。そこで質問ですが、 1.全国の市町村名と市外局番が一覧になっているサイトはありませんか。 2.エクセルで、ハイフンなしの電話番号に市外局番の箇所でハイフンを付けるには、どのようにすればいちばん早いでしょうか。ちなみに今はMID関数を使って、東京なら03だけを取り出して・・・というようにやっています。

  • 【Access2000】抽出条件の設定について

    Access2000の抽出条件について質問です。 下記のようなテーブルがあります。 番号が3桁、5桁のものが混在しています。 ※3桁、5桁以外のものはありません。 キー | 番号 | 名前 001 | 11029 | りんご 002 | 332 | みかん 003 | 10154 | ばなな 番号を加工する条件として、 A. 5桁の場合、頭から2桁目から3桁の値を取る B. 3桁の場合は、そのまま値を取る があります。 フィールドの記述は A. 番号加工後: Mid(Left([番号],2) ,3) というところまでは分かりました。 上記の条件をもとにクエリで実行したいのですが、抽出条件はどのように書けばよろしいでしょうか? 識者の方、ご教示いただけますと幸いです。

  • SUBSTRING 関数に渡した長さのパラメータが無効です。

      ●サーバー機 DB:SQLServer2005 OS:WindowsServer2003 ●クライアント機 OS:WindowsXP SP3 住所テーブル(ADDRESS)の項目のひとつである電話番号(TELNO)を 特定の記号で3つの別項目として取得したいのですが クライアント機の SQL Server Management Studio にてクエリを実行すると 「SUBSTRING 関数に渡した長さのパラメータが無効です。」 以上のようなエラーが発生します。 電話番号の項目は文字型の項目で、実際のデータとしては 例:(01)2345-6789 (0123)45-6789 (01234)5-6789 こんな感じで市外局番の前後に必ず"(" ")"が付いており"-"も必ず付いた状態です。 ただし、市外局番、ハイフンの前後の番号の桁数に決まりはありません。 ※市外局番5桁、ハイフン前4桁、ハイフン後4桁という最大桁数の制限はあり。 【実行したクエリ】 Select SUBSTRING(TELNO, CHARINDEX('(',TELNO)+1, CHARINDEX(')',TELNO)-CHARINDEX('(',TELNO)-1) AS TELNO1 , SUBSTRING(TELNO, CHARINDEX(')',TELNO)+1, CHARINDEX('-',TELNO)-CHARINDEX(')',TELNO)-1) AS TELNO2 , SUBSTRING(TELNO, CHARINDEX('-',TELNO)+1, 5) AS TELNO3 From ADDRESS エラーメッセージの通り、SUBSTRING関数のパラメータの内容が長すぎるのが原因のようですが いろいろ調べてみたのですが別の書き方が見つけられず困っている状態です。 何かいい方法はないものでしょうか?(別の関数を使用する等々) ※ストアドプロシージャで処理するのではなく1本のクエリで結果が得られるのが望ましいです。 よろしくお願いいたします。

  • ACCESS2002で市内局番だけを抜き出す関数

    ACCESS2002初心者です。 ACCESSのフォーム上で市外局番から入力する『電話番号』というテキストボックスがあります。 この電話番号を「市外局番」・「市内局番」・「局番」それぞれを切り取りレポートに印字されるように、 コントロールソースに書く関数を教えていただきたいです。 入力型は【000-000-0000】または【00-0000-0000】【0-00000-0000】 といったように市外局番、市内局番ともに文字数が変わります。 市外局番は =Left([電話番号],Instr(1,[電話番号],"-")-1) このクエリで表示されました。 局番は必ず下4桁なのでRight関数で表示されました。 問題は市内局番です。 =Mid([電話番号],InStr([電話番号],"-")+1) このクエリだと市内局番から下は全て表示されてしまいます。 どうしたら良いでしょうか? ご回答のほど、どうかよろしくお願いいたします。

  • Access]2つのテーブルを比較してフィールドの一部が一致したデータを抽出

    2つの名簿テーブルを比較してどちらのテーブルにも含まれている個人を抽出したいと考えております。 テーブル名とフィールドは以下のとおりです。 ==================== テーブル名「名簿A」 氏名 電話番号 住所 メールアドレス ==================== テーブル名「名簿B」 姓 名 電話番号 住所 メールアドレス ==================== たとえば、この2つの名簿をメールアドレスで一致したものを抽出する場合は選択クエリのデザインビューで「名簿A」のフィールドを読み込ませ、 メールアドレスフィールドの抽出条件として Like [名簿B].[メールアドレス] を入れれば抽出ができたのですが、メールアドレスは、名簿ごとに記入されていたりしなかったりするので、名前での一致を行いたいと思っています。 ここで問題なのが、名簿Aは「氏名」で入力されているのに対し、名簿Bでは「姓」と「名」が別フィールドになっております。 そこで自分なりにやってみたのが、選択クエリのデザインビューで「氏名」のフィールドの抽出条件として Like (*[名簿B].[姓]*) を設定するものでした。 これがうまくいけば最終的には Like (*[名簿B].[姓]*) And Like (*[名簿B].[名]*) という風にして、名簿Aの「氏名」フィールドに名簿Bの「姓」も「名」も入っているものを抽出できるかな?と考えたのですが、上記のように入力すると、自動的に Like ("*[名簿B].[姓]*") となってしまい、何も抽出されなくなってしまいました。 このような方法では希望する抽出は行えないのでしょうか? お分かりのかた、よろしくお願いいたします。

  • クエリで抽出したデータに書き込みたい

    どうしても分からなくなってしまったので、質問させていただきます。 以前、連番フィールドだけのテーブルを作りたいと質問して以下のような回答を頂きました。もちろん回答内容で連番フィールドの作成はできました。 Private Sub Sample1()   Dim rs As New ADODB.Recordset   Dim i As Integer   rs.Open "ZZZZ連番テーブル", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic   For i = 1 To 9999     rs.AddNew     rs("仮想ID") = "ZZZZ" & Format(i, "0000")     rs.Update   Next   rs.Close End Sub そして今回は、また連番を振りたいのですが 今回は条件が加わっていまして、元テーブルからまずクエリで既存データの登録番号を昇順(空き番号ではないが番号が所々飛んでいるもの)で抽出します。 この虫食いのように飛んでいる番号を綺麗に連番にしようと思い、まずは別フィールドに変更したい連番のフィールドを作成したいのですが。 これがうまくいきません。 上に記述したVBAでは既にレコードがあるデータにAddNewが有効でないのは分かるのですが、 どのようにすれば元テーブルから抽出クエリ(昇順で抽出したデータ)を使って 別フィールドに連番を振ることができるのでしょうか? フィールドを書き換えるのではなく別フィールドに連番を振るだけなのですが・・・

  • アクセスのクエリ作成について

    下記のようなテーブルとフィールドがあるとします。 Aテーブル  会社名 分類 都道府県 住所 HPアドレス  Bテーブル  担当者 部署 電話 メールアドレス Cテーブル  受付番号 分類 Dテーブル  受付番号 分類 ここでAテーブルの都道府県で一致するデータを抽出し、 下記のフィールドを表示するクエリを作成したいと思っています。 A 会社名 分類 都道府県 住所 HPアドレス B 担当者 部署 メールアドレス 電話 C 受付番号 D 受付番号 クエリを作成し実行しましたが、何もデータが出てきません。 全フィールド入力していないと抽出できないのでしょうか。 中にはHPアドレス等がない場合もあるのです。 すみませんが、どなたか教えて下さい。 よろしくお願いします。

  • MS Accessの抽出の仕方について教えていただきたいのですが・・・

    Accessのクエリでたとえば下図のようなクエリがあるのですが、 ------------------------------------------------------------    製品番号   |  商品番号 |  品   名   |  品名カナ ------------------------------------------------------------ 0123456789ABCD | 789ABCD   | ボールペン(黒)| ボールペン 123456789ABCDE | 89ABCDE   | 万年筆     | マンネンヒツ     ・        ・       ・         ・     ・        ・       ・         ・ このデータの「製品番号」の上位7桁だけ抽出したくてヘルプで関数をいろいろ調べてみたのですがよくわからず困っています. 前回違う質問をさせていただいたときに,更新クエリでRIGHT関数を使って下位7桁の抽出の仕方を教えていただいたのですが,その関数の逆版(LEFT関数??)のような感じの関数は存在しないのでしょうか? ありましたらぜひ教えていただけないでしょうか. どうぞよろしくお願い致します.

  • 5桁の電話番号

    5桁の電話番号ってありますか? TEL ○-○○○○ よくあるインターネットでの入力フォームをつくっております。 電話番号を入力する際に普通は、市外局番や携帯電話で 10桁か11桁で2箇所にハイフンを入れたとしても 普通、10桁から13桁になると思います。 仮に市外局番を抜かしても最低6桁以上になると思います。 そこで6桁未満14桁以上の電話番号をエラーにしたいですが ハイフンを抜かして5桁の電話番号ってありますか?。 また、ハイフンやカッコを使っても 14桁以上まで入力する人って普通いますか?。

専門家に質問してみよう