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