目次
VBAを使う考え方 その1
こんにちは。伊川(@naonaoke)です。
今回は、SCHOOL OF VBAの知識をどのように使うのかを解説していきます。
コラボ指数という数値をTargetに取込をします。
コラボ指数、Targetについては、動画の最初に説明していますので、参考にしてください。
今回の動画とブログの使い方
動画は、4本くらいになります。
作成したコードを動画で解説しています。
毎回、ファイルをダウンロードしてください。
ファイルには、Excelファイルとメモ帳が同梱されています。
メモ帳のコードを上から順番に、Excelの各モジュールに貼って作動を確認してください。
その際に、時間がかかってもいいので、一行一行確認しながら、作動を確認してください。
貼り方はブログで解説をします。
SCHOOL OF VBAで、スキルを1~3にするといいました。
この動画とブログをマスターすれば、スキル5になることを保証します。
また、質問がある場合は、ブログのコメント欄に記載をお願いします。
不明点はみんなで共有したほうがいいかなと思っています。
Targetというソフトに好きな数値を取り込むには?
レースIDを作成する
レースIDには、一定のルールがあります。
2020 ⇒ 西暦
0126 ⇒ 日時
06 ⇒ 場所コード(競馬場を指定します)
01 ⇒ 回次
09 ⇒ 日次
11 ⇒ レース番号(11R)
01 ⇒ ゼッケン番号(1番の馬)
202001260601091101というレースIDを有する馬は、ウラヌスチャームという馬になります。
このキーは、ACCESSでいう主キーになります。
コラボ指数取込 作成手順その1 データベース確認
ダウンロードすると、コラボ指数.xlsm というファイルがあります。
そのファイルでコードを仕込んでいきます。
コラボ指数取込 作成手順その2 数値を取り込むには?
赤枠の数値が必要になります。
この数値をコピーして、別シートに貼っていきます。
メルクマールを決める
東京1Rをメルクマールにした理由
東京1Rという値は、C列に一つしかない。
1Rがないということは、絶対にない。
この理由から、東京1Rをメルクマールにしました。
コラボ指数取込 作成手順その3 東京1Rを見つける
Sub セルを見つける() ‘ ①
このコードを標準モジュールに貼り付けます。
東京1Rがアクティブになりました。
コラボ指数取込 作成手順その4 OFFSET関数を利用する
指数は、東京1Rから、3下がり、1右にずれます。
この場合は、OFFSET関数の出番になります。
指数を取り込む目途がたちましたので、その前に下処理をします。
コラボ指数取込 作成手順その5 レースIDを作成する準備
いきなりコードを全部実行しても、意味が分からないので、一行ずつ標準モジュールに貼ってください。
最終列の特定とB列を文字列にする
最終列の特定は上の記事です。
レース番号を抽出する
B列を文字列にするには、1 を01にしなければならないからです。
競馬場の地名を抽出する
レース番号を抽出するための細工
数字のみを抽出できました。
なぜこのような手法を使ったのか?
1Rのとき、Rのみを消すという方法も考えましたが、コードが面倒なのです。
あえて、B列の文字を3文字にしてから、最初の2文字を取り出すという方法を使いました。
ループについてなぜ、(i-5)という方法を使ったのか
上の記事で、cellsの場合は、変数を使って、その変数を足したり、引いたりできると紹介しました。
そのことを紹介したかったのです。
参考にしていただければと思います。
では、その2でまたお会いしましょう。
今回のコードは標準モジュールに記載してください
Sub セルを見つける() ' ① Dim myOb As Range Dim i As Long Dim keyWord As String Set myRange = Worksheets("Sheet1").Range("C:C") keyWord = Range("D1") Set myobj = myRange.Find(keyWord, LookAt:=xlWhole) myobj.Select With ActiveCell '〇〇1Rを起点に考える maxrow = Cells(Rows.Count, 3).End(xlUp).Row 'B列を文字列にする Range("B:B").NumberFormatLocal = "@" 'B列にレース番号を競馬場を書き出す For i = 5 To maxrow Step 5 .Offset(i - 5, -1) = Mid(.Offset(i - 5), 3, InStr(.Offset(i - 5), "R")) .Offset(i - 5, -2) = Left(.Offset(i - 5), 2) 'B列が2文字だったら、先頭に0をつける If Len(.Offset(i - 5, -1)) = 2 Then .Offset(i - 5, -1) = "0" & .Offset(i - 5, -1) End If 'B列が3文字だったら、先頭から二文字を抽出 .Offset(i - 5, -1) = Left(.Offset(i - 5, -1), 2) Next i End With End Sub