10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft Power AppsAdvent Calendar 2024

Day 5

ユーザ定義関数(UDF)活用・・・和暦表示

Last updated at Posted at 2024-11-17

はじめに

こんにちは。
夜中に小腹が減っている男です。

かなり昔、プログラマの先輩から
「楽をするためなら、どんな苦労も厭わない」
というセリフを聞いたことがあります。

システム化って、まさにこれだよなって思っています。

「システム化する」という苦労をすると、数時間かかっていた作業が数分で終わるようになります。

また、プログラミング作業自体も同様です。
処理を関数化しておけば、同じコードを何回も書かなくて良いし、他の人のコードを参考にできて楽になります。

ここでは、そんな話をします。

ユーザ定義関数(UDF)

Power Apps の ユーザ定義関数(UDF = User Defined Function) というものがあります。

UDF はユーザが独自の関数を作成できる機能です。
同じ処理を関数にまとめることができるので、アプリの生産性や保守性を向上できます。

まさに、「楽をするためなら、どんな苦労も厭わない」機能です。

補足)UDF を使うための設定

現在('24/11/17)、UDF は試験段階の機能です。利用するためには以下の設定が必要です。

image.png

UDF の定義方法

書式

関数名 (パラメタ名1: パラメタ型1, パラメタ名2: パラメタ型2, … ): 戻り値の型=式;

 // 指定した数に1を足す関数
CountUp (n:Number): Number = n+1;

image.png

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 に助けられることが多かった一年でした。
ありがとうございました。

来年もよろしくお願いいたします。
では、良いお年をお迎えください。

10
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?