• ベストアンサー

市外局番だけを取り出す関数のつくりかた

Accessのフォーム上にTELというテキストボックスがあり、その中には市外局番からはじまる電話番号が表示されています。 その近くにテキストボックスを配置して、TELの中から市外局番だけを取り出して表示したい(000-****-**** の000の部分だけ)のですが、プロパティのコントロールソースに書く関数のつくりかたが解りません。。 000の部分は3文字か4文字なので取りたい文字数は固定して指定できません。 Mid([TEL],1,Instr([TEL],"-")) このように書いてみたのですが、正常に反映されません。 教えてください、お願いします。

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

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

> Mid([TEL],1,Instr([TEL],"-")) Mid関数でなくても、 Left([TEL],Instr([TEL],"-")-1) では?

その他の回答 (2)

noname#140971
noname#140971
回答No.3

チクッと横から失礼・・・。 フォームに[TEL]が配置されて、市外局番を表示する[STD]も配置されているとします。 この場合、No1さんの回答でOKかと思います。 =Left([TEL],InStr(1,[TEL] & "-","-",1)-1) ただ、空値対策ですが、[TEL]に "-"を常にアペンドしてもOKかと。 Left関数の引数がマイナスになる不具合は、これで回避されます。 [イミディエイト] ? vbTextCompare 1 なお、念のために Instr関数では vbTextCompare も指定しています。 補足:私ならば・・・・ Customer: ID__KName______TEL 01__山田 太郎__0001-01-0001 02__山下 達郎__001-001-0001 =CutStr(DBLookup("TEL","Customer","ID=" & Forms("Customer").[Controls]("ID")),"-",1) フォーム [Customer]で、市外局番を切り取って表示しています。 しかし、これは実に複雑です。 レコードソース=SELECT Customer.ID, Customer.KName, CutStr([TEL] & "","-",1) AS STD FROM Customer; これならば、テキストボックス[市外局番]のレコードソース=STD で済みます。 これならば、[TEL]から市外局番を抜き出す作業をフォームで行う必要はありません。 CutStr([TEL],"-",1) AS STD_____________________Null 非対応 CutStr([TEL] & "","-",1) AS STD______________Null 対応 [イミディエイト] ? CutStr("111-222-333", "-", 1) 111 ? CutStr("111-222-333", "-", 2) 222 ? CutStr("111-222-333", "-", 3) 333 このように、私は文字列の切り出しを行う場合、全て以下の CutStr関数一つで対応しています。 逐一、Left関数、Instr関数で抜き出すか否かは、まあ、好みの問題かと思います。 適当に参考にされて下さい。 Public Function CutStr(ByVal TEXT As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & TEXT, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function

noname#79209
noname#79209
回答No.2

ゴメンナサイ。 Instr関数は、最初に検索スタート位置を入れなくてはなりません。 なので =Left([TEL],Instr(1,[TEL],"-")-1) と、しないとダメですね。 [TEL]に何も入っていない場合を考慮するなら、 =IIf(Nz([テキスト0],"")<>"",Left([テキスト0],InStr(1,[テキスト0],"-")-1),"") Instr関数のヘルプでは、第一引数は省略可能と書かれているのに、 Instr([TEL],"-") と第一引数を省略すると、エラーになってしまいます。 Accessだけなのかもしれませんが...

関連するQ&A