FileMakerでExcelのREPT関数を作る
FileMakerの小ネタシリーズです。今回はFileMakerでExcelのREPT関数を作ってみます。
ExcelのREPT関数とは
指定した文字列を指定した回数繰り返した文字列を返す関数
REPT関数の書き方
=REPT("指定文字列",数値)
例
=REPT("★",5)
返値
★★★★★
REPT関数の使いどころ
・関数の書き方の例のように評価を星の数で表すような場合
・簡易的な棒グラフの代わり
...etc
FileMakerでの実装方法
複数の方法が考えられるので今回は4つ紹介したいと思います。
サンプルファイルを用意したので以下からダウンロードしてご覧ください。
適当に「回数」や「文字列」を変えてみてください。結果1〜4のフィールドが自動的に変わります。以下では結果1〜4それぞれの実装方法を解説します。
方法1:while関数を使用する方法
while関数を使った方法です。繰り返し処理をするなら正攻法だと思います。念のためFileMakerのwhile関数を復習しましょう。
※while関数はVer18以降でないと使えません。
While
条件が真の間にロジックを繰り返してから、結果を返します。
構文
While ([初期変数] ; 条件 ; [ロジック] ; 結果)
while関数を使ってREPT関数をFileMakerのカスタム関数として組み込んでみます。
関数名
REPT
引数
myString:指定文字列
number:数値(回数)
While (
//初期変数
[
i = 0;
result=""
];
//終了条件
i <Number;
//ロジック
[
i= i+1;
result = result & myString
]
サンプルファイルではこれを「結果1」フィールドに計算式として仕込んであります。
方法2:べき乗とSubstitute()を使用する方法(オススメ)
式が簡単なのでオススメな方法です。これもカスタム関数として組み込んでみます。
関数名
REPT2
引数
myString:指定文字列
number:数値(回数)
Substitute ( 10^ number-1 ; "9" ; myString )
10のべき乗から1を引くと9が並んだ値になります。
例)10^3-1=1000-1=999 9が3つ並んだ文字列が得られる
この「9」をSubstitute関数で指定文字列に置換します。
式が簡単なのでオススメな方法です。
サンプロファイルではこの関数を「結果2」フィールドの計算式に指定してあります。
方法3:再帰関数を使う
カスタム関数を使って再帰関数を作る方法です。Ver18より前ではこの方法が正攻法であったと思います。
関数名
REPT3
引数
myString:指定文字列
number:数値(回数)
If (
number > 0 ;
myString & If ( number > 1 ; REPT3 ( myString ; number - 1) ; "");
""
)
サンプルファイルではこの関数を「結果3」フィールドの計算式に指定してあります。
方法4:スクリプトを使う
スクリプトの繰り返し処理を使う方法です。処理速度的にもあまりオススメではありませんが、カスタム関数もwhile関数も使えない(Advancedでない古いバージョンを使っている等)場合にはこういう方法もあるかなと思います。
指定文字列と数値(回数)をリスト(改行区切りのテキスト)で渡すと、指定回数文字列をつなげて返してくれるスクリプトを作ります。
スクリプト名
RREPT_by_script
引数
"指定文字列" & ¶ & 数値(回数)
指定回数だけループして文字列をつなげて結果を返すスクリプトを作ります。
実際に使用する時はレイアウトで数値のフィールドにスクリプトトリガーを仕込みます。これで、数値を変えると自動的に値を変えてくれるようになります。
詳しくはサンプルファイルのレイアウトで確認してみてください。
応用編 評価を★で表示してみよう
応用編として評価を★で表示させる機能を実装してみます。
・数値で0〜5の評価を★で表示する
・評価3ならカラーの★3つとグレーの★2つで表示する
サンプルファイルで「応用編」レイアウトを表示してください。
評価の値を変えるとその値に応じて★の表示が変わります。ウェブサイト等でもよくみられる表現法ですね。
「星表示」フィールドに以下の計算式を仕込んであります。
詳しくはサンプルファイルをご覧ください。
おわりに
FileMakerの小ネタシリーズ
今回はFileMakerでExcelのREPT関数を作ってみました。質問や感想、アドバイス等はコメントでお願いします。
よろしかったら「スキ」を教えてもらえると励みになります。シェアなどもお願いします。