pickup

目次

VBAを使う考え方 その1

こんにちは。伊川(@naonaoke)です。

今回は、SCHOOL OF VBAの知識をどのように使うのかを解説していきます。

コラボ指数という数値をTargetに取込をします。

コラボ指数、Targetについては、動画の最初に説明していますので、参考にしてください。

今回の動画とブログの使い方

動画は、4本くらいになります。

作成したコードを動画で解説しています。

毎回、ファイルをダウンロードしてください。

ファイルには、Excelファイルとメモ帳が同梱されています。

メモ帳のコードを上から順番に、Excelの各モジュールに貼って作動を確認してください。

その際に、時間がかかってもいいので、一行一行確認しながら、作動を確認してください。

貼り方はブログで解説をします。

SCHOOL OF VBAで、スキルを1~3にするといいました。

この動画とブログをマスターすれば、スキル5になることを保証します。

また、質問がある場合は、ブログのコメント欄に記載をお願いします。

不明点はみんなで共有したほうがいいかなと思っています。

Targetというソフトに好きな数値を取り込むには?

レースIDを作成する

レースIDとは16桁~18桁の数字の組み合わせです。

レース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
スポンサーリンク

Twitterでフォローしよう

おすすめの記事