https://www.youtube.com/watch?v=tC_84sHW3dg
修正したコード
// 2026/03/08 テスト001
// まず、空のクエリーにメイン関数を貼り付けてください
// メイン処理
// 名前は何でも
//--- JRAオッズのCNAMEを取得する パワークエリ 26/02/15テスト
// doActionからパラメーターを切り出す
// cname=pw15oli00/6Dで 今週の開催を取り出す
let
// JRAホームページからソースを取得する POST送信で結果を受け取る
strURL = "https://www.jra.go.jp/JRADB/accessO.html",
strPARA = Text.ToBinary("cname=pw15oli00/6D"),
strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"],
ソース = Web.Contents(strURL, [Headers = strHEAD, Content = strPARA]),
文字列 = Text.FromBinary(ソース, 932),
HTMLソース = Lines.FromText(文字列),
テーブルに変換済み = Table.FromList(HTMLソース, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
フィルターされた行 = Table.SelectRows(テーブルに変換済み, each Text.Contains([Column1], "Action") and Text.Contains([Column1], "回")),
条件2_1 = "accessO.html', '",
条件2_2 = "');"">",
Column2を追加 = Table.AddColumn(フィルターされた行, "CNAME", each Text.BetweenDelimiters([Column1], 条件2_1, 条件2_2)),
//【ここから追加】Column3を作成
// '</i>' と '</a></div>' の間のテキストを抽出します
条件3_1 = "</i>",
条件3_2 = "</a></div>",
Column3を追加 = Table.AddColumn(Column2を追加, "開催", each Text.BetweenDelimiters([Column1], 条件3_1, 条件3_2)),
// 開催の結果
開催の結果 = Table.RemoveColumns(Column3を追加,{"Column1"}),
// ソースのクエリー結果(テーブル)をレコードのリストに変換
lst処理リスト = Table.ToRecords(開催の結果),
str馬券の種類 = "単勝,枠連,馬連,ワイド,馬単,3連複,3連単",
// ループ処理 リストを順番に処理する List.Transformで変換するのが順番に呼び出すイメージ?
テーブル一覧 = List.Transform(
lst処理リスト,
each 開催別にCNAME取得(_[CNAME], _[開催], str馬券の種類)
),
// 結合,上でテーブルのリストが作成されているので、それを一つにつなげる
t_all = Table.Combine(テーブル一覧)
in
t_all
//----
// 2026/03/08 テスト002
// 空のクエリーに 開催別にCNAME取得 で作成する
// メインから呼ばれる関数
// 関数化して開催地別に馬券の種類でループしたCNAMEを返す
// 関数で引数を受け取り、テーブルを返す
// 26/02/10 ※枠連にすると、枠連無し8頭までで不具合になることを見つける・・・追加のバグを記載すること
(str開催地CNAME as text, str開催地と開催日 as text, str馬券種類 as text) as table =>
let
// 開催地別HTMLの取得なので、POST送信は場所ごとにWebクエリーは1回だけ走らせる
// JRAホームページからソースを取得する POST送信で結果を受け取る
strURL = "https://www.jra.go.jp/JRADB/accessO.html",
// 引数で受け取った開催地のCNAMEをパラメーターとする 26/01/25修正
strCNAME = "cname=" & str開催地CNAME,
strPARA = Text.ToBinary(strCNAME),
strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"],
ソース = Web.Contents(strURL, [Headers = strHEAD, Content = strPARA]),
HTML文字列 = Text.FromBinary(ソース, 932),
HTMLソース = Lines.FromText(HTML文字列),
// HTMLソースLISTをテーブルに変換して、フィルターなどで使う
テーブルに変換済み = Table.FromList(HTMLソース, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
// ここまでが、一回だけのPOST取得後、HTMLソースを取得した時の処理、
// ここから、個別の馬券者別単位で処理を行う
// ※初めからリストでもらう手もあるけど、カンマ区切り文字列からリストを作成
// --- 馬券種類を List に分解 "単勝,馬連,3連複" → { "単勝","馬連","3連複" } ---
馬券種類List =
List.Transform(
Text.Split(str馬券種類, ","),
each Text.Trim(_)
),
// 作成したリストを使用して、種類別にループ(変換)を行う
馬券別テーブル =
List.Transform(
馬券種類List,
(txt券種 as text) =>
let
// CNAMEを取得したいので、フィルターをかけ、文字列を抜き出す
フィルターされた行 = Table.SelectRows(
テーブルに変換済み,
each Text.Contains([Column1], "Action")
and Text.Contains([Column1], txt券種)),
// doActionのパラメーターを抜き出し 列"CNAME"を作る
条件3_1 = "doAction('/JRADB/accessO.html', '", // ここから
条件3_2 = "'", // 次のシングルコーテーションまで抜き出す
CNAMEを追加 = Table.AddColumn(
フィルターされた行,
"CNAME",
each Text.BetweenDelimiters([Column1], 条件3_1, 条件3_2)),
//場所の処理 新列 "今週の開催地" を追加する、引数で受け取った場所をそのままセットする
追加された場所 = Table.AddColumn(CNAMEを追加, "今週の開催地", each str開催地と開催日),
//馬券の種類を追加する List変換処理中の券種をセットする
追加された種類 = Table.AddColumn(追加された場所, "馬券の種類", each txt券種),
// 2026/02/08 処理の追加 ダミーの連番インデックス列を追加します (0から始まる連番が振られます)
インデックス列の追加 = Table.AddIndexColumn(追加された種類, "Index", 0, 1),
// レース番号をクラス名 を指定して取得します
レース番号抽出 = Html.Table(HTML文字列, {
{"RaceNO", ".race_num img", each [Attributes][alt]}
}),
// 新列"レース番号"を作成します
レース番号を追加 = Table.AddColumn(
インデックス列の追加,
"レース番号",
each レース番号抽出{_[Index]}[RaceNO]
),
// 発走時刻をクラス名とタグ td.time を指定して取得します
発走時刻抽出 = Html.Table(HTML文字列, {
{"time", "td.time"}
}),
// 新列"発走時刻"を作成します
発走時刻を追加 = Table.AddColumn(
レース番号を追加,
"発走時刻",
each 発走時刻抽出{_[Index]}[time]
),
// レース名をクラス名とタグ td.race_name を指定して取得します
レース名称抽出 = Html.Table(HTML文字列, {
{"レース名称", "td.race_name"}
}),
// 列"発走時刻"を作成します
レース名称を追加 = Table.AddColumn(
発走時刻を追加,
"レース名",
each レース名称抽出{_[Index]}[レース名称]
),
//不要な列を削除する
列削除 = Table.RemoveColumns(レース名称を追加,{"Column1", "Index"})
in
列削除 //馬券の種類別に作成したテーブルを返す
), // ←List.Transformの閉じカッコ、ここまでが種類のリストでループ変換される
// すべて結合、ループで複数テーブルをリスト形式で取得しているので、最後にテーブルを結合する
結果 = Table.Combine(馬券別テーブル)
in
結果
// ここまでをコピーして、貼り付けてください
https://www.youtube.com/watch?v=tC_84sHW3dg
修正したコード