PowerAppsで英数記号の全角と半角を相互に変換する方法

Code thinking

はじめに

Excelでアルファベットや数字、記号を全角↔半角で相互に変換したいときには、JIS/ASC関数という便利なのものがありますが、残念ながらPowerAppsにはそういった関数が用意されていないため、実現には少し工夫が必要になります。

ということで、この記事では、PowerApps上で全角文字と半角文字を相互に変換する方法をご紹介します。

なお、実装に当たっては、以下のサイトをかなり参考にさせていただきました。

PowerAppsで全角を半角にする|としじ
VBAみたいに便利な関数はないみたい、対応表作って自作がベスト? OnStartあたりにこれ仕込んでおく ClearCollect(_W_N_, {W:"0",N:"0"}, {W:"1",N:"1"}, {W:"2",N:"2"}, {W...
最終目標
  • PowerAppsでアルファベット、数字、記号の全角・半角を相互に変換できるようにする

コレクションの作成

少し長いですが、まず、全角文字と半角文字のペアを格納するコレクションを作成します。

このコレクションをアプリの起動時に初期化されるようにしたい場合は、AppのOnstartに記載しておけば大丈夫です。

// 全角・半角のペアコレクションを作成する
ClearColect(
    colZenHanPairs,
    {Zenkaku: "a", Hankaku: "a"},
    {Zenkaku: "b", Hankaku: "b"},
    {Zenkaku: "c", Hankaku: "c"},
    {Zenkaku: "d", Hankaku: "d"},
    {Zenkaku: "e", Hankaku: "e"},
    {Zenkaku: "f", Hankaku: "f"},
    {Zenkaku: "g", Hankaku: "g"},
    {Zenkaku: "h", Hankaku: "h"},
    {Zenkaku: "i", Hankaku: "i"},
    {Zenkaku: "j", Hankaku: "j"},
    {Zenkaku: "k", Hankaku: "k"},
    {Zenkaku: "l", Hankaku: "l"},
    {Zenkaku: "m", Hankaku: "m"},
    {Zenkaku: "n", Hankaku: "n"},
    {Zenkaku: "o", Hankaku: "o"},
    {Zenkaku: "p", Hankaku: "p"},
    {Zenkaku: "q", Hankaku: "q"},
    {Zenkaku: "r", Hankaku: "r"},
    {Zenkaku: "s", Hankaku: "s"},
    {Zenkaku: "t", Hankaku: "t"},
    {Zenkaku: "u", Hankaku: "u"},
    {Zenkaku: "v", Hankaku: "v"},
    {Zenkaku: "w", Hankaku: "w"},
    {Zenkaku: "x", Hankaku: "x"},
    {Zenkaku: "y", Hankaku: "y"},
    {Zenkaku: "z", Hankaku: "z"},
    {Zenkaku: "A", Hankaku: "A"},
    {Zenkaku: "B", Hankaku: "B"},
    {Zenkaku: "C", Hankaku: "C"},
    {Zenkaku: "D", Hankaku: "D"},
    {Zenkaku: "E", Hankaku: "E"},
    {Zenkaku: "F", Hankaku: "F"},
    {Zenkaku: "G", Hankaku: "G"},
    {Zenkaku: "H", Hankaku: "H"},
    {Zenkaku: "I", Hankaku: "I"},
    {Zenkaku: "J", Hankaku: "J"},
    {Zenkaku: "K", Hankaku: "K"},
    {Zenkaku: "L", Hankaku: "L"},
    {Zenkaku: "M", Hankaku: "M"},
    {Zenkaku: "N", Hankaku: "N"},
    {Zenkaku: "O", Hankaku: "O"},
    {Zenkaku: "P", Hankaku: "P"},
    {Zenkaku: "Q", Hankaku: "Q"},
    {Zenkaku: "R", Hankaku: "R"},
    {Zenkaku: "S", Hankaku: "S"},
    {Zenkaku: "T", Hankaku: "T"},
    {Zenkaku: "U", Hankaku: "U"},
    {Zenkaku: "V", Hankaku: "V"},
    {Zenkaku: "W", Hankaku: "W"},
    {Zenkaku: "X", Hankaku: "X"},
    {Zenkaku: "Y", Hankaku: "Y"},
    {Zenkaku: "Z", Hankaku: "Z"},
    {Zenkaku: "0", Hankaku: "0"},
    {Zenkaku: "1", Hankaku: "1"},
    {Zenkaku: "2", Hankaku: "2"},
    {Zenkaku: "3", Hankaku: "3"},
    {Zenkaku: "4", Hankaku: "4"},
    {Zenkaku: "5", Hankaku: "5"},
    {Zenkaku: "6", Hankaku: "6"},
    {Zenkaku: "7", Hankaku: "7"},
    {Zenkaku: "8", Hankaku: "8"},
    {Zenkaku: "9", Hankaku: "9"},
    {Zenkaku: " ", Hankaku: " "},
    {Zenkaku: "`", Hankaku: "`"},
    {Zenkaku: "-", Hankaku: "-"},
    {Zenkaku: "=", Hankaku: "="},
    {Zenkaku: "[", Hankaku: "["},
    {Zenkaku: "]", Hankaku: "]"},
    {Zenkaku: ";", Hankaku: ";"},
    {Zenkaku: "’", Hankaku: "'"},
    {Zenkaku: ",", Hankaku: ","},
    {Zenkaku: ".", Hankaku: "."},
    {Zenkaku: "/", Hankaku: "/"},
    {Zenkaku: "~", Hankaku: "~"},
    {Zenkaku: "!", Hankaku: "!"},
    {Zenkaku: "@", Hankaku: "@"},
    {Zenkaku: "#", Hankaku: "#"},
    {Zenkaku: "$", Hankaku: "$"},
    {Zenkaku: "%", Hankaku: "%"},
    {Zenkaku: "^", Hankaku: "^"},
    {Zenkaku: "&", Hankaku: "&"},
    {Zenkaku: "*", Hankaku: "*"},
    {Zenkaku: "(", Hankaku: "("},
    {Zenkaku: ")", Hankaku: ")"},
    {Zenkaku: "_", Hankaku: "_"},
    {Zenkaku: "+", Hankaku: "+"},
    {Zenkaku: "{", Hankaku: "{"},
    {Zenkaku: "}", Hankaku: "}"},
    {Zenkaku: "|", Hankaku: "|"},
    {Zenkaku: ":", Hankaku: ":"},
    {Zenkaku: """, Hankaku: """"},
    {Zenkaku: "<", Hankaku: "<"},
    {Zenkaku: ">", Hankaku: ">"},
    {Zenkaku: "?", Hankaku: "?"}
)

変換の適用

次に、作成したコレクションを使って、テキストを変換します。

// 全角を半角にしたい場合
Concat(
    Split("YourTextInput", ""),
    Coalesce(
        LookUp(colZenHanPairs, Zenkaku=Value).Hankaku, Value)
    )
)
// 半角を全角にしたい場合
Concat(
    Split("YourTextInput", ""),
    Coalesce(
        LookUp(colZenHanPairs, Hankaku=Value).Zenkaku, Value)
    )
)

このコードは入力されたテキスト “YourTextInput” の各文字を一文字ずつ確認し、それが全角文字であれば対応する半角文字に変換しています。なお、対応する半角文字がない場合(LookUpがnullを返す場合)、元の文字(Value)がそのまま使用されます。

そして、最後に変換された文字列全体が結合されて出力されます。

各関数の細かい説明は下記のとおりです。

  1. Concat(…)
    複数の文字列を結合して一つの文字列にします。
  2. Split(“YourTextInput”, “”)
    “YourTextInput” というテキストを一文字ずつに分割し、配列にします。例えば、[“Y”, “o”, “u”, …] といった形です。
  3. Coalesce(…)
    複数の引数を取り、最初にnullではない値を返します。
  4. LookUp(colZenHanPairs, Zenkaku=Value).Hankaku
    (例)全角→半角の変換
    colZenHanPairsコレクションを検索して、Zenkaku(全角文字)が分割された文字(Value)と一致するものを見つけ、その対応する半角文字(Hankaku)を取得します。

まとめ

この方法を使えば、PowerAppsで簡単に全角文字と半角文字の変換を行うことができます。コレクションさえ作っておけば、変換自体は難しくないので、その点がメリットかなと思います。

コメント