【パワークエリ】時間の平均を求めて列に追加する方法|mm:ss.0形式にも対応

Excelの「パワークエリ」機能を使って、時間の平均を計算し、列として追加したいと思い、今回その方法を学習・実装しました。
特に、「mm:ss.0」といったユーザー定義形式のデータを対象に処理を行いたいケースにおいて有効な手法です。


目次

実現したい内容

  • 時間データが「mm:ss.0」形式で記録されている
  • このデータを秒に変換して平均値を求めたい
  • 平均値を新しい列として追加し、クエリ上で扱えるようにしたい

秒に変換する関数を定義する

Power Query(M言語)で、まずは時間文字列を数値(秒単位)に変換する関数を作成します。
以下がそのコードです。

let
    // 時間データを秒に変換する関数の定義
    ConvertTimeToSeconds = (timeText as text) as number =>
        let
            TimeParts = Text.Split(timeText, ":"),
            Minutes = Number.From(Text.Start(TimeParts{0}, 2)),
            SecondsAndMilliseconds = Text.Split(TimeParts{1}, "."),
            Seconds = Number.From(SecondsAndMilliseconds{0}),
            Milliseconds = if List.Count(SecondsAndMilliseconds) = 2 then Number.From(SecondsAndMilliseconds{1}) / 1000 else 0,
            TotalSeconds = Minutes * 60 + Seconds + Milliseconds
        in
            TotalSeconds
in
    ConvertTimeToSeconds

コードの解説

  • Text.Split(timeText, ":") で分を抽出
  • Text.Split(..., ".") で秒とミリ秒を分割
  • Number.From(...) で文字列を数値に変換
  • 分・秒・ミリ秒をすべて足し合わせて、1つの「秒数データ」に変換しています

平均値の計算と列への追加方法(概要)

この関数を定義した後、以下のような手順で処理を進めます。

  1. 元のテーブルに新しいカラムを追加
  2. ConvertTimeToSeconds([時間列]) を使って各行の秒数を算出
  3. カスタム列として追加された秒データの平均を取得
  4. 必要であれば、再度「mm:ss.0」形式へフォーマット変換も可能

※ 本記事では「関数定義」までを中心に扱っており、後続のステップについては別記事にて補足可能です。


まとめ

Power Queryを使えば、Excel上で「mm:ss.0」形式の時間データを秒単位に変換し、数値として扱う処理が可能です。
関数を定義してしまえば、以降は非常に柔軟な集計・平均処理が行えます。

  • カスタム関数で秒数に変換
  • 平均値や合計値も簡単に計算可能
  • 数値形式で扱うことで、統計処理やフィルタ処理の精度が向上

本記事の内容が、同様の作業に取り組む方の参考になれば幸いです。

技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。

プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。

気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。

[Kindle Unlimited 読み放題プランをチェックする]


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次