三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Excel パワークエリ Text.BetweenDelimitersで文字列を抜き出す パラメーターで名前範囲の値を使う

ソースコードからレース名と時刻を探し表示してみた
・オッズ取得のテストら突然、ライブ中にレース結果をテストで取得してみた
ソースコード内のcname変数をExcelの名前から取得してみた

コードを先に先頭に移動(結果を先に)

テストで使用した、レース名とオッズ時刻を取得するコード:

let
    strURL = "https://www.jra.go.jp/JRADB/accessO.html",
    strPARA = Text.ToBinary("cname=pw151ouS309202402041220240331Z/EB"),
    strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"],
    ソース = Web.Contents(strURL, [Headers = strHEAD, Content = strPARA]),
    文字列 = Text.FromBinary(ソース, 932),
    HTMLソース = Lines.FromText(文字列),

    //ダミーの挿入
    // BetweenDelimitersで間を取得、便利かも?
    // いつもの耳(ダブルコーテーション)が二つに注意
    レース名 = Text.BetweenDelimiters(文字列, "<span class=""race_name"">", "<"),
    時刻 = Text.BetweenDelimiters(文字列, "<div class=""cell time""><strong>", "</strong></div>"),
 
    結果 = {レース名} & {時刻} & HTMLソース

in
    結果

10:45 classの確認と取り出し Text.BetweenDelimiters
10:45 → https://www.youtube.com/watch?v=NGzEQMi-Uts&t=645s
class="race_name を探し、取り出します。

<span class="main">
     <span class="race_name">陽春ステークス</span>
</span>

<div class="cell time"><strong>15時51分現在オッズ</strong></div>

上記HTMLから

    // BetweenDelimitersで間を取得、便利かも?
    // いつもの耳(ダブルコーテーション)が二つに注意
    レース名 = Text.BetweenDelimiters(文字列, "<span class=""race_name"">", "<"),
    時刻 = Text.BetweenDelimiters(文字列, "<div class=""cell time""><strong>", "</strong></div>"),

で、取り出しました。


後半の名前範囲を使用したコード

次は、名前範囲を使用したソースコード
Excel.CurrentWorkbook(){[Name="URLCNAME"]}[Content]{0}[Column1],
Excel.CurrentWorkbook(){[Name="URLCNAME"]}[Content]{1}[Column1],
解説は下記の動画を見てください
https://www.youtube.com/watch?v=NGzEQMi-Uts&t=2518s

ソースコード

let
     strURL = "https://www.jra.go.jp/JRADB/" & Excel.CurrentWorkbook(){[Name="URLCNAME"]}[Content]{0}[Column1],
    strCNAME = "cname=" & Excel.CurrentWorkbook(){[Name="URLCNAME"]}[Content]{1}[Column1],
    strPARA = Text.ToBinary(strCNAME),
    strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"],
    ソース = Web.Contents(strURL, [Headers = strHEAD, Content = strPARA]),
    文字列 = Text.FromBinary(ソース, 932),
    HTMLソース = Lines.FromText(文字列),

    //ダミーの挿入
    // BetweenDelimitersで間を取得、便利かも?
    // いつもの耳(ダブルコーテーション)が二つに注意
    レース名 = Text.BetweenDelimiters(文字列, "<span class=""race_name"">", "<"),
    // 時刻 = Text.BetweenDelimiters(文字列, "<div class=""cell time""><strong>", "</strong></div>"),
 
    結果 = {レース名} & {"Ken3 残念テスト"} & HTMLソース

in
    結果

テーブル0番目を書き出す

let
     strURL = "https://www.jra.go.jp/JRADB/" & Excel.CurrentWorkbook(){[Name="URLCNAME"]}[Content]{0}[Column1],
    strCNAME = "cname=" & Excel.CurrentWorkbook(){[Name="URLCNAME"]}[Content]{1}[Column1],
    strPARA = Text.ToBinary(strCNAME),
    strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"],
    ソース = Web.Contents(strURL, [Headers = strHEAD, Content = strPARA]),
    文字列 = Text.FromBinary(ソース, 932),
    HTMLtest = Web.Page(文字列),
    TB0 = HTMLtest{0}[Data]
   
in
    TB0

解説は下記、
https://www.youtube.com/watch?v=NGzEQMi-Uts&t=2518s
突然テスト不足のソースを見つけ、パラメーターのシート参照にチャレンジ
リハーサル・準備不足なのに、シート参照のテストやりかけソースをみつけ、
ライブ中に急に解説を始める・・・


www.youtube.com
https://www.youtube.com/watch?v=NGzEQMi-Uts
目次
00:00 あいさつ 作成が遅れて、ライブがメインレース中ですみませんでした
01:17 1.パワークエリでJRAオッズのレース名と時刻を取得してみた
04:18 次は前日の復習でオッズを取得してみた
06:00 人気順にするには、現在コードを手作業で探してます おいおい
07:50 HTMLソースとオッズを同じシートに出す
10:45 classの確認と取り出し Text.BetweenDelimiters
17:12 中山12Rに変更して 再テストを行う
19:55 更新しながら、データが正しいか?チェックする あれ?タイミング?
23:14 変更操作で手間がかかることを再度説明する
25:32 蛇足でレース結果を取得してみた
28:07 JRAレース結果のページ PostとGetでテストしてみた
33:28 復習を兼ねて レース結果のページからレース名を探す
注意、動画内でゼロと言ってますが、正しくはO大文字のアルファベットのOです。
37:00 ベースURL オッズは accessO (←0ゼロではなくOです)言われてみれば、オッズのオウ、ですよね・・・
ベースURL
オッズは accessO (←ゼロ違うオウOです、ライブ中、素人らしく間違えました)
38:45 レース結果の受け取り、URLそのまま使うGETでテストしてみる
41:58 突然テスト不足のソースを見つけ、パラメーターのシート参照にチャレンジ
42:30 まずA1に名前を付ける 名前ボックスを使い "PARA" と名前を付ける
45:05 データのプライバシーに関する情報が必要です と 確認・警告メッセージ
47:30 A1セルに人気順のcnameを入れてセル参照のテスト
52:18 名前範囲で二つの値を管理したい時の説明
01:02:57 Column1って?Excel.CurrentWorkbook(){[Name="TEST"]}[Content]{0}[Column1]
01:07:55 404エラーの原因は、access0ゼロと言ってたけど、正しくはOオウです
最後のテストのエラーは、時間切れではなく、
access0ゼロと言ってたけど、正しくはOオウです
手入力で 01:07:55 「ゼロ」と口走りながら入れてますが、正しくはOオウです
※これも、初心者以上のミスでした・・・
気が付くと、かなり、はずかしい・・・

#Excel #パワークエリ #PowerQuery #エクセル #msexcel
#webクエリ #JRA #大阪杯 #デバッグ

01:17 1.パワークエリでJRAオッズのレース名と時刻を取得してみた

04:18 次は前日の復習でオッズを取得してみた
昨日のPOST送信の続きです、パワークエリでJRAテーブルの取得は
https://www.youtube.com/watch?v=9ehjI5uhyWE
↑テーブルの取得は、↑をまず、みてください。

06:00 人気順にするには、現在コードを手作業で探してます おいおい

07:50 HTMLソースとオッズを同じシートに出す
複製を使い、テスト結果の名前を変えて、
閉じて次に読み込む
既存シートへ書き出すように修正する

10:45 classの確認と取り出し Text.BetweenDelimiters
class="race_name を探し、取り出します。

<span class="main">
     <span class="race_name">陽春ステークス</span>
</span>

<div class="cell time"><strong>15時51分現在オッズ</strong></div>

上記HTMLから

// BetweenDelimitersで間を取得、便利かも?
// いつもの耳(ダブルコーテーション)が二つに注意
レース名 = Text.BetweenDelimiters(文字列, "", "<"),
時刻 = Text.BetweenDelimiters(文字列, "

", "
"),

で、取り出しました。

17:12 中山12Rに変更して 再テストを行う
19:55 更新しながら、データが正しいか?チェックする あれ?タイミング?

23:14 変更操作で手間がかかることを再度説明する
変更ヶ所が現在でも二ヶ所なので、変更が大変。
これを、sheet!A1など、セルを参照させたい、
そんな操作を口にする。
※口にしただけで、できたら、誰も苦労しないか・・・

25:32 蛇足でレース結果を取得してみた
いつもの、突然の思い付きで、
ライブ中に、オッズ取得をレース結果に変えてみた。

28:07 JRAレース結果のページ PostとGetでテストしてみた

33:28 復習を兼ねて レース結果のページからレース名を探す
さすが、丁寧なJRAのページ、
同じクラス名 class="race_name" で作られてました。

注意、動画内でゼロと言ってますが、正しくはO大文字のアルファベットのOです。
37:00 ベースURL オッズは accessO (←0ゼロではなくOです)言われてみれば、オッズのオウ、ですよね・・・
ベースURL
オッズは accessO (←ゼロ違うオウOです、ライブ中、素人らしく間違えました)
レース結果は accessS (←エス大文字で助かる,sssとかになると、ミスりやすい?)
ここで、気が付けよ。
言われてみれば、オッズのオウ、ですよね・・・

38:45 レース結果の受け取り、URLそのまま使うGETでテストしてみる

41:58 突然テスト不足のソースを見つけ、パラメーターのシート参照にチャレンジ
リハーサル・準備不足なのに、シート参照のテストやりかけソースをみつけ、
ライブ中に急に解説を始める・・・

42:30 まずA1に名前を付ける 名前ボックスを使い "PARA" と名前を付ける
strCNAME = "cname=" & Excel.CurrentWorkbook(){[Name="PARA"]}[Content]{0}[Column1]
でシートの値を参照、変数に代入できる。

45:05 データのプライバシーに関する情報が必要です と 確認・警告メッセージ
プライバシーレベルをパブリックにして、
この処理は大丈夫ですよ?と確認しました。

47:30 A1セルに人気順のcnameを入れてセル参照のテスト

52:18 名前範囲で二つの値を管理したい時の説明

Excel.CurrentWorkbook(){[Name="URLCNAME"]}[Content]{0}[Column1]
Excel.CurrentWorkbook(){[Name="URLCNAME"]}[Content]{1}[Column1]
[Content]{0}と[Content]{1}をテスト

59:44 URLを結果 accessSに変えて、テストする

01:02:57 Column1って?Excel.CurrentWorkbook(){[Name="TEST"]}[Content]{0}[Column1]

複数範囲に名前を付けて、
Column1とColumn2をチェックして、違いを説明する
Excel.CurrentWorkbook(){[Name="TEST"]}[Content]{0}[Column2]
Excel.CurrentWorkbook(){[Name="TEST"]}[Content]{1}[Column2]

01:07:55 404エラーの原因は、access0ゼロと言ってたけど、正しくはOオウです

最後のテストのエラーは、時間切れではなく、
access0ゼロと言ってたけど、正しくはOオウです
手入力で 01:07:55 「ゼロ」と口走りながら入れてますが、正しくはOオウです
※これも、初心者以上のミスでした・・・

気が付くと、かなり、はずかしい・・・

ではまたぁ。。。。

再生リストの紹介: #JRA #オッズ を #自動取得
https://www.youtube.com/playlist?list=PLBFC80A8658C305CE
↑関連動画の再生リストです

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)