Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Home Premium : Excel 2007)
「中央競馬JRA」及び「南関競馬(TCK他)」のサイトより「単勝オッズ」及び「複勝オッズの小値と大値」を取り込む方法
投稿日時: 18/11/30 10:52:48
投稿者: thanhlongtradin
メールを送信

小生、競馬のソフトを作成しています。
出走馬の能力値(各種あります。走破タイムとか3ハロンのタイムとかこれまでの着順とか、各人の思いつきや着想によって数限りなくあります)には一切関係無く、その日に発表される各種オッズの値を2回取り込みその「乖離値」より判定する方法を思いつき、10年ほど検証を重ねてきた結果、驚異的な的中率を誇れるほどになりました。
「回収率は?」と、問われたら今のところ自信がありません。
何故なら小生の場合「荒れると判定したレースのみ(一日に3〜4レース多くても6レースくらい、ときには1レースとか全く投票しないとかもあります)」に投票するからで尚且つ今のところ「ワイド1点」しか買いませんのでそのような買い方をする限り的中率及び回収率は「かなり凄い!」と言えますし例えば1レースしか投票しなければその日は的中率も回収率も「0」ですのでその言からすれば自信を持って言う事は出来ません。
もっと点数を買っていたらその方が的中率も回収率もとんでもなく上がるでしょうが・・・・。
正確には「3連複」が一番「的中率」も高く「回収率」も高いと考えます。
 
小生の歳(71歳になります)やら身体障害者である事(従って車も無いため杖をつきながら徒歩で移動)、経済的な事を考えると今のところ「VBA」を学ぶ金銭的な余裕と時間的な余裕、何より頭の出来の悪さからしてもかなり難しく、何とか助けを請うしか方法が無いと思いこちらに登録させて頂き質問に至りました。
 
1.先ず「単オッズと複オッズ(小値と大値それぞれ別々に2回)の自動的な取り込み」をさせて「乖離値」を求める。
 
2.その求めた「乖離値」に順位をつける。
 
3.その順位により各種買い目(競馬会が言うところの「勝ち式(勝ち馬投票券」)を作成して自動的に表示させる。
 
と言う作業を自動で出来ないかと考えております。
 
この件に関しまして何とかご助言を頂けないものでしょうか?
 
どうぞ宜しくお願い申し上げます。
 
 Embarassed

回答
投稿日時: 18/11/30 20:25:19
投稿者: mattuwan44

引用:
と言う作業を自動で出来ないかと考えております。
  
この件に関しまして何とかご助言を頂けないものでしょうか?

 
まず、自動化できないかという話ですが、
これは出来ます。
ただし、
2〜3日で作れるか、2週間で作れるのか、
はたまた、1年掛かっても作れないか、
それは、個人により差ができるとおもいます。
 
なので、自動化に拘らず、
とりあえず、Webサイトから、コピペでシート上にオッズを取り込んでみてはいかがでしょう?
いま、ヤフーのサイトでやってみたら、余分にタイトル行が入りますが、
表にはなるようです。
あとは、表計算ソフトの得意分野なので、
ご自分の考案された計算法を入力して表示させるだけだと思います。
 
その辺はVBAだのマクロだのというより、エクセル君の強力な関数群を利用した方が、
開発が楽になるはずです。
 
それで、計算が出来るようになったら、
エクセルにはWebクエリというWebの情報を取り込む機能がありますので、
それを使って取り込むようにしてみてはいかがでしょうか?
 
それが出来るようになったら、VBAで文字列を生成できるようになりましょう。
 
例えば、
    
2018年12月2日(日) | 4回中京2日 | 15:30発走
 
第19回チャンピオンズカップ(GI)

 
↑これのオッズを見るには、
 
https://keiba.yahoo.co.jp/odds/tfw/1807040211/
 
↑こういうアドレスにアクセスすればいいわけですが、
 
最後の
1807040211
の意味は、
18 → 2018
07 → 中京
04 → 4回
02 → 2日
11 → 11レース
という意味ですので、
 
https://keiba.yahoo.co.jp/
のサイトから、次回のレース情報の表をWebクエリで取得して
その情報から各レースの情報を取得するためのアドレスを生成してやれば、
自動で出来ると思います。
 
まぁ、回収率が高いなら、5万くらいでフリ―ランスのサイトで頼めないかなぁ。。。
って、それを頼んだ人も使われちゃったらオッズが変わるかもなぁ。。。
https://www.lancers.jp/work/detail/1390279
 
僕ならとりあえず書籍を買い漁るかな。
2〜3万使えば、とりあえずそれくらいのことは出来るようになると思いますが。。。
それで解らなければここで、聞きながら完成させればいいと思いますよ。
(でも、焦って一度に買わないこと。いまどんな本が自分に必要かを理解して、段階を踏んで買う事)
 
あと、参考になりそうなURL>>
https://keiba-thetop.com/keiba-programming1/
https://www.yannies.com/diy/index.htm

投稿日時: 18/12/01 09:26:21
投稿者: thanhlongtradin
メールを送信

いやぁもうホントに詳しく記載して頂きまして感謝に耐えません。
 
仰るとおりにいろいろ試行錯誤してみます。
 
実は既に「コピペの作業をしながら目視確認して買い目作成」と言う作業は出来ております。
 
要するに「2回のオッズ取り込み」をしなければ「そのお互いの乖離率」を計算させることが出来ず、さらに「1回目のオッズ取り込み時間」が午前3時〜4時(中央競馬のみ、南関はそうは行かず投票締め切りの「1回目:30分前」と「2回目:10分〜5分前」が必要)頃と言う条件付なので「一度オッズ取り込みソフト(確か、そう言うソフトを有料ですが使った事があります。無料も有ったはず)」で取り込んでコピペなり自動取り込みなりさせねばなりません。
 
小生の持論は、あまたある各種の有料無料のデータを一切使わず「純粋にオッズのみ」で判定すると言うロジックを確立し(既に確立しております。理論的には)それを完全自動化してどうしてもお金が必要な小生と同様の生活を送っている方の助けになれないか?と言う大げさな事を目論んでおります。
 
世の中の小生と同じような年代の方たちはいわゆる「段階の世代」で、長年連れ添った相方を殺して自殺だの逮捕だの「この日本はいったいどうなってるんじゃい?」と言う事件が毎日のように起こっています。
アメリカやドイツに住んで、俯瞰的に日本を見てくると、この日本と言う国のあまりのおかしさ不自然さに気づきます。
 
もちろん世の中「金の問題」だけではないですし「金・物・利権(つまりすべて数字で表せる)」に関しては小生は必要ないと思っている人間なので(日本古代神道と仏教を長年学んでいる)上記の問題は簡単に解決できるはずもないですが、「シルバー人材センタ」に登録したら少しパソコンが出来るというだけで「何とか少しでも稼げんじゃろか?」と言う相談を受ける訳です。
 
60代70代でも肉体労働しないと、スズメの涙の年金では喰っていけないのが現実だと判ります。
適度な肉体労働は体力維持のためには宜しいですがね・・・。
これは皮肉そのものの言葉で、実際はそんな簡単なノーテンキな問題じゃないですからね。
 
余計な事を書きました。
 
とりあえず御礼を申し上げます。
 
 

回答
投稿日時: 18/12/01 18:18:51
投稿者: simple

こんにちは。
 
競馬必勝法ですか。
すごいですね。
 
冒頭から失礼しますが、
[EXCEL2007で作成中の競馬予想ソフトに「南関競馬(中央競馬)」のオッズを取り込みたい!]
https://oshiete.goo.ne.jp/qa/10512374.html
の質問者さんと同じかたですか? (検索していたらたまたまヒットしました)
250万は安いとか、すごいですね。
 
ところで、今作成されている(完成した?)ソフトは、
どのようなプログラム言語で作成しているのでしょうか。
というのは、仮にデータ取得部分ができたとしても、
データのやりとりのことを考えると、VBAを理解される必要があると思います。
VBAを学習するお積もりがあるかどうか、は分岐点ですね。
 
こちらの質問掲示板では、コード作成依頼は、
https://www.moug.net/faq/kiyaku.html
の禁止事項にて、禁止されています。
ですから何もかも作ってというのは無しですね。(できるかどうかは別にして)
 
ヒントをもとに、ご自分でトライされるのがよろしいかと思います。
そう言うつもりがないのでしたら、
お金を払って作成依頼するのがよいと思います。
先行投資と考えれば回収可能じゃないですか?
 
これだけだと何ですので、参考になりそうな情報を。
かんじんのデータ取得については、ネットで検索するのも手ですね。
[JRA 単勝オッズ取得 コードまとめ と ・・・]
https://ken3memo.hatenablog.com/entry/2017/07/22/044845
なども参考になるでしょう。

投稿日時: 18/12/02 11:16:44
投稿者: thanhlongtradin
メールを送信

コメント頂きましてまことに有難うございます。
 
aimple様の仰るように同一人物です(笑)。
 
私は既に71歳にならんとするジジィで、身障者のため行動範囲がおのずと制限され且つ歩き過ぎると腰椎ヘルニアで歩けなくなるというリスクを背負っております。
 
それでも毎日2km以上は歩くようにしておりますが・・・。
 
昔はレーサーで300km/h近い世界で生きていたのが嘘のようですが、今でもコースに出て思い切りぶっ飛ばしたいと言う思いに駆られます。
 
余計な事を書きました。
 
「1回目取得の各種オッズ」と「2回目取得の各種オッズ」の「乖離値計算」は、NET上をあちこち探し回って計算式を調べ挿入して出来るようになりましたが、「言語」は私には判りません。
 
現在使用している「EXCEL」は2007ですので、お金に余裕があれば最新版にしたいのですが、あまりに長い間(10年以上)使ってきて慣れているのでどうも新しいものにするのが面倒で多少不安もあると言う事もあって、そうするとこの先を考えると教科書もどうしたらいいのかなぁとか考えて入手しておりません。
 
「乖離率」も何種類も計算させていて、「このパターンの場合はこの乖離率とこの乖離率」の組み合わせで的中する」、「このパターンの場合は?」と全てデータ取りしてあり、ほぼ100%の確率で的中します。
 
「こんなもの世の中に出すのは止めといた方がいいですよっ」て言うご意見もございますが、自分としては何とか「全自動化」して誰にでも使えるように「WINDOWS版」にしたいと言うのが本音です。
 
私はいわゆる「団塊の世代」ですから、今の日本のクソみたいな状況を考えると「何とかならんのだろか?」と言う思いでいっぱいなんです。
 
海外に住んでましたからあちらからこちらを見てまた日本に関するニューズを海外版で見てますから、日本の各局のニューズ内容とのあまりにもギャップがあるのにも驚きますし、何より「日本のマインドコントロール」の巧みさが凄いとしか言いようが無いので一時期日本に戻るのも悩みました。
 
今でもTVは見ませんし(毒されるのが嫌ですから)見るのは「海外版の洋画やドキュメント物」だけです。
 
昨年「シルバー人材センタ」に登録しましたが、実際には「肉体労働」しか仕事がありません。
 
「草刈り」とか「ホームセンター」での雑用とかですね。
 
ご老人(失礼)でもある程度のスキル(設計図を引けるとかCADが出来るとかですね)を持っておる方は70歳になっても引く手あまたと言う話もありますし、そう言う方達を専門に募っているサイトもあります。
 
でも大方は「○○さん、パソコン詳しいのなら何とかパソコンで少しでも稼ぐ方法はないのかね?」って言うレベルの方達ですね。
 
そんな方達にお教えして少しは楽して頂きたいと言うのが私の本音です。
 
但し「競馬はギャンブルじゃねぇかよ!」って言う浅はかな考えの方が大半(ほぼ100%)なのも問題ありですが・・・・。
 
とにかくこの場を持ちまして御礼申し上げます。
 

回答
投稿日時: 18/12/02 19:24:57
投稿者: simple

こんばんは。
  
身辺雑記は別として、
例えば、私の紹介したサイトは見て頂けたのですか?
データが取得できるはずですけどねえ。
  
それと、私とは違う方針のかたもいると思いますから、
データ取得したいサイトのURLくらい載せて、
そのどちらの項目と説明したらどうでしょうか。
 
有料でデータを提供しているところもあるようですし、
南関競馬(TCK他)
などといわれても分からないと思いますからURLが必要です。

投稿日時: 18/12/03 12:05:04
投稿者: thanhlongtradin
メールを送信

simple様
 
思慮不足のジジィにお付き合い下さって有難うございます。
 
お示し頂いたURLにはアクセスして見ております。
 
中央競馬(JRA)のURLは下記の通りでございまして、たまたまこれは
12月2日の中京11R 第19回 チャンピオンズカップ(GI)
のものです。
 
http://www.jra.go.jp/JRADB/accessO.html
 
このオッズを見ますと「単勝」がある一列に表示されていて、さらに次の列に「複勝の小値」がさらに「−」が表示されている列があって次の列に「複勝の大値」が表示されています。
 
つまりこの3種のオッズ「単勝」、「複勝の小値」、「複勝の大値」を「午前2:00〜午前4:00」に一回目として取り込む必要があります。
 
さらに時間をずらしてもう一回(つまり2回目です)「午前8:30〜午前9:30」の間に取り込む必要があります。
 
さらにこの2度の取り込んだオッズ間の「乖離値」を求めますがこれは簡単です。
 
これは「ただの割り算」ですから全く簡単な計算です。
 
 
その計算した乖離値の大きさ(小順と大順)、両方求めます。
 
式は下記の通り。
 
=RANK(J3,$J$3:$20,0)
 
=RANK(J3,$J$3:$20,1)
 
つまり「小順」と「大順」両方求めています。
 
南関競馬(4箇所の競馬場があります)の場合はさらに面倒で、「単勝」は同じですが「複勝の値」が同じ列の中に記載されていますので「小値」と「大値」を別々に引き出さねばなりません。
 
http://www.nankankeiba.com/odds/201811302109050101.do
 
2018年11月30日第9回川崎競馬 第5日
 
の締め切り後のオッズ値です。
 
ここまでの計算はしておりますので結局は「肝心のオッズの自動取り込み」とさらに計算済みの乖離値の順位から「パターン別(ここでは明示できません)」の分けて、使用する「乖離値」を選出しそれを元に最終的な「勝ち式」を決定します。
 
これらの作業はもちろん慣れれば数分出で出来ますが、いかんせん人間ですから迷う事もあり、結果「投票に間に合わない」とか「選出するべき馬番」を間違ってしまった」とかのトラブルが起きる訳です。
 
これらの作業を全自動化できたら前代未聞のソフトが出来上がるのではないかと自負しております。
 

回答
投稿日時: 18/12/04 21:07:24
投稿者: simple

こんばんは。
年齢のことは結構ですよ。
余り珍しくないです。私も同じようなものです。
 
>お示し頂いたURLにはアクセスして見ております。
活用して、ダウンロードできましたでしょうか?
単勝、複勝も取り出せたと思います。
これでJRAは終了ですね。
 
ちなみに、
http://www.jra.go.jp/JRADB/accessO.html
はパラメータエラーになると思いますよ。
 
南関東競馬のほうは
http://excel-keiba.tumblr.com/post/63593788033
の本文ではなく、コメント欄に提供されているExcelブックが使えませんか?
 
うまくいけば、これで2つともクリアーですね。
じゃあ、私はこの辺で。

投稿日時: 18/12/05 11:26:43
投稿者: thanhlongtradin
メールを送信

simple様
 
またまた、ご丁寧なご返信有難うございます。
 
そうなんですね、小生と変わらぬ御歳とは恐れ入りました。
 
やっぱり歳は取っても学ぶ事は大事な事と今更ながらに痛感しました。
 
アホか?と言われそうですがやっぱり毎日気付きの連続であります。
 
また判らん事が有りましたら質問させて頂きますので、その節は何卒宜しくお願い申し上げます。
 
翠山
 
 

回答
投稿日時: 19/01/18 23:46:25
投稿者: masExcel

水を差すようで申し訳ございませんが、Excelの「取得と変換」機能は使いましたか?
確かに、マクロで、webのテーブルのデータを取得するのは、さほど難しくはありませんが、
VBAをコツコツ書くより、機能の「取得と変換」で、URLを指定するだけで、データをワークシートに書き込みが簡単にできます。
 
あとは、簡単な関数で、取得できると思いますよ。
 
 
Excelは、機能と関数(数式)とマクロを組み合わせて使うのが理想ですが、マクロに関しては、難しかったり、不具合が発生しやすいデメリットがあるし、関数(数式)は、正直Excelの中でも最高ランクに難しいです。
よって、出来る限り「機能」を利用することをお勧めします。

回答
投稿日時: 19/01/19 08:29:52
投稿者: simple

質問者ではないですが、教えて下さい。
 
>水を差すようで申し訳ございませんが、Excelの「取得と変換」機能は使いましたか?
それは最新のExcelで導入された機能のようですが、
Webスクレイピング相当のことに関してどの程度のことができるのでしょうか。
教えていただけると幸いです。ネット検索しましたが、適切な情報にあたりませんでしたので。
 
例えば、JRAのサイトからオッズを取得したいとします。
 
ブラウザで手作業でやる場合で作業を説明すると、
http://www.jra.go.jp/
をブラウザで開いて、
左サイドメニューにある「オッズ」をクリックし、
その後いくつかクリック動作が間に入りますが、
「単勝・複勝オッズ(馬番順)」のデータを取得するといったことが目的の作業です。
 
Excelの「取得と変換」機能 では、
どのような手続きをとると、
データが取得できますか?
教えて下さい。
 
> ちなみに、
> http://www.jra.go.jp/JRADB/accessO.html
> はパラメータエラーになると思いますよ。

と書きましたが、単純に、オッズが表示されているURLを指定して、というわけにいかないですよ。

回答
投稿日時: 19/01/19 08:53:29
投稿者: masExcel

ここの書き込みが、テキストのみなので、伝えることが難しいですが、
「データ」タブから、「webから」のボタンが最新のExcelであればできます。
※ このデータの取得と変換は、バージョンによって、画面が違う
 
直接 url を入力し、どのテーブルを取得するのかをExcelのダイアログボックスで、選択できるようになっています。
たしか、4、5個、出てきた記憶です。
さらに、データの編集が、ある程度出来てきます。
取得すると、新規のワークシートが作成され、データが作成されます。
 
 
「取得と変換」に関して、インターネットで検索しても出てこないのは、細かいバージョンアップでも、ボタンの名前が追加されたり削除されたり、リボンの配置が換わったりと、変化が激しいからです。
ただ、基本的な操作感は変更されていないので、使えます。
 
この「取得と変換」、いままでVBAでゴリゴリソースを書かないとできないことが、簡単にできてしまうので、個人的には非常に重宝しています。
今回の事例で、これを、VBAで実装すると、urlのソースコードを見て、タブやキーワードからオブジェクトを生成して・・とややこしいです。
なら、機能でできるのであれば、機能でやった方がいいです。
データの更新も自動・手動で切り替えができます。(自動は、確か最小で1分かな)
 
 
ま、これは、機能なので、実際に操作してやってみた方がわかりやすいです。
 
 

回答
投稿日時: 19/01/19 09:28:39
投稿者: simple

端的にお聞きします。
JRAの「単勝・複勝オッズ(馬番順)」のデータを取得することができますか、
とお尋ねしています。
 
つまり、URLを指定して単にgetメソッドを発行する形態ではなく、
Javascriptを介して、postメソッドを使ってtokenをつけてデータを取得する
ような仕組みのサイト(JRAのサイトはそうです)で、
その「取得と変換」が使えるのですか? という質問です。
 
2010などのWebクエリーで取得できないのと同じことになりませんか?ということです。
あいにく私は2010であり、「取得と変換」を使える環境がないので試せないのですが、
本当にそれができれば朗報だなという気持ちと、
できないのではという懸念も持っているので、お聞きしています。

回答
投稿日時: 19/01/19 10:37:22
投稿者: masExcel

Excel2010では、できませんね。
すいません。

回答
投稿日時: 19/01/19 11:03:58
投稿者: simple

2010のことは尋ねていません。
もともと2010にその機能は無いことは承知しています。

回答
投稿日時: 19/01/19 11:26:16
投稿者: simple

推奨されているということは、2016以降のExcelをお使いなんですよね。
それで試していただけませんか?
 
なお、「Webから」に「詳細設定」モードがいうものがあることがネット情報でわかりました。
リクエストヘッダに認証情報などをつけることができるようです。
GETでなく、POSTも可能なんでしょうか。
cname=pw15orl00062019010620190119%2FC7
といった文字列(token)を渡したPOSTが可能であれば、
正常な反応が返るはずなんですが。

回答
投稿日時: 19/01/19 13:32:38
投稿者: simple

私的メモです。
 
JRAのサイトが単純な作り(例:Webクエリー)で片付くならもともと苦労していません。
 
私が紹介したKen3さんのサイトの手法は、
IE上でユーザー動作をそのままエミュレートするものです。
これだと時間がかかることや、元に戻るなどの動作も省略できず、
ユーザーの動作をもらさず模倣しなければならない、という特徴があります。
 
これとは別にYU-TANGさんが紹介した手法が知られているようです。
これは、Javascriptで実行されているクリック処理をVBA側で再現するものです。
つまり、必要なtokenを予め取得しておき、それをsendする際のパラメータとして指定し、
POSTメソッドでHTTPリクエストを発行するものです。
そのレスポンスであるHTMLを正規表現で解析するというものです。
(なお、DOMを利用する方法もあり、そのほうがきれいには書けるようですが、
  スピードは正規表現のほうが早いです。これは別の例で私も比較検討したことがあります。
  DOMを構築するコストがネックになるようです。)
 
(なお、YU-TANGさんは2016年1月にご自分のサイトを閉じるにあたり、こちらのサイトでも
  zipでアーカイブしたものを関係者に配布しました。私の手元にもあります。
  今回の件で、あらためてYU-TANGさんの評判を知ることになりました。 )
 
ところで、敢えて避けていましたが、
今回の質問で本来重要なのは、データの持ち方の設計でしょうね。
継続的に実行するならデータベース的なものを用意すべきでしょうし、
有料のものが提供されているのかもしれません。
それらのデータを元に、"必勝法"を工夫していくのでしょう。
もとより、そうした依頼型の質問は、こちらの掲示板では想定しないものであり、
回答者に回答義務はもともとありません。
本来は質問者が自己責任で一定の投資するのが筋でしょう。
他人の褌で儲けましょうというのは甘すぎますし(いや失礼)、
そのことが他人の利益になるといった理屈も違和感を感じます。
 
もう質問者さんもご覧になっていない状態にもかかわらず、
昔のものをサルベージされるなら、もう少し調べていただきたいし、
最後までおつきあい願いたいものです。

回答
投稿日時: 19/01/19 17:18:02
投稿者: simple

>Excel2010では、できませんね。
Excel2016でもできないということでよいですね?

回答
投稿日時: 19/01/20 08:10:56
投稿者: kumatti
投稿者のウェブサイトに移動

XL2016以降でサポートされた同機能ですが、simpleさんが言われてる様に、

>エラー013
>パラメータエラー

になりました。

回答
投稿日時: 19/01/20 08:19:33
投稿者: kumatti
投稿者のウェブサイトに移動

でも、"詳細設定"で"HTTP 要求ヘッダー パラメーター (省略可能)"の一覧に
「Cookie」や「ContentType」や「UserAgent」など色々あり、対応可能なのかも知れません。

回答
投稿日時: 19/01/20 09:54:00
投稿者: simple

お久しぶりです。
貴重なコメントをいただき、
忝なく(かたじけなく)思います。
 
可能性は残っているものの、やはり簡単にはできないんですね。
ありがとうございます。
それらがVBAでどの程度実現できるものかも
今後勉強していきたいと思います。
 
手作業でよいのであれば、ローカルに保存してから
直接Excelに読み込んだり、Webクエリーを使うこともできるでしょうね。
まあ、そうしたことを省力化したいということなんでしょうけど。
 
もっとも、マクロ、難しい?関数などより、
Excelに備わった機能を活用しましょう、
という方針には私も同感です。総論としてはw

回答
投稿日時: 19/01/20 17:44:02
投稿者: MachGoGoGo
メールを送信

UiPathとかを使って,WEBデータをExcelに取得

トピックに返信