みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
こんにちは。いつもお世話になっています。
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
上の計算式は
Case ( (Left ( 電話 ; 1 ) ≠ 0) ; (Substitute(電話;"-";"-") ; (Left ( 電話 ; 1 ) = 0) ; "(0" & (GetAsNumber(GetValue(Substitute(電話;"-";¶); 1))) & ") " & (GetAsNumber(GetValue(Substitute(電話;"-";¶); 2)) & "-" & (GetAsNumber(GetValue(Substitute(電話;"-";¶); 3)))) ; "" )
の間違いです。すみません。
右から5番目(-)は固定なので、この置き換えを行い
文字数が12(現行)なら、
左から4番目(-)を「)-」に置き換え、「(」を追加する式でどうでしょうか?
Case ( PatternCount ( 電話 ; "-" ) = 2;
"(" & Replace (電話 ; Position ( 電話 ; "-" ; Position ( 電話 ; "-" ; 1 ; 1 ) ; 1 ) ; 1 ; ") " );
Substitute ( 電話 ; "-" ; "−" ))
でだめかな?
()は全角にしてみたけど。
03-1234-5678
なども有るから、文字数では心もとないでしょう。
Position関数
は指定テキストの出現回数を指定してその位置を得られます。
スレ主さんの式は
GetAsNumber
を使っているから、頭の0が消えちゃうのでは。
テキストで扱えばいいでしょう。
式自体を全部理解していないから、それが正しいかは分りません-_-
Offline
何か、変な括弧が多くて、非常に見にくい式です。また、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
間違ってた。
Substitute (
Case ( PatternCount ( 電話 ; "-" ) = 2;"[" & Replace (電話 ; Position ( 電話 ; "-" ; Position ( 電話 ; "-" ; 1 ; 1 ) ; 1 ) ; 1 ; "] " );電話) ;
"-" ; "ー" )
分かりやすいように?市外局番は[ ]にしてみた。
みなさま、ありがとうございました。
やはり、使いこなすのは難しいですね。
以前、特定の文字間の数値を取り出す質問をした際に GetAsNumber() を教えて頂いたので、今回も使えるかなと思ったのですが、だめでした。
Let, Trim やIsEmpty など目新しい関数も教えて頂いたので、今後に生かしていきたいと思います。
Traveller 様
わかりやすく表示して頂きありがとうございました。
うまくいきました。
今後ともどうぞよろしくお願いします。
余談ですが、こんなカスタム関数もありますよ。
http://www.fmpro.jp/fmi/xsl/plugin/cf.xsl?ID=0068
市外局番の桁合わせをしてくれるカスタム関数です。
普通の計算式としても使えそうです。
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 560.79 KiB (Peak: 579.21 KiB) ]