dポイントプレゼントキャンペーン実施中!

Accessのフォーム上にTELというテキストボックスがあり、その中には市外局番からはじまる電話番号が表示されています。

その近くにテキストボックスを配置して、TELの中から市外局番だけを取り出して表示したい(000-****-**** の000の部分だけ)のですが、プロパティのコントロールソースに書く関数のつくりかたが解りません。。

000の部分は3文字か4文字なので取りたい文字数は固定して指定できません。
Mid([TEL],1,Instr([TEL],"-"))
このように書いてみたのですが、正常に反映されません。

教えてください、お願いします。

A 回答 (3件)

> Mid([TEL],1,Instr([TEL],"-"))


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

チクッと横から失礼・・・。



フォームに[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
    • good
    • 0

ゴメンナサイ。


Instr関数は、最初に検索スタート位置を入れなくてはなりません。
なので
=Left([TEL],Instr(1,[TEL],"-")-1)
と、しないとダメですね。
[TEL]に何も入っていない場合を考慮するなら、
=IIf(Nz([テキスト0],"")<>"",Left([テキスト0],InStr(1,[テキスト0],"-")-1),"")

Instr関数のヘルプでは、第一引数は省略可能と書かれているのに、
Instr([TEL],"-")
と第一引数を省略すると、エラーになってしまいます。

Accessだけなのかもしれませんが...
    • good
    • 0

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