PowerAppsで文字列の全角半角無視して比較とか検索かけたい

# PowerAppsでいこう

最近、業務改善の流れで ようやく<font color="lightblue">Microsoft365</font>の扱い方を
会社が認知してきたというか存在に気がついたというか。
<font color="darkblue">Teams</font>で<font color="purple">Lists</font>を使って棚の物品管理に着手したようです。


## Listsでは検索機能(列のフィルター)が弱い？
自分で調べた限りでは、各アイテムをチェックボックスで表示非表示を切り替えるだけみたいです。

## そんなところにやっぱり要望があがりました。
部分一致するアイテム名だけでフィルターかけたいってよ。
最初は、いや使い方の話なら調べてから聞いてくれよ。なんて思っていましたが
よくよく使ってみると何ともまぁ使い勝手悪いこと。

この事に触れて、対策としてPowerAppsを利用する記事を見つけました。

https://zenn.dev/wancon/articles/f389d9e89462d5

全角文字を半角文字へ変換するというもの。

これを検索ワードへ応用する事で
文字列を全て 全角→半角変換した上で、一致判定するという事です。

これによって
大文字小文字は、`Lower()`や`Upper()`関数が標準関数として用意されているので
小文字統一や大文字統一する事で
対応可能で
全角半角は、自作Componentの関数で半角統一する事で
対応可能となったわけですね。

検索関数用に自作Componentの中でワード検索するってのもお洒落かな。

### まぁ、そんな話は置いといて
どういうわけだか どの記事にも英数字しか対応がされていない。
カタカナは！？？記号とかは！！？？

はい。
面倒だけどカタカナと濁点半濁点付きカタカナ、記号やらを対応できるように
先人の知恵に上塗りさせてもらってます。

いや、めっちゃ大変。全角半角文字ってこんなに多いのね。
そりゃみんなやらんわな。

### 少しでも、後の人々が楽になりますように。
以下、コンポーネント内のプロパティへ入力して活用して下さい。
変数名が英数字指してるってのはほっといて下さい。
もうカタカナ打って疲れたんです。

``` PowerFx
With({tblAlphabetNumList:Table(
        {key:"１",val:"1"},{key:"２",val:"2"},{key:"３",val:"3"},{key:"４",val:"4"},{key:"５",val:"5"},
        {key:"６",val:"6"},{key:"７",val:"7"},{key:"８",val:"8"},{key:"９",val:"9"},{key:"０",val:"0"},
        {key:"①",val:"1"},{key:"②",val:"2"},{key:"③",val:"3"},{key:"④",val:"4"},{key:"⑤",val:"5"},
        {key:"⑥",val:"6"},{key:"⑦",val:"7"},{key:"⑧",val:"8"},{key:"⑨",val:"9"},{key:"⓪",val:"0"},
        {key:"⑩",val:"10"},{key:"⑪",val:"11"},{key:"⑫",val:"12"},{key:"⑬",val:"13"},{key:"⑭",val:"14"},
        {key:"⑮",val:"15"},{key:"⑯",val:"16"},{key:"⑰",val:"17"},{key:"⑱",val:"18"},{key:"⑲",val:"19"},
        {key:"⑳",val:"20"},{key:"㉑",val:"21"},{key:"㉒",val:"22"},{key:"㉓",val:"23"},{key:"㉔",val:"24"},
        {key:"㉕",val:"25"},{key:"㉖",val:"26"},{key:"㉗",val:"27"},{key:"㉘",val:"28"},{key:"㉙",val:"29"},
        {key:"㉚",val:"30"},{key:"㉛",val:"31"},{key:"㉜",val:"32"},{key:"㉝",val:"33"},{key:"㉞",val:"34"},
        {key:"㉟",val:"35"},{key:"㊱",val:"36"},{key:"㊲",val:"37"},{key:"㊳",val:"38"},{key:"㊴",val:"39"},{key:"㊵",val:"40"}
        ,
        {key:"Ａ",val:"A"},{key:"Ｂ",val:"B"},{key:"Ｃ",val:"C"},{key:"Ｄ",val:"D"},{key:"Ｅ",val:"E"},
        {key:"Ｆ",val:"F"},{key:"Ｇ",val:"G"},{key:"Ｈ",val:"H"},{key:"Ｉ",val:"I"},{key:"Ｊ",val:"J"},
        {key:"Ｋ",val:"K"},{key:"Ｌ",val:"L"},{key:"Ｍ",val:"M"},{key:"Ｎ",val:"N"},{key:"Ｏ",val:"O"},
        {key:"Ｐ",val:"P"},{key:"Ｑ",val:"Q"},{key:"Ｒ",val:"R"},{key:"Ｓ",val:"S"},{key:"Ｔ",val:"T"},
        {key:"Ｕ",val:"U"},{key:"Ｖ",val:"V"},{key:"Ｗ",val:"W"},{key:"Ｘ",val:"X"},{key:"Ｙ",val:"Y"},{key:"Ｚ",val:"Z"},
        {key:"ａ",val:"a"},{key:"ｂ",val:"b"},{key:"ｃ",val:"c"},{key:"ｄ",val:"d"},{key:"ｅ",val:"e"},
        {key:"ｆ",val:"f"},{key:"ｇ",val:"g"},{key:"ｈ",val:"h"},{key:"ｉ",val:"i"},{key:"ｊ",val:"j"},
        {key:"ｋ",val:"k"},{key:"ｌ",val:"l"},{key:"ｍ",val:"m"},{key:"ｎ",val:"n"},{key:"ｏ",val:"o"},
        {key:"ｐ",val:"p"},{key:"ｑ",val:"q"},{key:"ｒ",val:"r"},{key:"ｓ",val:"s"},{key:"ｔ",val:"t"},
        {key:"ｕ",val:"u"},{key:"ｖ",val:"v"},{key:"ｗ",val:"w"},{key:"ｘ",val:"x"},{key:"ｙ",val:"y"},{key:"Ｚ",val:"z"}
        ,
        {key:"ア",val:"ｱ"},{key:"イ",val:"ｲ"},{key:"ウ",val:"ｳ"},{key:"エ",val:"ｴ"},{key:"オ",val:"ｵ"},
        {key:"カ",val:"ｶ"},{key:"キ",val:"ｷ"},{key:"ク",val:"ｸ"},{key:"ケ",val:"ｹ"},{key:"コ",val:"ｺ"},
        {key:"サ",val:"ｻ"},{key:"シ",val:"ｼ"},{key:"ス",val:"ｽ"},{key:"セ",val:"ｾ"},{key:"ソ",val:"ｿ"},
        {key:"タ",val:"ﾀ"},{key:"チ",val:"ﾁ"},{key:"ツ",val:"ﾂ"},{key:"テ",val:"ﾃ"},{key:"ト",val:"ﾄ"},
        {key:"ナ",val:"ﾅ"},{key:"ニ",val:"ﾆ"},{key:"ヌ",val:"ﾇ"},{key:"ネ",val:"ﾈ"},{key:"ノ",val:"ﾉ"},
        {key:"ハ",val:"ﾊ"},{key:"ヒ",val:"ﾋ"},{key:"フ",val:"ﾌ"},{key:"ヘ",val:"ﾍ"},{key:"ホ",val:"ﾎ"},
        {key:"マ",val:"ﾏ"},{key:"ミ",val:"ﾐ"},{key:"ム",val:"ﾑ"},{key:"メ",val:"ﾒ"},{key:"モ",val:"ﾓ"},
        {key:"ヤ",val:"ﾔ"},{key:"ユ",val:"ﾕ"},{key:"ヨ",val:"ﾖ"},
        {key:"ラ",val:"ﾗ"},{key:"リ",val:"ﾘ"},{key:"ル",val:"ﾙ"},{key:"レ",val:"ﾚ"},{key:"ロ",val:"ﾛ"},
        {key:"ワ",val:"ﾜ"},{key:"ヲ",val:"ｦ"},{key:"ン",val:"ﾝ"},
        {key:"ァ",val:"ｧ"},{key:"ィ",val:"ｨ"},{key:"ゥ",val:"ｩ"},{key:"ェ",val:"ｪ"},{key:"ォ",val:"ｫ"},
        {key:"ヤ",val:"ｬ"},{key:"ュ",val:"ｭ"},{key:"ョ",val:"ｮ"},{key:"ッ",val:"ｯ"}
        ,
        {key:"ー",val:"ｰ"},{key:"”",val:""""},{key:"’",val:"'"},{key:"‘",val:"`"},{key:"　",val:" "},
        {key:"￥",val:"\"},{key:"＄",val:"$"},{key:"！",val:"!"},{key:"？",val:"?"},
        {key:"＃",val:"#"},{key:"％",val:"%"},{key:"＆",val:"&"},{key:"＊",val:"*"},{key:"＄",val:"$"},
        {key:"＜",val:"<"},{key:"＞",val:">"},{key:"＝",val:"="},{key:"～",val:"~"},{key:"｜",val:"|"},
        {key:"＠",val:"@"},{key:"：",val:":"},{key:"；",val:";"},{key:"＋",val:"+"},{key:"・",val:"･"},
        {key:"／",val:"/"},{key:"＼",val:"\"},{key:"＿",val:"_"},{key:"＾",val:"^"},{key:"。",val:"｡"},{key:"、",val:"､"},{key:"，",val:","},
        {key:"（",val:"("},{key:"）",val:")"},{key:"［",val:"["},{key:"］",val:"]"},{key:"｛",val:"{"},{key:"｝",val:"}"},
        {key:"「",val:"｢"},{key:"」",val:"｣"}
        ,
        {key:"ヴ",val:"ｳﾞ"},
        {key:"ガ",val:"ｶﾞ"},{key:"ギ",val:"ｷﾞ"},{key:"グ",val:"ｸﾞ"},{key:"ゲ",val:"ｹﾞ"},{key:"ゴ",val:"ｺﾞ"},
        {key:"ザ",val:"ｻﾞ"},{key:"ジ",val:"ｼﾞ"},{key:"ズ",val:"ｽﾞ"},{key:"ゼ",val:"ｾﾞ"},{key:"ゾ",val:"ｿﾞ"},
        {key:"ダ",val:"ﾀﾞ"},{key:"ヂ",val:"ﾁﾞ"},{key:"ヅ",val:"ﾂﾞ"},{key:"デ",val:"ﾃﾞ"},{key:"ド",val:"ﾄﾞ"},
        {key:"バ",val:"ﾊﾞ"},{key:"ビ",val:"ﾋﾞ"},{key:"ブ",val:"ﾌﾞ"},{key:"ベ",val:"ﾍﾞ"},{key:"ボ",val:"ﾎﾞ"},
        {key:"パ",val:"ﾊﾟ"},{key:"ピ",val:"ﾋﾟ"},{key:"プ",val:"ﾌﾟ"},{key:"ペ",val:"ﾍﾟ"},{key:"ポ",val:"ﾎﾟ"}
    )},
    With({tblResult:
        AddColumns(
            Split(strInput,"") As SPLT,
            strOutput,
            Coalesce( LookUp(tblAlphabetNumList,key=SPLT.Value,val),SPLT.Value)
        ) },
        Concat(tblResult,strOutput)
    )
)


```