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

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

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

You are not logged in.

Announcement

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


#1 2024-01-06 13:40:51

kenshin
Member

TextColor関数で数字のみ色を変更したい

OS:Windows 11
FileMaker:FileMaker 20

お世話になっております。
テキストフィールドで「あいう123えお」と入力されている文字の中で「123」の数字のみ色を変更したい
と考えております。

TextColor関数、Fileter関数、Substite関数を組み合わせて利用すればできるかなと考えておりましたがうまくいきません。
この様にすれば実現できる等があれば教えて頂ければ幸いです。

以上です。
よろしくお願いいたします。

Offline

#2 2024-01-06 15:56:42

himadanee
Guest

Re: TextColor関数で数字のみ色を変更したい

数字が1か所だけですか?

そうでなければ、数字は10文字しかないので10文字分地道に置換するぐらいでは。
Substitute ( field ; [ "1" ; TextColor("1";RGB(255;0;0)) ] ; 以下同様 )

#3 2024-01-07 16:16:51

kenshin
Member

Re: TextColor関数で数字のみ色を変更したい

数字は最大で5桁になります。
1文字ずつ変換するしか方法はありませんかね・・・・

Offline

#4 2024-01-07 17:51:29

Shin
Member

Re: TextColor関数で数字のみ色を変更したい

loop回して文字列を探し出せば、まとめて書式設定できますが。
結構面倒な処理になりますよ。

必ず、あいう123えお のように、文字/数字/文字 となるのでしたら、
Let (
[
   txt = "あいう123えお" ;
   sep = Char ( 0 ) & Char ( 1 ) ;
   txt0 = Substitute ( txt ;[ "0" ; sep ];[ "1" ; sep ];[ "2" ; sep ];[ "3" ; sep ];[ "4" ; sep ];[ "5" ; sep ];[ "6" ; sep ];[ "7" ; sep ];[ "8" ; sep ];[ "9" ; sep ];[ Char ( 1 ) & Char ( 0 ) ; "" ];[ sep ; ¶ ]) ;
   txt1 = GetValue ( txt1 ; 1 ) ;
   txt2 = GetValue ( txt1 ; 2 ) ;
   num = Middle (  txt ; Length ( txt1 ) + 1 ; Length ( txt ) - Length ( txt1 ) - Length ( txt2 ) )
] ;
   txt1 & TextColor ( num ; RGB ( 255 ; 0 ; 0 ) ) & txt2
)
でいけるかも。(検証していません)

Offline

#5 2024-01-07 18:09:57

kenshin
Member

Re: TextColor関数で数字のみ色を変更したい

himadaneeさん、Shinさん
ご回答ありがとうございます。

Shinさんに頂いた回答内容で一度検証確認してみたいと思います。

Offline

#6 2024-01-07 18:38:14

himadanee
Guest

Re: TextColor関数で数字のみ色を変更したい

数字が何桁でも1か所しか出てこないなら、GetAsNumberで簡単では。
Let ( n = text + 0 ;
Substitute ( text ; n ; TextColor ( n ; RGB(255;0;0) ) )
)

数字の前に文字を挟んでハイフンがあると、マイナス扱いされてうまくいきませんね。

#7 2024-01-07 23:03:43

Shin
Member

Re: TextColor関数で数字のみ色を変更したい

数字列が1個だけなら、Filterで取り出してもいいかも。
負数が混じるなら、- を含めてFilterして、その結果でPatternCount すれば、判別できます。
それを使って、Substitute で書式をつければいいでしょう。
こっちの方がシンプルですね。
Let (
[
   txt = "あいう123えお" ;
   num = Filter ( txt ; “0123456789-“ ) ;
   num = Case (
         PatternCount ( txt ; num ) ; num ;
         Filter ( num ; “0123456789” )
      )
] ;
   Substitute ( txt ; num ; TextColor ( num ; RGB(255;0;0) ) )
)

修正しました

Last edited by Shin (2024-01-08 11:47:15)

Offline

#8 2024-01-08 10:58:54

himadanee
Guest

Re: TextColor関数で数字のみ色を変更したい

#7は、Filterの行の閉じカッコが抜けてます。

「数字のみ」というのに負数があるとは思いませんが、#6では「aaa-b234ccc」みたいにハイフンがあるのを問題にしてたのですが、こうすれば無視できた。
Let ( n = Abs ( text ) ;
Substitute ( text ; n ; TextColor ( n ; RGB(255;0;0) ) )
)

あとは小数点というかピリオドがあると「aa.a234ccc」やっぱりこれではだめですね。。。すなおにFilter使った方がいいかな。
「aaa-234ccc」の場合にハイフンの色を変えないとすれば、#7よりシンプルになりますし。

#9 2024-01-10 20:19:02

kenshin
Member

Re: TextColor関数で数字のみ色を変更したい

結果報告が遅くなりました。申し訳ございません。

色変更に関してですが、「あいう123えお、かき456くけこ」の様な場合では色変更が反映されません・・・。
フィールドとして「文字(数字)文字、文字(数字)文字」の様な場合はループ等で計算するしか方法はないんですかね・・・。

Offline

#10 2024-01-10 20:50:58

himadanee
Guest

Re: TextColor関数で数字のみ色を変更したい

#4以降の発言は全部数字が1か所だけという前提でやってましたから、それは当然の結果です。

複数個所あるなら、#2に戻って、10文字分の置換を書けば簡単です。数字なので10種類しかないですから、へたにループを考えるより間違いがないのでは。
全部同じ色でしょうから、RGB(255;0;0)と直接書いてるのを変数にすれば大して長くもならないし。
数字でなくアルファベットを、とかいうと何とか簡略化したくなりますが...

「、」が必ずあって、各範囲では数字が1か所だけ、とか条件があるならそれに応じた方法とかも考えられなくもないですが、複雑になる一方という気がします。

#11 2024-01-11 20:55:20

kenshin
Member

Re: TextColor関数で数字のみ色を変更したい

himadaneeさん、Shinさん ご回答ありがとうございました。

今回実現したかったデータは数字が複数個所ありましたので#2の方法で対応し実現できましたので
解決とさせて頂きます。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 521.55 KiB (Peak: 526.09 KiB) ]