なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

Power Query:半角に変換する/全角に変換する

Excelだったら JIS関数・ASC関数で簡単に済む話なんだけど、Power Queryには全角半角変換の機能や関数が現時点では用意されていない。テーブルに読み込んでからワークシート関数で変換してやってもいいっちゃいいけど、それではどうにも不格好である。

クエリ内で処理する場合、単純には置換リストを用意してやって、それを使って置換してやればいい。

こういうの。ただ「その置換リストを作るのが面倒なんだよ」となるだろうから、予め作っておいたリストをバイナリ変換しておいた。

置換リスト(全角から半角)
Json.Document(Binary.Decompress(Binary.FromText("ZZRnd9NAEEX/CpgOAdylpffeOyQGrNUuvRM6/HZ4TmauvHzJ8Z2dI+c+Pe/qam9tfdSfD3or/z7kPK16s5XN2XBzVg2YjWyvZja2vSGzie0FZlPbGzGrbG/OrLa9MbNgew2zue1NmDU2mzKLPtPfkDhp7aRjnXxWbmc7wb3p+6zYbizRigQaTzSU25ZrRQ6N5zovty3dijQaT7cpty3jKjLzjGO5bUlXLTNPui23Pe/OzPNO5bbnnZl53rnctrzrvs9i32fFdrS8a9oahz4rt73H/CfR8q7pcZz4rHyC5V3T5lj5rNy2vGs6HYPPym3Lu6bZ0ZKuaXa0pGv6Gy3jmpZGy7imi9HTpXGtp1s2rh0sn5Ba6xnTxXbks/I54+WTznM8aVraesZlS9tq+aTzHE+a/raedNnfdr580nmO593Z9rzLZrft8knnOZ59Z2bZB5qdLPtAf5OlHmhksrwDvUveZrJLlnSgcclvZbJJlnGga8lvZQyT5RroX7JcA/1Llmigf8myDPQvWZaB/iVLMdClZPmFjlv+f5b9Jiar7HcwGWTLb4pHtvwCuWS/fcvfcvbbt/MEv30xzH4P8pazJTEl7eDp8B3B06E1fRlu2cRhf7AhvPiwMcu5L+Gt4MK1B8tzGyjF7aC8doBS2gmqE7tA1WE3qCbsAVWCvaAM94GSWwH11veDeuEHwMW7Pui80MZ4IOMBKOMhKOERKOExKOEJKOEpKOEKlHANSjiAEj4ESvgwKOEjoISPghI+Bkr4uONQvidA+Z4E5XsKlO9pUL5nQPmeBeV7DpTveVC+F0D5XgTlewmU72VQvldA+V4F5XsNlO91x5F8b4DyvQnK9xYo39ugfO+A8r0LyvceKN/7oHwfgPJ9CMr3ESjfVXDxa12DJTwDJfwYlPATx7GEn4ISnoMSbkAJR1DCLSjhBEo4gxJ+Bkr4OSjhF6CEX4ISfgVK+DUo3zegfN+C8n3nOJHve1C+H0D5fgTl+wmU72dQvuugfL+A8v0KyvcbKN/voHx/gPL9Ccr3Fyjf36B8//Rms78="), Compression.Deflate))

これをエディタに貼りつければ置換リストができる。

※もしこっちのほうがいいよというのがあったら、BinryTextの文字列をコメントしてください。

あとは上記のリストを使って文字列を変換してやればいい。

列を追加する場合
    ソース = Excel.CurrentWorkbook(){[Name="T_置換前"]}[Content],
    型の変更 = Table.TransformColumnTypes(ソース, {{"列1", type text}}),
    半角に変換 = Table.AddColumn(
        型の変更,
        "列2",
        each Text.Combine(
            List.ReplaceMatchingItems(Text.ToList([列1]), 置換リスト)
        ),
        type text
    )

これで「列1」の全角文字を「列2」で半角に変換される。

累計の時にも書いたけど、変換は List.Accumulateでやってもいい。

        each List.Accumulate(
            置換リスト, [列1], (x, y)=> Text.Replace(x, y{0}, y{1})
        )

この場合、半角を全角に変換したい時は「y{0}」と「y{1}」を入れ替えればいい。

 

当該列を直接編集したい場合は、

列を直接編集する場合
    ソース = Excel.CurrentWorkbook(){[Name="T_置換前"]}[Content],
    型の変更 = Table.TransformColumnTypes(
        ソース, {{"列1", type text}}
    ),
    半角に変換 = Table.TransformColumns(
        型の変更, {
        "列1",
        each Text.Combine(
            List.ReplaceMatchingItems(Text.ToList(_), 置換リスト)
        ),
        type text
    })

こんな感じ。