Power QueryでCSVを読み込んだのに、列名が「Column1」「Column2」…のままになることがあります。データの1件目が見出しになり、本来の見出しや最初のデータが消えたように見えることもあります。どちらも、多くは「CSVのどの行を、どのステップで見出しに昇格させているか」がずれていることが原因です。
Power Queryでは、Csv.Document がCSVを列に分けます。そのあとの Table.PromoteHeaders が、1行目を見出しに昇格させます。昇格のステップがあるか、2つのステップの間に何があるかを確認すれば、たいていは直せます。
症状から原因の見当をつける
| 見えている状態 | 考えられる原因 | 最初に見る場所 |
|---|---|---|
| 列名が Column1, Column2… のまま | 見出しを昇格するステップがない | 適用したステップ |
| Column1 の1列だけになり、値の中にタブやセミコロンが残っている | 区切り文字の指定が違う | 「ソース」ステップの Delimiter |
| タイトル行や空行が見出しになり、本来の見出しが1件目のデータとして残る | 先頭の余分な行を消す前に昇格している | ステップの順番 |
| データの1件目が見出しになり、件数が1件少ない | 見出しのないCSVを昇格している、または昇格を2回している | CSVの1行目とステップの数 |
| 一部の列だけ Column3 や「金額_1」のような名前になる | 見出し行に空欄や同じ名前がある | CSVの見出し行 |
CSVの先頭をテキストエディターで確認する
まず、CSVの先頭数行をメモ帳などのテキストエディターで開きます。Excelで直接開くと、空行や区切り文字の違いが見えにくくなります。
確認するのは次の3点です。
- 1行目が本当に見出しか(タイトル、出力日時、空行が先に来ていないか)
- 見出しが何行目にあるか
- 区切り文字がカンマか、タブやセミコロンか
たとえば、システムから出力したCSVが次のようになっていることがあります。
売上明細(2026年9月分)
出力日時,2026/10/01 09:00
日付,取引先,金額
2026/09/01,A商事,12000
2026/09/02,B工業,8500
この例では、見出しは4行目です。1行目をそのまま昇格すると「売上明細(2026年9月分)」が見出しになり、本来の「日付,取引先,金額」はデータの途中に残ります。
適用したステップの順番を見る
Power Queryエディターの右側にある「適用したステップ」で、ステップの並びを確認します。「データ」タブの「テキストまたはCSVから」で取り込んだ場合は、次の並びになることが多いです。
- ソース(
Csv.Document) - 昇格されたヘッダー数(
Table.PromoteHeaders) - 変更された型(
Table.TransformColumnTypes)
「ホーム」タブの「詳細エディター」を開くと、同じ内容をM言語で確認できます。
let
ソース = Csv.Document(File.Contents("C:\data\sales.csv"),[Delimiter=",", Columns=3, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"昇格されたヘッダー数" = Table.PromoteHeaders(ソース, [PromoteAllScalars=true]),
#"変更された型" = Table.TransformColumnTypes(#"昇格されたヘッダー数",{{"日付", type date}, {"取引先", type text}, {"金額", Int64.Type}})
in
#"変更された型"
ステップ名や引数の値は、Excelのバージョンや取り込んだファイルによって変わります。見るべきなのは次の2点です。
Table.PromoteHeadersがあるかTable.PromoteHeadersの最初の引数が、どのステップを受け取っているか
各ステップは、引数に書かれたステップの結果を受け取ります。ステップを追加しても、昇格のステップが古いステップ名を参照したままだと、追加した処理は結果に反映されません。
原因別の直し方
昇格のステップがない
Csv.Document だけでは見出しは作られず、列名は Column1, Column2… になります。「テキストまたはCSVから」は見出しの有無を自動で判定しますが、内容によっては見出しと判定されないことがあります(たとえば、全列が文字列のデータ)。編集中に昇格のステップを削除した場合も、同じ状態になります。
直し方は次のとおりです。
- 「適用したステップ」で「ソース」を選ぶ
- 「ホーム」タブの「1行目をヘッダーとして使用」を押す
- ステップを途中に挿入するか確認されたら「挿入」を選ぶ
昇格より前に「変更された型」がある場合は注意が必要です。Column1, Column2… に型を設定してから昇格すると、見出しの文字列が数値や日付の列に入ってエラーになることがあります。型の設定が意図どおりに引き継がれない場合もあります。昇格前の型変換ステップは削除し、昇格のあとで型を設定し直します。
先頭に余分な行がある
見出しより前にタイトル行、出力日時、空行がある場合は、それらを削除してから昇格します。
- 「適用したステップ」で「ソース」を選ぶ
- 「ホーム」タブの「行の削除」から「上位の行の削除」を選ぶ
- 削除する行数(上の例なら3)を入力する
- そのあとに「昇格されたヘッダー数」が来ていることを確認する
M言語では次の並びになります。
ソース = Csv.Document(File.Contents("C:\data\sales.csv"),[Delimiter=",", Columns=3, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"削除された上位の行" = Table.Skip(ソース, 3),
#"昇格されたヘッダー数" = Table.PromoteHeaders(#"削除された上位の行", [PromoteAllScalars=true]),
詳細エディターで手で書き足した場合は、Table.PromoteHeaders の最初の引数を ソース から #"削除された上位の行" に書き換えたかを必ず確認します。ソース のままだと、行を削除したステップが飛ばされます。
月によってタイトル行の数が変わるCSVでは、行数を固定すると前提が崩れます。その場合は、見出しの最初の列名が現れるまで飛ばす書き方にします。
#"削除された上位の行" = Table.Skip(ソース, each [Column1] <> "日付"),
Table.Skip に条件を渡すと、条件を満たしている間の行を飛ばします。この例では、Column1 が「日付」になる行の手前までを削除します。ただし、「日付」と完全に一致する行が見つからないと、すべての行が飛ばされて空の表になります。見出しの前後に空白が入っていないかも含め、結果の件数を確認してください。
あわせて、「ソース」ステップの Columns= の数が実際の見出しの列数と合っているかも見ておきます。数が少ないと、右側の列が読み込まれません。
区切り文字が違う
値がすべて Column1 の1列に入り、中にタブやセミコロンが見えている場合は、区切り文字が合っていません。「ソース」ステップの歯車アイコンから区切り記号を選び直すか、Delimiter を書き換えます。タブ区切りなら Delimiter="#(tab)"、セミコロン区切りなら Delimiter=";" です。区切り文字を直すと列数も変わるため、Columns= の値も確認します。
見出しのないCSVを昇格している
見出し行がなく1行目からデータが始まるCSVを昇格すると、1件目のデータが列名になり、データが1件減ります。この場合は昇格のステップを削除し、列名を自分で付けます。
Csv.Document の Columns には、列数の代わりに列名のリストを渡せます。こうすると、ソースの段階で列名が決まります。
ソース = Csv.Document(File.Contents("C:\data\sales.csv"),[Delimiter=",", Columns={"日付","取引先","金額"}, Encoding=65001, QuoteStyle=QuoteStyle.None]),
ステップを分けたい場合は、昇格の代わりに Table.RenameColumns で Column1 などの名前を変えても構いません。
昇格が2回入っている
「1行目をヘッダーとして使用」を2回押すと、正しい見出しのあとに、データの1件目まで見出しに上がります。「適用したステップ」に昇格のステップが2つないかを確認し、後ろの1つを削除します。
フォルダーから複数のCSVを結合している場合は、昇格の重なりにも注意します。「サンプル ファイルの変換」などの補助クエリで昇格したうえで、結合後のクエリでもう一度昇格していることがあります。どのクエリで昇格しているかを確認し、1回にそろえます。
一部の列名だけおかしい
昇格の順番は正しいのに一部の列名だけおかしい場合は、CSVの見出し行そのものを確認します。
- 見出しが空欄の列は、Column3 のような仮の名前のまま残ることがある
- 同じ名前の見出しが複数あると、「金額_1」のように末尾に番号が付くことがある
- 1列目の名前の先頭に見慣れない記号が付く場合は、
Encodingの指定がファイルの文字コードと合っていない可能性がある
空欄や重複は、昇格のあとに列名を変更するか、出力元で見出しを直してもらいます。
直したあとに確認すること
見出しが正しく見えても、次の点を確かめてから使います。
- 列名がCSVの見出しと一致している(全角・半角、前後の空白も含む)
- 最初のデータ行が消えていない(CSVで見出しの次にある行が、1行目に入っている)
- 件数が「CSVの行数 − 余分な行 − 見出し1行」と合っている(Excelに読み込んだあとのテーブルの行数で確認)
- 型変換のあとに、数値や日付の列にエラーが出ていない
- データの途中に、見出しと同じ値(「日付」「取引先」など)の行が混ざっていない
- 翌月のCSVで余分な行の数が変わっても、同じ手順で読み込める
型変換のステップは列を名前で指定しています。見出しを直して列名が変わった場合は、型変換のステップも作り直します。古い列名が残っていると、更新時にエラーになります。
