ユーザー定義関数コレクション No.007 – No.008|DecToBin 関数 BinToDec 関数

Power Apps
この記事は約4分で読めます。

Power Apps(Power Fx)には、Excelの DEC2BIN のような進数変換の組み込み関数が用意されていません。しかしいくつかの関数を組み合わせることで実現することは可能です。

そんな時に便利なのが、自分で関数を定義できるユーザー定義関数(UDF)です。今回は、10進数と2進数をお互いに変換する関数を作成したのでそれぞれご紹介します。

Power Apps のユーザー定義関数とは?

ユーザー定義関数は Power Apps 内でプログラミングでいうところのメソッドを定義できる機能で、ユーザーごとに独自の関数を作成し、それをアプリ内で利用できる機能のことです。

DecToBin関数・BinToDec関数とは

これらは、Power Fxで作成したユーザー定義関数で、以下のパラメータを指定して利用します:

  • 変換したい10進数の値 numDecToBin
  • 変換したい2進数の文字列 binBinToDec

Power Apps(Power Fx)には、Excelの DEC2BIN のような進数変換の組み込み関数が用意されていません。そこで、App オブジェクトの Formulas プロパティに自作の関数を登録して、10進数と2進数をお互いに変換できるようにしていきます。

使い方の具体例

実際にどのように動作するのか見てみましょう。 まずは10進数を2進数に変換する DecToBin関数 の式を紹介します。

DecToBin(num: Number): Text =
    If(
        num < 1,
        "0",
        With(
            { bits: RoundDown(Log(num, 2), 0) + 2 },
            With(
                {
                    full:
                        Concat(
                            Sequence(bits, bits - 1, -1) As Bit,
                            Text(Mod(RoundDown(num / Power(2, Bit.Value), 0), 2))
                        )
                },
                Mid(full, Find("1", full))
            )
        )
    );

数値を渡すと、その値を2進数の文字列に変換してくれます。

DecToBin(13)   // 1101
DecToBin(255)  // 11111111

桁数は入力した数値の大きさに応じて自動で計算されるので、上限を手で決めておく必要はありません。 ちなみに 0 を指定すると "0" が返ります。

DecToBin(0)        // 0
DecToBin(1000000)  // 11110100001001000000

続いて、逆方向に変換する BinToDec関数 の式です。

BinToDec(bin: Text): Number =
    With(
        { n: Len(bin) },
        Sum(
            ForAll(
                Sequence(n) As Idx,
                { v: Value(Mid(bin, Idx.Value, 1)) * Power(2, n - Idx.Value) }
            ),
            v
        )
    );

2進数の文字列を渡すと、10進数の数値に戻してくれるんですね。

BinToDec("1101")      // 13
BinToDec("11111111")  // 255

このように、DecToBinBinToDec をペアで用意しておくことで、好きな方向に自由に変換できる形となっています。

どんな場面で使えるの?

このDecToBin関数・BinToDec関数の利用用途としては、主に以下のような場面で活躍します:

  • ビットやフラグで管理している値の確認・可視化
  • 2進数を扱う学習用・教育用アプリ
  • 権限やオプションをビットで保持している場合の表示
  • テキスト入力された2進数を数値として計算したいとき
  • Sequence関数と組み合わせた変換表の作成

10進数と2進数の変換が必要な処理であれば、様々な場面で応用できるでしょう。

コメント

タイトルとURLをコピーしました