あるテキストファイルから文字列データ(オッズデータ)を取り出してエクセルのシートに貼り付けようと試みています。競馬をされている方は分かると思いますが、出走頭数により枠連と馬連の関連が変わります。(例:馬連(1)-(13)は18頭立てなら枠連1-7、13頭立てなら枠連1-8。馬連(7)-(15)は18頭立てなら枠連4-7、16頭立てなら4-8。)これを出走頭数の変化に伴ってエクセルの同一シート内にそれぞれ対応したオッズを貼り付けるにはどういったプログラムを(VBAマクロ)組めばいいでしょうか?
A列に枠連の番号(若い番号順に1-1、1-2、・・・)
B列にその枠連のオッズ
C列に対応する馬連の番号(先ほどの例で言えば馬連(1)-(13)は18頭立てなら枠連1-7に、13頭立てなら枠連1-8に含まれる)
D列にその馬連のオッズ
A列の枠連の番号に関していえば、当然出走頭数により存在しないものが出てくる(例:13頭立てのときの1-1,2-2,3-3いわゆる”ゾロ目”)
元データには枠連、馬連ともにA列のある行に固定長文字列で
01:------000151000055000234000524000036000235
などというように
01:=軸1番から
枠連(馬連)1-1=オッズなし(------)
枠連(馬連)1-2=15.1
枠連(馬連)1-3=5.5
と6バイト単位で表示されています。
高度な処理だと思いますが分かる方教えてください。よろしくお願い致します。
No.5ベストアンサー
- 回答日時:
申し訳ないのですが私は EXCEL の知識が全くないんです。
セルからデータを読み、別のセルに代入と言う事もできません。
EXCEL の VBAのEditor と言われても何の事か分かりません。
Sub プロシージャ の事をいうのでしょうか?
だったらそのまま貼り付ければ動くと思います。
競馬の予想ソフトを作ろうとしている方が、これを EXCEL に移植出来ない。なんて信じられません。
もしこのプログラムが理解できないのであれば、私にはお手伝い出来ません。
(出走頭数と馬番・枠番の関係は非常に難しいんです。出来る人は限られるかも。)
Ozz$(153, 4)の出来上がりイメージは、以下の様になります。
1(枠連)2:枠オッズ 3:馬連 4:馬オッズ
1-1 .0 01-02 15.1
1-2 15.1 01-03 5.5
1-2 15.1 01-04 23.4
1-3 5.5 01-05 52.4
1-3 5.5 01-06 3.6
取消し、除外馬の箇所のオッズは Val関数で変換された時点で0になります。
自分の好きな様に表示を変えてください。(有効オッズで0になる事はありません!)
とりあえず間違えてしまった箇所を訂正しておきます。
「枠に何頭入っているかを調べる。」の部分を勘違いして間違えました。以下の様に訂正して下さい。
'元データ
Dim 枠Data(8), 馬Data(18), Wozz, Uozz
'Ozz$(153,4) は 153通りあり、1:枠 2:枠連OZZ 3:馬連 4:馬連OZZ を入れる。
Dim 枠頭数%(8), 枠番%(18), Ozz$(153, 4), uma1%, uma2%
'サンプルデータ
tousu = 18
枠Data(1)="01:------000151000055000234000524000036000235000324"
馬Data(1)="01:------000151000055000234000524000036000235000324"
'枠に何頭入いるかを調べる。
For i = 1 To tousu
If i <= 8 Then
w = i
Else
w = 9 - i Mod 8: If w = 9 Then w = 1
End If
枠頭数(w) = 枠頭数(w) + 1
Next i
'馬番と枠の関係
ban = 0
For w = 1 To 8
For i = 1 To 枠頭数(w)
ban = ban + 1
枠番(ban) = w
Next i, w
'組み合わせ と オッズ
n = 0
For uma1 = 1 To tousu - 1
For uma2 = uma1 + 1 To tousu
n = n + 1
waku1 = 枠番(uma1): waku2 = 枠番(uma2)
'枠連
Ozz(n, 1) = Format(waku1, "#") + "-" + Format(waku2, "#")
'枠連オッズ
Wozz = Val(Mid(枠Data(waku1), 6 * (waku2 - 1) + 4, 6)) / 10
Ozz(n, 2) = Format(Wozz, "#.0")
'馬連
Ozz(n, 3) = Format(uma1, "0#") + "-" + Format(uma2, "0#")
'馬連オッズ
Uozz = Val(Mid(馬Data(uma1), 6 * (uma2 - 1) + 4, 6)) / 10
Ozz(n, 4) = Format(Uozz, "#.0")
Next uma2
Next uma1
プログラミングの知識がないばっかりに皆さんにご迷惑をおかけしましたが、親切にご回答くださる方がいらっしゃったので助かりました。ありがとうございます。うれしい限りです。
No.6
- 回答日時:
#1です。
#5さんの回答で出来ますね。素晴らしいです。
いまさら出る幕は無いのですが、ちょっと別のアプローチを思いついたので書きます。
頭数によって枠番と馬番の関係は決まっていると思いますし、データの位置も同じなら、事前に希望の形で出走頭数毎のシートを用意しておいたらどうでしょう?
枠列の値が 1-5 なら先頭の1と最後の5で、オッズデータの読む行と読む位置を見つけて転記するって感じです。
No.4
- 回答日時:
やっとアップ出来た。
こんな感じで如何ですか?
'元データ
Dim 枠Data(8), 馬Data(18), Wozz, Uozz
'Ozz$(153,4) は 153通りあり、1:枠 2:枠連OZZ 3:馬連 4:馬連OZZ を入れる。
Dim 枠頭数%(8), 枠番%(18), Ozz$(153, 4), uma1%, uma2%
tousu = 18
'枠に何頭入っているかを調べる。
For i = 1 To tousu
w = i Mod 8: If w = 0 Then w = 8
枠頭数(w) = 枠頭数(w) + 1
Next i
'馬番と枠の関係
ban = 0
For w = 1 To 8
For i = 1 To 枠頭数(w)
ban = ban + 1
枠番(ban) = w
Next i, w
'組み合わせ と オッズ
n = 0
For uma1 = 1 To tousu - 1
For uma2 = uma1 + 1 To tousu
n = n + 1
waku1 = 枠番(uma1): waku2 = 枠番(uma2)
'枠連
Ozz(n, 1) = Format(waku1, "#") + "-" + Format(waku2, "#")
'枠連オッズ
Wozz = Val(Mid(枠Data(waku1), 6 * (waku2 - 1) + 1, 6)) / 10
Ozz(n, 2) = Format(Wozz, "#,0")
'馬連
Ozz(n, 3) = Format(uma1, "0#") + "-" + Format(uma2, "0#")
'馬連オッズ
Uozz = Val(Mid(馬Data(uma1), 6 * (uma2 - 1) + 1, 6)) / 10
Ozz(n, 4) = Format(Uozz, "#,0")
Next uma2, uma1
No.1の方のお礼と補足欄に書いたようにお願いしているんですが、上のプログラムをそのままVBAのEditorにコピー&ペーストしても動きませんよね?それに出来上がりイメージのようになるのかな~。"*"(アスタリスク:出走取り消し馬の取り扱いもされてないみたいだし・・・。申し訳ないけどプログラミングの知識が超初級なのでこのコーナーでお願いした次第です。すみません。
No.2
- 回答日時:
こんばんは。
九天社に以下のような本がありますから、参考にしてみたらいかがですか?
Excel VBAで自分で作る
『DIY 競馬プログラミング』
私などは、まったく分かりませんし、単発のデータだけでは、無理だと思いますから。
参考URL:http://www.9-ten.co.jp/list/key_keiba.php
No.1
- 回答日時:
最後までお付き合い出来るか解りませんが、、、
ご質問を読んでいくつか疑問が出ました。
元データは固定長とありますが、同じレースの枠番データなら同じ長さなのでしょうか?
これが1枠のデータなら、
01:------000151000055000234000524000036000235
2枠のデータはこう?
02:000151------000344000012000988000123000036
あと、枠連データと馬連データは別々に取得するのでしょうか?
もう少しサンプルデータや完成形のイメージがわく説明があると理解されやすいかも。
この回答への補足
下の補足です。質問に書いたもの
A列に枠連の番号(若い番号順に1-1、1-2、・・・)
B列にその枠連のオッズ
C列に対応する馬連の番号(先ほどの例で言えば馬連(1)-(13)は18頭立てなら枠連1-7に、13頭立てなら枠連1-8に含まれる)
D列にその馬連のオッズ
A列の枠連の番号に関していえば、当然出走頭数により存在しないものが出てくる(例:13頭立てのときの1-1,2-2,3-3いわゆる”ゾロ目”)
の出来上がりのイメージとしては
A(枠連)B(枠連オッズ)C(馬連)D(馬連オッズ)
1-2 5.2 1-2 6.8
1-3 12.6 1-3 15.9
1-3 12.6 1-4 30.8
1-4 8.9 1-5 9.8
1-4 8.9 1-6 15.7
1-5 35.9 1-7 46.8
1-5 35.9 1-8 98.9
・
・
・
です。よろしくお願いします。
まさにおっしゃるとおりで、同じレースの枠番データなら同じ長さです。すなわち
01:------000151000055000234000524000036000235000324
02:000151------000344000012000988000123000036000555
03:000055000344------000654000789000256000258000156
04:000234000012000654------000625000369000147000056
05:000524000988000789000625------000654000789000321
06:000036000123000256000369000654------000951000753
07:000235000036000258000147000789000951------000684
08:000324000555000156000056000321000753000684------
という様にA列の26行目から34行目までに固定長文字列で並んでいます。
馬連も同様の並びで38行目から55行目まで(すなわち18頭分すべて)並んでいます。17頭立てのときは
18:------------------------------------------------------------------------------------------------------------という風に記載されています。
ちなみに出走取り消し馬の馬番のところは******になります。
今ちょっと時間がないので、貼り付けイメージは後で記入させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
メモ帳(テキストデータ)をExc...
-
CString型の文字列連結について
-
VBA 空白セルを削除ではない方...
-
ページ数を求めたい
-
特定のデータの抽出方法を教え...
-
VB6のListの使い方
-
配列でデータが入っている要素...
-
<VB>String→Object
-
プログラムで重複した時間帯は...
-
FFTを使って信号から特定の周波...
-
VBAを使ってOutlookメール本文...
-
VBA 円グラフ 特定条件に一致し...
-
S9タイプからXタイプにデータ...
-
VBAでシートからコンボボックス...
-
ハミング窓関数とFFT(高速フー...
-
VBでカードリーダ(USB)のイベ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
【プログラム】プログラミング...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
特定のデータの抽出方法を教え...
-
EXCELVBAでSQLserverからデータ...
-
エクセルで2つの時系列のデー...
-
多量のSUMIF式を軽くしたい
-
この行は既に別のテーブルに属...
-
C# ソケット通信でデータ受信時...
-
カンマからスラッシュに
-
[C言語] コメント文字列を無視...
-
S9タイプからXタイプにデータ...
-
ブレーカー落ちで壊れたりしな...
-
ページ数を求めたい
-
シーケンサにパソコンからアク...
-
Accessで該当データにフラグを...
-
CString型の文字列連結について
おすすめ情報