初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2014-05-27 17:24:46

Hori
Guest

電話番号の表示を希望形式に変更したい

こんにちは。いつもお世話になっています。

Win7, FM12 です。よろしくお願いします。

住所録の電話番号欄に、市内の人は市外局番なしで、市外の人は市外局番から入力されています。

<例>
  123-4567
  012-345-6789
  222-3333
  098-765-4321

これをそれぞれ、

  123-4567
  (012) 345-6789
  222-3333
  (098) 765-4321

のように、半角ダッシュを全角にかえ、市外局番は括弧でくくって半角スペースをあけるという表示にしたいと思います。

計算式を作成したところ、"0" が消えてしまったので、少し改変して以下のような計算式にしてみました。

Case ( (Left ( 電話 ; 1 ) ≠ 0) ; 電話 ; (Left ( 電話 ; 1 ) = 0) ; "(0" & (GetAsNumber(GetValue(Substitute(電話;"-";¶); 1))) & ") " & (GetAsNumber(GetValue(Substitute(電話;"-";¶); 2)) & "-"  &  (GetAsNumber(GetValue(Substitute(電話;"-";¶); 3)))) ; "" )

この式だと市外局番の"0"であれば対処できるのですが、下4桁の頭が"0"の場合は対処できません。
#根本的な考え方が違っていると思うのですが、他に思い浮かびませんでした。

どうすれば希望の表示になるのか教えて頂ければ幸いです。

よろしくお願いします。

Hori

#2 2014-05-27 17:59:41

Hori
Guest

Re: 電話番号の表示を希望形式に変更したい

上の計算式は

Case ( (Left ( 電話 ; 1 ) ≠ 0) ; (Substitute(電話;"-";"-") ; (Left ( 電話 ; 1 ) = 0) ; "(0" & (GetAsNumber(GetValue(Substitute(電話;"-";¶); 1))) & ") " & (GetAsNumber(GetValue(Substitute(電話;"-";¶); 2)) & "-"  &  (GetAsNumber(GetValue(Substitute(電話;"-";¶); 3)))) ; "" )

の間違いです。すみません。

#3 2014-05-27 18:11:08

FM12始めたばかり
Guest

Re: 電話番号の表示を希望形式に変更したい

右から5番目(-)は固定なので、この置き換えを行い

文字数が12(現行)なら、
左から4番目(-)を「)-」に置き換え、「(」を追加する式でどうでしょうか?

#4 2014-05-27 18:20:34

Traveller
Guest

Re: 電話番号の表示を希望形式に変更したい

Case ( PatternCount ( 電話 ; "-" )  = 2;
"(" &  Replace (電話 ; Position ( 電話 ; "-" ; Position ( 電話 ; "-" ; 1 ; 1 ) ; 1 ) ; 1 ; ") " );
Substitute ( 電話 ; "-" ; "−" ))
でだめかな?
()は全角にしてみたけど。

#5 2014-05-27 18:25:27

チポ
Member

Re: 電話番号の表示を希望形式に変更したい

03-1234-5678
なども有るから、文字数では心もとないでしょう。

Position関数
は指定テキストの出現回数を指定してその位置を得られます。


スレ主さんの式は
GetAsNumber
を使っているから、頭の0が消えちゃうのでは。
テキストで扱えばいいでしょう。

式自体を全部理解していないから、それが正しいかは分りません-_-

Offline

#6 2014-05-27 18:27:23

Shin
Member

Re: 電話番号の表示を希望形式に変更したい

何か、変な括弧が多くて、非常に見にくい式です。また、GetAsNumber() は、何のために入れたのかが不明。スペースの処理ならば、Trim() か Filter() を使いましょう。

Let (
[
 text = Substitute ( 電話 ; "-" ; ¶ ) ;
 t1 = Trim ( GetValue ( text ; 1 ) ) ;
 t2 = Trim ( GetValue ( text ; 2 ) ) ;
 t3 = Trim ( GetValue ( text ; 3 ) )
] ;
 Case (
  IsEmpty ( t3 ) ; t1 & "ー" & t2 ;
  "(" & t1 & ") " & t2 & "ー" & t3
 )
)

という式で良いのでは。
また、市内でも、市外局番をつけて管理しておくことをお勧めします。

Offline

#7 2014-05-27 19:16:13

Traveller
Guest

Re: 電話番号の表示を希望形式に変更したい

間違ってた。
Substitute (
Case ( PatternCount ( 電話 ; "-" )  = 2;"[" &  Replace (電話 ; Position ( 電話 ; "-" ; Position ( 電話 ; "-" ; 1 ; 1 ) ; 1 ) ; 1 ; "] " );電話) ;
"-" ; "ー" )
分かりやすいように?市外局番は[ ]にしてみた。

#8 2014-05-27 19:32:35

Hori
Guest

Re: 電話番号の表示を希望形式に変更したい

みなさま、ありがとうございました。

やはり、使いこなすのは難しいですね。
以前、特定の文字間の数値を取り出す質問をした際に GetAsNumber() を教えて頂いたので、今回も使えるかなと思ったのですが、だめでした。
Let, Trim やIsEmpty など目新しい関数も教えて頂いたので、今後に生かしていきたいと思います。

Traveller 様

わかりやすく表示して頂きありがとうございました。
うまくいきました。

今後ともどうぞよろしくお願いします。

#9 2014-05-27 19:55:32

カスタム関数
Guest

Re: 電話番号の表示を希望形式に変更したい

余談ですが、こんなカスタム関数もありますよ。
http://www.fmpro.jp/fmi/xsl/plugin/cf.xsl?ID=0068
市外局番の桁合わせをしてくれるカスタム関数です。
普通の計算式としても使えそうです。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 10 queries executed - Memory usage: 561.09 KiB (Peak: 566.34 KiB) ]