PowerApps|姓名が逆転しているユーザー名は変数&関数で並べ替える

このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています
  • URLをコピーしました!

姓名が逆転しているユーザー名を変数と関数で並べ替える

PowerAppsではMicrosoft365に登録された情報から(ログインされた)ユーザー名を取得することができます。

しかし取得したユーザー名をそのまま使うことは難しい場合があります。例えば以下のような状態です。

会社や各コミュニティの設定次第ですがおおむねユーザー名は以下のような設定になっている事が多いです。

ユーザー名を取得した際に表示される名前
  • 名 姓の並びで表示される ・・・ (例)太郎 山田
  • 英語 / 日本語の並びで表示される ・・・ (例)Taro yamada / 太郎 山田

姓名が逆転していたり英語が先に表示される様です。困りましたね・・・。

Plat(プラット)

2番は1番の状態も含んでいますね。
基本は「日本語」かつ「姓名」の順で表示させたいです。

Aさん

英語が表示されることもあるんですね。
日本語と使い分けができると便利な気がします。

では2人が指摘している課題(問題点)を解決させていきましょう。今回は3つのアウトプットを用意します。

  • 1の文字列を日本語で姓名の順で表示させる
  • 2の文字列を日本語で姓名の順で表示させる
  • 2の文字列を英語でLastName FirstNameの順で表示させる

課題を解決させるうえで変数といくつかの関数を使うことになります。以降順番に説明していきます。

関連記事

変数について解説している記事です。変数にはいろいろな種類があります。

記事の中ではグローバル変数やコンテキスト変数について説明しています。

本記事ではグローバル変数を使います。グローバル変数が分からない人はまずリンク先の記事をご覧ください。

関連書籍

PowerAppsを理解するうえで関数の理解はかかせない要素です。

目次(リンク機能付き)

問題点を整理する

まずは問題点を整理します。冒頭で紹介した2つの事例はどんな時に起きるのか確認します。

加えてアプリ内でユーザー名を表示させるために使用する式も提示しておきます。

ユーザー名を取得した際に表示される名前
  • 名 姓の並びで表示される ・・・ (例)太郎 山田
    • PowerApps内でユーザー関数を使って値を取得する時
    • 式:User().FullName
  • 英語 / 日本語の並びで表示される ・・・ (例)Taro yamada / 太郎 山田
    • PowerAppsからSharePointのリストの中にあるユーザー列の値を取得する時
    • 式:列.DisplayName

傾向としてはどちらもフルネームで名前(FirstName)が先で名字(LastName)が後という事でしょうか。

あとは英語表記の有無ですね。表示としてはそんなに複雑なものではないという事がわかりました。

問題点に対して対策を用意する

解決策を再度見直します。3つの方法で表現するにはどんな作業が必要なのでしょうか?

ユーザー名を取得した際に表示される名前
  • 名 姓の並びで表示される ・・・ (例)太郎 山田
  • 英語 / 日本語の並びで表示される ・・・ (例)Taro yamada / 太郎 山田
  • 1の文字列を日本語で姓名の順で表示させる ・・・ 名字(苗字)、名前の順で表示
  • 2の文字列を日本語で姓名の順で表示させる ・・・ 日本語かつ名字(苗字)、名前の順で表示
  • 2の文字列を英語でLastName FirstNameの順で表示させる ・・・英語かつLastFirstの順で表示
Aさん

まずは文字列のブロックを切り分けたいです!

Plat(プラット)

そうですね。
その後は切り分けた文字列を収集し適宜出力したいですね。

Aさん

出力する際は自分が好きなように文字列を並べ替えたいです。

色々意見が出ました。やりたい事を実現する為の手順に落とし込みます。

  • 文字列のブロックを切り分ける ・・・ Split関数を使用
  • 切り分けた文字列を収集し適宜出力 ・・・ 変数(今回はグローバル変数)、Index関数を使用
  • 出力時に文字列を並べ替える ・・・ First関数、Last関数を使用

ではこれらの変数、関数を使用して課題を解決させていきます。

各種関数の説明

Split関数

特定の文字をキーとして文字列を分解することができる関数です。

Microsoftのドキュメントから内容、構文、パラメータを引用します。

内容

テキスト文字列をサブストリングのテーブルに分割します。

構文

Split( TextSeparator )

パラメータ

番号パラメータ必須/オプション内容
1Text必須分割するテキスト。
2Separator必須文字列の分割で使用する区切り記号。
0、1、またはそれ以上の文字を指定できます。
Microsoftドキュメント:Split 関数より抜粋、加工

Set関数

グローバル変数の値を設定する為に使用する関数です。

内容

グローバル変数の値を設定します。

構文

Set( VariableNameValue )

パラメータ

番号パラメータ必須/オプション内容
1VariableName必須作成または更新するグローバル変数の名前。
2Value必須変数に割り当てる値。
Microsoftドキュメント:Set関数より抜粋、加工

Index関数

内容

Index関数はテーブル内の順序付けられた位置に基づいてテーブルのレコードを返します。

レコード番号は 1 で始まるため、 First( table ) は Index( table, 1 ) と同じです。

Index関数は以下要件の時にエラーを返します。

  • 要求されたレコードのインデックスが 1 未満
  • テーブルのレコード数より大きい
  • テーブルが空である場合

構文

Index( TableRecordIndex )

パラメータ

番号パラメータ必須/オプション内容
1Table必須操作の対象となるテーブル。
2RecordIndex必須返すレコードのインデックスです。
レコード番号は 1 (数値)から始まります。
Microsoftドキュメント:First、FirstN、Index、Last、LastN 関数より抜粋、加工

First関数

テーブルの中で最初のレコードを返してくれる関数です。

内容

テーブル の最初のレコードを返します。

構文

First( Table )

パラメータ

番号パラメータ必須/オプション内容
1Table必須操作の対象となるテーブル。
Microsoftドキュメント:First、FirstN、Index、Last、LastN 関数より抜粋、加工

Last関数

テーブルの中で最後のレコードを返してくれる関数です。

内容

テーブルの最後のレコードを返します。

構文

Last( Table )

パラメータ

番号パラメータ必須/オプション内容
1Table必須操作の対象となるテーブル。
Microsoftドキュメント:First、FirstN、Index、Last、LastN 関数より抜粋、加工

変数は組み合わせて使うことができる

各変数は順番に紹介しましたが一緒に使うこともできます。

例えばSet変数の中にSplit関数を書く事も可能です。詳細はこの後紹介する動画の中でご確認ください。

関数は組み合わせて使うことができるという事例を紹介
lbl_1というラベルの値をSplit関数で区切ってから変数Japanese_nameにセットするという使い方をしています

作業、動作を動画で確認

記事冒頭で提示した課題を解決させるために動画を用意しました。(約4分)

実際のユーザー名は使えない為テキストラベルに入力した名前を並べ替えるという作業を見ていただきます。

前のブロックで説明した関数を組み合わせて必要に応じてフォームに値を出力させています。ご覧ください。

Plat(プラット)

各コントロールのプロパティにどんな関数を書いているのか
確認しやすい様に拡大視を取り入れて動画を作っています。

Aさん

変数を配列の様に使うんですね。
値の取り出し方も分かりやすく説明されています。

動画を作ってから1点気になることがありましたので加筆させていただきます。

「変数の初期化」ボタンでは変数stringは初期化できていません

仕様上問題無いので変数stringに対してBlank関数の値を代入していません。ご注意ください。

Blank関数

動画内の「変数の初期化」ボタンの中で使用している関数です。

Blank関数は値が無い状態を作り出すことができます。

内容

Blank 関数は、空白値を返します。

これを使用してこれらの値をサポートするデータ ソースに NULL 値を格納します。

フィールドから値を効果的に削除します。

構文

Blank()

パラメータ

無し

Microsoftドキュメント:Blank、Coalesce、IsBlank、および IsEmpty 関数から抜粋、加工

まとめ

変数と各種関数を使ってユーザー名を並べ替えるという作業について解説しました。

冒頭で挙げた課題も全て解決です。加えて動画で変数の動作環境についても勉強を進めることができました。

これでPowerApps内で各種名前を表示させる際に困ることは無いですね。

応用:今回の仕事はメールアドレスなどの情報でも転用できます

例えば@で区切るというような式を用意できればメールアドレスの前半だけ取得する事も可能です。

今回の作業は日常業務の中で活かせる場所がたくさんあります。ご自身で関数を使って試してみてください。

参考情報:公用文等における日本人の姓名のローマ字表記に関する関係府省庁連絡会議

私は英語で名前を表記する際の書き方(大文字、小文字、順番など)は何が正なのか未だに分かりません。

これが正というわけではないのですが日本政府の見解を見つけましたのでリンクを用意しておきます。

  • 「姓ー名」の順
  • 姓は全て大文字
  • 名の先頭は大文字で残りは小文字
  • 姓と名の間にスペース

項目としては4点です。3番と4番は資料の中にしっかり明記されていませんが状況から判断しています。

指定された様に書いてみましょう。山田太郎さんの場合は「YAMADA Taro」となります。

ただしこの要件は「必須」ではなくあくまで政府からの要請というかたちです。

よってこれからはこの様式がスタンダードになっていくのかもしれません。

よかったらシェアしてください!
  • URLをコピーしました!