PowerApps│StartsWith関数で電話帳マルチページをかんたんに作る方法

こんにちは、あんこ先生です。

指定した1文字で始まるデータを抽出したいことありませんか?

たとえば、電話帳であ行の人だけ表示するといった処理です。

しかし、Search関数では文字列のどこかが一致していれば抜いてくるので思うように実現できません。

そこで、今回は文字列の先頭からx文字が一致するかを判定するStartsWith関数を使ったデータ抽出を紹介します。

ニッチな機能ですが、ここぞというときに使える頼もしい関数です。

この記事を読んでいただければ、StartsWith関数を使いこなせるようになるはずです。

StartsWith関数を使った電話帳マルチページの作り方

今回は頭文字を並べて、選択した頭文字で始まる人に絞って情報を表示させます。

指定した文字で始まるかどうか調べるには、StartsWith関数を使用します。

in演算子Search関数を使用した場合、頭文字がどこかに含まれていたら抽出されるため今回は使用できません。

一応、Left関数と組み合わせて比較させれば同じことができます。

とはいえ、せっかく専用の関数が用意されているのだから、こちらを使いましょう。


StartsWith関数とは


StartsWith関数は、対象となる文字列が指定した文字列で始まるかどうかを調査します。

その結果となる戻り値は、ブール値になります。

StartsWith関数単体で使用した場合、大文字と小文字、全角半角、ひらがなとカタカナは別物として区別します。

とDocsにも記載されているんですが、実際は少々異なるようです。

Filter関数やLookUp関数と組み合わせた場合、それらを同一として処理します。

つまり、”A”と”a”、”ア”と”ア”、”あ”と”ア”はtrueを返します。

今回はこの特性を活かして、カタカナのフリガナ列をひらがなの頭文字で抽出します。

“ふりがな”はひらがな、”フリガナ”はカタカナで書くのがマナーだよ!

StartsWith関数のケース別記述方法


直接指定した文字で始まっているか判定

指定文字に文字数に制限はありません。

//テキスト入力の値が"あ"で始まっていればtrueを返す
StartsWith(TextInput1.Text,"あ")

//テキスト入力の値が"りんごの"で始まっていればtrueを返す
StartsWith(TextInput1.Text,"りんごの")


変数の値で始まっているか判定

指定文字を変数に格納すれば動的に判定できます。

//テキスト入力の値が変数wordの値で始まっていればtrueを返す
StartsWith(TextInput1.Text,word)


テーブルに格納されたいずれかの値で始まっているか判定

ForAll関数と組み合わせれば、テーブル内の確認もできます。

//テーブル内にひとつでも"ま"が含まれていればtrueを返す
!IsEmpty(Filter(
    ForAll(_Search,
        StartsWith("まりも",ThisRecord.Value)
    ).Value,
    Value=true)
)

//フリガナが"ま"で始まるすべてのデータを返す
Sort(
    Filter(個人情報テストデータ,
        StartsWith(kana,"ま")
    )
,kana,Ascending)

行ごとに抽出できる電話帳マルチページを作成する

今回は3つのギャラリーで構成されています。

  1. あの段を表示するgalInitials
  2. 選択した列を表示するgalSelWord ←割愛
  3. 選択された頭文字で抽出したgalItemList

②の解説を加えると複雑になるので今回は割愛します。

②を含めたサンプルアプリを安価で販売していますので、もし興味があればコチラからお求めください。

では、それぞれの作り方を見ていきましょう。


段を選択するギャラリー作成│galInitials


オレンジで囲ったギャラリーです。

ギャラリーのItemsプロパティは次の通りです。

["あ","か","さ","た","な","は","ま","や","ら","わ"]

あとはテンプレートにテキスト入力を追加し、ThisItem.Valueと記述します。

次に、選択することで変数_Searchへその行のテーブルが格納されるようにします。
OnSelectの記述は次の通りです。

Set(_Search,
    Switch(ThisItem.Value,
        "あ",["あ","い","う","え","お"],
        "か",["か","き","く","け","こ"],
        "さ",["さ","し","す","せ","そ"],
        "た",["た","ち","つ","て","と"],
        "な",["な","に","ぬ","ね","の"],
        "は",["は","ひ","ふ","へ","ほ"],
        "ま",["ま","み","む","め","も"],
        "や",["や","ゆ","よ"],
        "ら",["ら","り","る","れ","ろ"],
        "わ",["わ","を","ん"]
    )
);

たとえば、を選択した場合は“あ,い,う,え,お”が格納されます。

この格納された文字のいずれかで始まるデータが次のギャラリーに表示されます。


抽出結果を表示するギャラリー作成│galItemList

ほぼコントロールを配置していくだけなので、Itemsプロパティのみ解説します。

Filter関数を選択した場合は、“あ,い,う,え,お”で順番に抽出していきます。

3文字の場合、4-5行目が空になるので抽出されません。

Sort(
        Filter(個人情報テストデータ,
            StartsWith(kana,Index(_Search,1).Value) ||
            StartsWith(kana,Index(_Search,2).Value) ||
            StartsWith(kana,Index(_Search,3).Value) ||
            StartsWith(kana,Index(_Search,4).Value) ||
            StartsWith(kana,Index(_Search,5).Value) 
        )
,kana,Ascending)


電話を発信できるようにする


テンプレートに適当なアイコンを加えて、OnSelectに次を記載します。

Launch("tel://"&ThisItem.Tel)

とても簡単ですね。

StartsWith関数で電話帳マルチページをかんたんに作る方法のまとめ

今回はStartsWith関数で電話帳マルチページをかんたんに作る方法を紹介しました。

StartsWith関数の使い方やIn演算子Search関数との使い分けもわかりましたね。

割愛していますが、入れ子ギャラリーで個別の一文字のみ選択できるようにすればさらに便利なものになります。

電話帳だけでなく、商品や消耗品台帳、入退室管理などにも応用できますね。

ひとつ作っておくと使いまわしできるのでおススメです。

作るのがめんどくさい・・・という人はサンプルを安価で販売していますので、コチラをご確認ください。

アイキャッチ

ご支援よろしくおねがいします

この記事を気に入ってくださった方、寄付してあげてもいいよという方がいらっしゃっいましたら、ご支援いただけると助かります。

下記リンクからAmazonギフト券で、金額は15円からお気持ちを入力してください。

受取人のメールアドレスは amazon@anko7793.com までお願いします。

メッセージもいただけるとたいへん喜びます。

よろしくお願いします。

Amazonギフト券(Eメールタイプ) 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
七草あんこ
非IT系中間管理職やってます。社命によりoffice365を主軸とした業務改善プロジェクトメンバーに任命されたことでPowerAppsと出会えました。いまではビジネス・プライベートを問わず、欠かせないツールになっています。導入初期やアプリ作成時に遭遇した諸問題の解決法とサンプルアプリの作り方を紹介していきます。主にTwitterで情報収集しているので不明点など呟いているとお邪魔するかもしれません。