文字のバイト数を数える試み |Power Query


2020/6/14追記:別記事にて6行で書けましたので、そちらを見てください。
文字のバイト数を数える試み~その2 |Power Query

Power QueryじゃExcelのLENB関数みたいなことはできないのかな、と思い調べた結果です。
日本語だけに限っても例外はありそうですので、不具合は現場で対処してください。僕もそういう気持ちで使います。
Excelならワークシート関数のLENBを使えるので、その方が確実でしょう。

コード

今回は挙動の確認を重視したため、関数化せずに示しました。
使えそうなら、関数化でも何でもしてください。

q_表示バイト数計算
//デバッグのため、引数宣言をコメントアウト
//(TargetTexts as text)=>
let
    //↓デバッグ用。確認できたら、コメントアウトして関数にすればいい。
    TargetTexts ="漢字カンジかんじ",

    //1字ずつばらしたテーブルにする。
    SplittedText = Table.FromValue( Text.ToList( TargetTexts ) ),

    //便宜的にリストにすることでJSONのbinaryに変換でき、バイト数を数えることができる。
    AddJsonColumn  =Table.AddColumn(SplittedText,"JSON",each Json.FromValue( {[Value]} )),
    //JSON既定の両端の括弧とダブルクウォートの計4字を除くため、4を引く。
    半角英数判定 =Table.AddColumn(AddJsonColumn,"半角英数判定",each 1=Binary.Length( [JSON] )-4,type logical),

    //判定用に半角カタカナのリストを得る。
    半角カタカナ群 = List.Transform({65381..65439},Character.FromNumber ),

    半角カタカナ判定 =Table.AddColumn(半角英数判定,"半角カタカナ判定",each List.Contains(半角カタカナ群,[Value]),type logical ), 
    表示幅計算    = Table.AddColumn(半角カタカナ判定, "表示幅",each
                         if List.AnyTrue({[半角英数判定],[半角カタカナ判定]}) then 1
                         else 2
                        ,Int64.Type
                   )
in
    表示幅計算

結果

あとは表示幅のところを集計してやれば、バイト数になります。

補足

JSONのbinaryデータがどうなっているのか、ということについての参考。
半角英数以外は1桁にならず、6桁のコードで表示されるようです。(その意味は知らないです

おためしコード
let
    Source = "abcde01234あいうえお",
    Custom1 = Json.FromValue( {Source} ),
    Custom2 = Text.FromBinary( Custom1 )
in
    Custom2

上記のコードを入れるとこんな感じになる。

参考

UTF8のサイトを示しておられて、助かりました。
http://orange-factory.com/dnf/utf-8.html

UTF8の文字コード(英語)
https://unicode.org/charts/PDF/UFF00.pdf