はじめに
こんにちは。
夜中に小腹が減っている男です。
かなり昔、プログラマの先輩から
「楽をするためなら、どんな苦労も厭わない」
というセリフを聞いたことがあります。
システム化って、まさにこれだよなって思っています。
「システム化する」という苦労をすると、数時間かかっていた作業が数分で終わるようになります。
また、プログラミング作業自体も同様です。
処理を関数化しておけば、同じコードを何回も書かなくて良いし、他の人のコードを参考にできて楽になります。
ここでは、そんな話をします。
ユーザ定義関数(UDF)
Power Apps の ユーザ定義関数(UDF = User Defined Function) というものがあります。
UDF はユーザが独自の関数を作成できる機能です。
同じ処理を関数にまとめることができるので、アプリの生産性や保守性を向上できます。
まさに、「楽をするためなら、どんな苦労も厭わない」機能です。
補足)UDF を使うための設定
現在('24/11/17)、UDF は試験段階の機能です。利用するためには以下の設定が必要です。
UDF の定義方法
書式
関数名 (パラメタ名1: パラメタ型1, パラメタ名2: パラメタ型2, … ): 戻り値の型=式;
例
// 指定した数に1を足す関数
CountUp (n:Number): Number = n+1;
UDF の利用例
Microsoft は米国企業なんですよね。
日本語ローカライズのためのUDFを定義しておくと便利だろうなぁと思って、こんなものを作ってみました。
西暦年 → 和暦年変換
// 西暦年を指定すると、和暦年に変換するユーザ関数
// (明治1~令和30年、1868~2048年まで)
ConvJapanYear(y:Number):Text = If(
y < 1868, "(明治以前)",
y < 1912, "明治 " & (y - 1868 + 1),
y < 1926, "大正 " & (y - 1912 + 1),
y < 1989, "昭和 " & (y - 1926 + 1),
y < 2019, "平成 " & (y - 1989 + 1),
y < 2049, "令和 " & (y - 2019 + 1),
"(不明)"
) & " 年";
利用例: ConvJapanYear(2018)
戻り値 → "平成 30 年"
西暦日付 → 和暦日付変換
// 西暦日付を指定すると、和暦日付に変換するユーザ関数
// (Date関数が1900までしか対応していないので、明治33~令和30年、1900~2048年まで)
ConvJapanDate(d:Date):Text =
If(
d < Date(1912,7,30),
"明治 " & (Year(d) - 1868 + 1),
d < Date(1926,12,25),
"大正 " & (Year(d) - 1912 + 1),
d < Date(1989,1,8),
"昭和 " & (Year(d) - 1926 + 1),
d < Date(2019,5,1),
"平成 " & (Year(d) - 1989 + 1),
d < Date(2049,12,31),
"令和 " & (Year(d) - 2019 + 1),
"(不明)"
) & " 年" & Text(d," m 月 d 日");
利用例: ConvJapanDate(Today())
戻り値 → "令和 6 年 11 月 17 日"
指定した月を漢字表記に変換
ConvMonthKanji(m:Number):Text=Index(["一","二","三","四","五",
"六","七","八","九","十","十一","十二"],m).Value & "月";
利用例: ConvMonthKanji(1)
戻り値 → "一月"
指定した月を和暦表記に変換
ConvMonthNameWareki(m:Number):Text=Index(["睦月","如月","弥生","卯月","皐月",
"水無月","文月","葉月","長月","神無月","霜月","師走"],m).Value;
利用例: ConvMonthNameWareki(1)
戻り値 → "睦月"
指定日の曜日を日本語1文字で返す
ConvWeekDayNameJ1(d:Date):Text=Switch(Weekday(d),
1,"日",2,"月",3,"火",4,"水",5,"木",6,"金",7,"土","");
利用例: ConvWeekDayNameJ1(Today())
戻り値 → "日"
補足)UDF の命名ガイドライン
メンテナンスのため、ある程度は命名のルール決めはした方がいいっすよね。
ボクはこんな感じで定義するようにしています。
関数名
- 機能が理解できる名前
- 英字、数字のみ使用可(1文字目数字NG、日本語NG)
- パスカルケースで書く(複数単語をスペースなしで連結、単語1文字目を大文字、それ以外小文字)
- 可読性が上げたい場合、アンダーバー(”_”)使用可
パラメタ名
- 内容が分かる範囲で、できるだけ短く
- 英字、数字のみ使用可(1文字目は数字NG、日本語NG)
さいごに
今年も Qiita に助けられることが多かった一年でした。
ありがとうございました。
来年もよろしくお願いいたします。
では、良いお年をお迎えください。