パワークエリのM関数「Number.Round」のサムネイル
AさんAさん

Power Queryエディター上の「四捨五入」コマンドだと、数値によって四捨五入の結果が、ワークシート関数のROUNDと異なってしまいます。。
この場合、どうしたら良いですか?

森田森田

その場合、M関数の「Number.Round」を使えば良いですよ!
では、詳細を解説していきますね。

はじめに

この記事は「四捨五入」・「カスタム列」コマンドの詳細を把握していることが前提です。

参考記事

「四捨五入」・「カスタム列」コマンドの詳細は、以下の記事をご参照ください。


「Number.Round」の使いどころ

通常、クエリ内の一連の整形作業の中で、四捨五入を行いたい場合、Power Queryエディター上の「四捨五入」コマンドを使います。

しかし、「四捨五入」コマンドは、デフォルトは「銀行型丸め」が適用されており、ワークシート上の関数のROUNDと結果が異なる場合があります(ROUNDは「算術型丸め」)。

この銀行型丸めだと、中間の0.5が偶数側に丸められてしまいます。

たとえば、4行目の数値は元が「1498.5」であるため、通常(算術型丸め)の四捨五入であれば「1499」になるはずが、銀行型丸めだと「1498」となってしまいます。

Power Queryエディター上でも算術型丸めで四捨五入を行いたい場合、「カスタム列」ダイアログ上で「Number.Round」を活用しましょう。

「四捨五入」コマンドの注意事項(デフォルトが銀行型丸め)

Number.Roundを活用することで、指定の数値列を算術型丸めで四捨五入できます。

構文

Number.Roundの構文は以下の通りです。

Number.Round ( number , [digits] , [roundingMode] )
丸めた数値を返します。桁数と丸めモードを指定できます。

引数名 必須 データ型 説明
number 数値 四捨五入したい数値列を指定します。
digits 数値 四捨五入の結果の桁数を指定します。
roundingMode 数値 四捨五入の丸めモードを指定します。

引数「number」がnullの場合、Number.Roundの戻り値もnullを返す。
引数「number」に数値以外を指定した場合、Number.Roundの戻り値はエラー値「Error」を表示。
引数「digits」を省略時、四捨五入の結果は整数(小数点以下の桁数:0)となる。
引数「roundingMode」を省略時、丸めモードは「RoundingMode.ToEven」と見なされ、銀号型丸めで四捨五入される。

参考記事

必要に応じ、Microsoft Learnの「Number.Round」の記事もご参照ください。

【参考】引数「digits」の指定パターン

引数「digits」は、ワークシート関数のROUNDと同様に正負どちらの整数も指定できます。

一例として、この引数を「-2」と「2」をそれぞれ設定した結果が以下です。

パワークエリのM関数「Number.Round」の引数「digits」の指定パターン

このように、整数部分の端数処理も可能です。

参考記事

ワークシート上の関数の「ROUND」の詳細は、以下の記事をご参照ください。

【参考】引数「roundingMode」の指定パターン

引数「roundingMode」は、任意の丸めモードを指定しましょう。

数式入力時、引数「roundingMode」はIMEモードを半角英数にした上で「r」と入力するとサジェストされるため、任意の丸めモードを選択し、「Tab」キーで確定するか、各丸めモードを示す数値を入力してください。
サジェストに表示される「RoundingMode.Type」は丸めモードに似ているが対象外。

パワークエリのM関数「Number.Round」の引数「roundingMode」の指定パターン

なお、丸めモードそれぞれの内容は、以下の表をご覧ください。

数値 丸めモードの名前 説明
0 RoundingMode.Up 四捨五入する可能性のある数値の間に結び付きがある場合は、切り上げます。
1 RoundingMode.Down 四捨五入する可能性のある数値の間に結び付きがある場合は、切り下げます。
2 RoundingMode.AwayFromZero 四捨五入する可能性のある数値の間に結び付きがある場合は、0とは逆の方向に切り上げます。
3 RoundingMode.TowardZero 四捨五入する可能性のある数値の間に結び付きがある場合は、0の方向に切り下げます。
4 RoundingMode.ToEven 四捨五入する可能性のある数値の間に結びつきがある場合は、最も近い偶数に四捨五入します。

実務では算術型丸めを意味する「2」の「RoundingMode.AwayFromZero」を指定すればOK。

参考記事

必要に応じ、Microsoft Learnの「RoundingMode.Type」の記事もご参照ください。

数式例・使用イメージ

「割引後金額」列を算術型丸めで整数(少数点以下の桁数:0)へ四捨五入したイメージが以下です。

パワークエリのM関数「Number.Round」の数式例・使用イメージ

カスタム列で参照している数値列は不要であれば別途削除してください。

ステップ登録手順

「カスタム列」コマンドでNumber.Roundを登録したい場合は、以下の手順となります。

パワークエリのM関数「Number.Round」のステップ登録手順

  1. リボン「列の追加」タブをクリック
  2. 「カスタム列」をクリック
  3. 任意の列名を入力
    ※今回は「四捨五入」
  4. 「n」を入力
  5. サジェストから「Number.Round」を選択し、「Tab」キーで確定
  6. 「(」を入力
  7. 四捨五入したい数値列を選択
    ※今回は「割引後金額」列
  8. コンマ(,)を入力
  9. 任意の桁数を入力
    ※今回は「0」
  10. コンマ(,)を入力
  11. 「r」を入力
  12. サジェストから「RoundingMode.AwayFromZero」を選択し、「Tab」キーで確定
  13. 「)」を入力
  14. 「OK」をクリック

手順②以降、IMEを半角英数モードにすること。
手順⑪⑫は「2」を入力でもOK。

登録したステップの変更手順

Number.Roundのステップを後から変更する場合、以下の手順となります。

パワークエリのM関数「Number.Round」のステップ変更手順

  1. 「追加されたカスタム列」ステップの歯車マークをクリック
  2. 任意の箇所を修正
  3. 「OK」をクリック

手順①のステップ名は「カスタム列」コマンドのデフォルトの名前(自身でリネームしている場合は別表記)。
手順①はステップ名をダブルクリックでもOK。
手順①で起動した「カスタム列」ダイアログは、ステップに設定した内容がセットされた状態。

サンプルファイルで練習しよう!

可能であれば、以下のサンプルファイルをダウンロードして、実際に操作練習をしてみてください。

サンプルファイル_PowerQueryデータ整形_Number.Round.xlsx

サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります(上記リンクから登録フォームへ遷移します)。

ブックを開いたら、「売上明細」クエリを編集(Power Queryエディター起動)し、次の手順を実施してください(今までの解説のまとめです)。
ブック起動時、「セキュリティの警告」メッセージが表示された場合は「コンテンツの有効化」をクリック。

  1. リボン「列の追加」タブをクリック
  2. 「カスタム列」をクリック
  3. 任意の列名を入力
    ※今回は「四捨五入」
  4. 「n」を入力
  5. サジェストから「Number.Round」を選択し、「Tab」キーで確定
  6. 「(」を入力
  7. 四捨五入したい数値列を選択
    ※今回は「割引後金額」列
  8. コンマ(,)を入力
  9. 任意の桁数を入力
    ※今回は「0」
  10. コンマ(,)を入力
  11. 「r」を入力
  12. サジェストから「RoundingMode.AwayFromZero」を選択し、「Tab」キーで確定
  13. 「)」を入力
  14. 「OK」をクリック

本記事の解説と同じ結果になればOKです!

さいごに

いかがでしたでしょうか?

Number.Roundを活用することで、指定の数値列を算術型丸めで四捨五入できます。

一連の整形作業の中で、算術型丸めの四捨五入を処理したい場合に活用してみましょう!

なお、パワークエリの各種テクニックは、私の拙著でも体系的に解説していますので、こちらも参考にしてみてください。


また、よりコアな情報を発信していくために「公式LINE」を開始しましたので、ご興味があれば以下バナーから友だち追加をお願いします!
特典として、Excelワークシート関数一覧(計22スライド)やExcelショートカットキー一覧(計25スライド)等をプレゼント!

森田貢士の公式LINEへの友だち追加告知用バナー

ご参考になれば幸いですm(_ _)m

森田森田

Number.Roundに慣れたら、他の数値列の計算に役立つM関数もチャレンジしてみましょう。
具体的には、数値の切り上げができる「Number.RoundUp」や、数値の切り捨てができる「Number.RoundDown」等です。
他にどんなM関数があるかは、Microsoft Learnの「Power Query M関数参照」も参照してみてくださいね!