[教えて]Power QueryでCSVを読み込む(1)


【2025年9月】

ここまで、マクロや数式の作成などをAIに依頼してきましたが、このへんで機能の操作方法を聞いてみましょう。まずは、取得と変換(Power Query)です。今回は、CSVを開くところまで。開くのは、下図のようなCSVファイルです。

日付は、あえて8桁の数値にしています。これは、日付形式に変換してもらいます。あと、記号も後でVLOOKUP関数的な処理をします。

Power Queryで「"C:\Data\Daata09.csv"」を開き、「日付」列の8桁数値をシリアル値に変換して、アクティブシートに読み込む操作を教えて。
以下の手順で操作できます。

データのインポート
「データ」タブ → 「テキストまたはCSVから」→ ファイルパス
「C:\Data\Daata09.csv」を選択 → 「インポート」★1

Power Queryエディターで変換
Power Queryエディターが開いたら、「日付」列を選択。

8桁数値を日付シリアル値に変換
「列の追加」→「カスタム列」を選択し、以下の数式を入力
(例: 列名は「日付シリアル」):

= Date.FromText(Text.Start([日付],4) & "-" & Text.Range([日付],4,2) & "-" & Text.End([日付],2))
型の変更
追加した「日付シリアル」列を選択し、「型の変更」→「日付」を選択。

不要な列の削除や並べ替え(必要に応じて)

Excelシートに読み込み
「ホーム」タブ → 「閉じて読み込む」→「既存のワークシート」→ 
アクティブシートのA1セルを指定

これで、8桁数値の日付がExcelのシリアル値(日付形式)として
アクティブシートに読み込まれます。

すごく分かりやすい。では、ここに書かれているとおりに実行してみます。なお、私はExcelの超初心者です。

★1の操作をしたところ、上図の画面になりました。次の行程は「Power Queryエディターが開いたら、「日付」列を選択。」なのですが、これが"Power Queryエディター"なのでしょうか?いったい、どのボタンを押せばいいのでしょう。[開く]ボタンがありません。よく分からないので、左にある[読み込み]を押してみます。きっと、CSVファイルがPower Queryエディターに読み込まれるのでしょう。

なんか、CSVファイルがExcelに読み込まれてしまいました。そういうことを、したいのではありません。押すボタンを間違えたようです。とりあえず、このまま再度★1までやります。今度は、押さなかった[データの変換]ボタンをクリックしてみましょう。

おお、なんか違う画面になりました。タイトルバーに、ちゃんと「Data09 (2) - Power Query エディター」って書いてあります。間違いなさそうです。

「列の追加」→「カスタム列」を選択し、以下の数式を入力
(例: 列名は「日付シリアル」):

= Date.FromText(Text.Start([日付],4) & "-" & Text.Range([日付],4,2) & "-" & Text.End([日付],2))

指示の「列の追加」はタブで、「カスタム列」はボタンなのですね。数式をどこに入力するのか迷いましたが、「=」が書かれているところにコピペしました。上図のようになりましたので、[OK]ボタンをクリックしてみます。

えっ!?エラーです。私、何か間違えました?どうしよう?えと、[元に戻す]ボタンは?…ありません。とにかく、なんか間違えたようなので、右上の[×]ボタンを押します。

「変更を保持しますか?」って。保持って何?これを保存するってこと?何を?どこに?分かりません。こういうときは、最初からやり直します。一度Excelを終わらせて、新規ブックからスタートします。

何度やってもエラーです。普通のビギナーなら「ああ、やっぱ分かんない、Excelムズい」と諦めるところでしょうけど、私は違います!このエラーになった数式について、どうしたらよかったのかをAIに聞いてみます。

上記の操作で「= Date.FromText(Text.Start([日付],4) & "-" & Text.Range([日付],4,2) & "-" & Text.End([日付],2))」を入力するとエラーになるのはなぜ?どうしたらエラーにならないで、シリアル値に変換できる?
ご質問の式
= Date.FromText(Text.Start([日付],4) & "-" & Text.Range([日付],4,2) & "-" & Text.End([日付],2))

がエラーになる理由は、

Power Query(M言語)用の関数(Date.FromText, Text.Startなど)をExcelの
セルに直接入力しているためです。
ExcelのセルではM言語の関数は使えません。
「日付」列(例:20251109)は数値(または8桁の文字列)なので、Excelで
シリアル値に変換するには以下のような数式を使います。
=DATE(LEFT(A2,4), MID(A2,5,2), RIGHT(A2,2))
A2が「日付」セルの場合です。
テーブルの場合は、
=DATE(LEFT([@日付],4), MID([@日付],5,2), RIGHT([@日付],2))
この式でシリアル値(日付)に変換できます。

失礼な!そんなミスはしてません。Power Queryエディターで入れてます。

上記の操作で、Power Queryエディターの「カスタム列の式」に「= Date.FromText(Text.Start([日付],4) & "-" & Text.Range([日付],4,2) & "-" & Text.End([日付],2))」を入力するとエラーになるのはなぜ?どうしたらエラーにならないで、シリアル値に変換できる?
Power Queryエディターで
= Date.FromText(Text.Start([日付],4) & "-" & Text.Range([日付],4,2) & "-" & Text.End([日付],2))
がエラーになる主な理由は、[日付]列が「数値型」になっているため、
Text関数(Text.Startなど)が使えないことです。

【解決方法】
まず[日付]をテキスト型に変換してから処理してください。下記のように書きます。

= Date.FromText(
    Text.Start(Text.From([日付]), 4) & "-" &
    Text.Range(Text.From([日付]), 4, 2) & "-" &
    Text.End(Text.From([日付]), 2)
)
これでエラーにならず、日付のシリアル値(Power QueryのDate型)に変換できます。

あなた(AI)の指示って

8桁数値を日付シリアル値に変換
「列の追加」→「カスタム列」を選択し、以下の数式を入力
(例: 列名は「日付シリアル」):

= Date.FromText(Text.Start([日付],4) & "-" & Text.Range([日付],4,2) & "-" & Text.End([日付],2))
型の変更
追加した「日付シリアル」列を選択し、「型の変更」→「日付」を選択。

でしたよね。てことは、間違った操作方法を提示したってこと?私は正しかったのに、AIのあなたが指示を間違えたってこと?ま、いいけど。

やっとできた。で、次の行程は。

型の変更
追加した「日付シリアル」列を選択し、「型の変更」→「日付」を選択。

「型の変更」が見当たらないんですけど。他のタブも見たけど「型の変更」ボタンはないです。かなり悩んで、最終的に「日付シリアル」のタイトルを右クリックしたら見つけました。なんで、そう言わないかな。

不要な列の削除や並べ替え(必要に応じて)

Excelシートに読み込み
「ホーム」タブ → 「閉じて読み込む」→「既存のワークシート」→ 
アクティブシートのA1セルを指定

これで、8桁数値の日付がExcelのシリアル値(日付形式)として
アクティブシートに読み込まれます。

「不要な列の削除や並べ替え」って?「日付」列は不要なの?でも、「日付」列を削除したら「日付シリアル」列がエラーになるよね。分かんないから、Excelシートに読み込みます。

「既存のワークシート」ってのは出なかったんですけど。まぁ、とりあえずExcelに読み込めました。疲れました。記号のVLOOKUP関数的な処理は、また別のコンテンツとしてチャレンジします。

まとめ

今回のケースに限ってですけど。まず、操作の手順が不親切です。「これは、分かるよね」的なニュアンスを感じました。CSVを指定して[インポート]ボタンをクリックすると、ファイルの内容がプレビュー表示されます。そこにある[読み込み]ボタンは"Excelへの読み込み"です。Power Queryエディターに読み込むのでしたら[データの変換]ボタンを押します。だったら、そう書いてください。"Power Queryエディターで開きます"じゃなくて、どのボタンを押したらPower Queryエディターが開くのか、それを伝えなかったらダメです。そもそもAIは、このプレビュー画面が表示されることに触れていません。「これは、言わなくても分かるよね」の典型です。ビギナーは、ほんの少し異なるだけで混乱します。それがビギナーです。

M言語の数式を代入して、とりあえずシリアル値への変換ができました。その後の指示「型の変更」はリボンのボタンじゃなく右クリックからのメニューです。

追加した「日付シリアル」列を選択し、「型の変更」→「日付」を選択。

前半部分の解説は良いです。下手な解説文では、よく"「日付シリアル」を選択し"しか書かれていないことが多いですが、それが何の(どこの)"「日付シリアル」"なのかでビギナーは悩みます。だから"「日付シリアル」"とであることを明記した方が良いですし、さらにその列が"追加した「日付シリアル」列を選択し"と、「今あなたが追加した列のことですよ」と伝えています。とても親切で分かりやすい解説文です。しかし、後半部分の"「型の変更」→「日付」を選択"は、いただけません。"「型の変更」→「日付」"と明らかに手抜きの解説ですが、そもそも"「型の変換」"が、どこにあるかを省略しています。これも「まぁ、これくらいは分かりますよね」の表れです。分からないからビギナーなんです。ビギナー舐めないでください。ここは"「日付シリアル」列のヘッダを右クリックし、表示されるメニューから「型の変更」→「日付」を実行"と、書くべきです。

Excelのシートに読み込むのも、実行するのは「閉じて読み込む」じゃなく「閉じて次に読み込む...」です。そうしないと、好きなセルに読み込めません。さらに、カスタム列に入力する式も、M言語のDate.FromTextを使うんだから「日付」列が文字列になってる前提ですよね。ちゃんと最初のプロンプトで「「日付」列の8桁数値を」のように"数値"と書きました。情報を出さなかったわけじゃありません。AIが、これを見逃しています。その結果が、今回のエラーです。ビギナーはエラーになると、だいたいそこでパニックになります。そのへんの配慮が欲しかったですね~。全体的に、言ってることは正しいんだけど、要所で手順に不足があります。今回は、Power Queryという、Excelではない画面の操作だったので、特にそう感じました。長くなったので、続きは別のコンテンツとして書きます。