pickup

 

VBAで文字列を操作するのは、基本です。
ACCESSもそうですが、欲しい文字を抽出できた時の感動は最高ですね。競馬のデータを作成したい人は必見です。

目次

スポンサーリンク

条件判定とWithステートメントを利用してレースIDを作成

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

今回は、面倒はVBAにまかせろ その2の続きになります。

Naosuke
下記の記事を読んでいただくと、より理解が深まります。

このブログはこんな人にお勧め

今回のテーマ
  • 同じセルに対して、複数の処理をしたい
  • VBAのコードをすっきり、短くしたい
  • セルの書式を文字列に変更する

このブログを読み終わるころには・・・・・・

Excelは、0を含む文字列は、0が抜けます。文字列にあらかじめ変更する必要があります。
また、Withステートメントを利用することで、コードを短くできます。

 

セルの書式設定の一例

セルの書式

記載するコード

標準 G/標準
数値 0_ 
通貨 \#,##0;\-#,##0
日付 yyyy/m/d
時刻 [$-F400]h:mm:ss AM/PM
パーセンテージ

0%

分数 # ?/?
指数

0.00E+00

文字列 @

上記のように、セルの書式設定変更の一例です。ここではすべて紹介できませんが、上記の表で日常業務については、十分だと思います。

整形後の完成図


 

上の図のように整形したいと思います。

なぜなら、競馬のレースIDは、16桁と決まっているからです。

Excelは、数字の最初が【0】の場合、【0】は不要と判断して、削除します。

例)【02】の場合は、【2】になります。


セルを文字列対応に対応させる

セルを文字列に変更する場合のコード

Range(“A1”).NumberFormatLocal = “@”

これで文字列には対応します。

条件判定を行う

数字の【8】が入力されているセルを文字列に変更しても、【8】にしかなりません。

そのためIF構文で条件判定をすることが必要となります。

その条件判定を、コードは記載できなくてもいいので、やりたいことを声にだして言ってみましょう。

Naosuke
VBAのコードも、関数も音読できるようになると、理解できたと思ってください。
やりたいことを声に出して読んでみましょう
もし、セルの文字が1文字であれば、先頭に0をつける。そうでなければ、そのままにする。
スポンサーリンク

 

If Len(Range("A1")) = 1 Then
Range("A1").NumberFormatLocal = "@"
Range("A1") = "0" & Range("A1")
End If

 

上記のようなコードになります。

LENは、文字数を数える関数です。VBA、WorkSheet関数、共通の関数です。

競馬場を競馬場コード(馬場コード)に変換する

つぎは、JRAは、各競馬場に数字を割り振っています。

上の図のようになっています。

この場合も条件判定が必要です。

この場合は、10回の条件判定をしなければなりません。

その場合は、IF構文、Select Case構文がありますが、今回はIF構文を使います。

そしてIF構文と、Withステートメントを組み合わせて処理を行います。

前提条件としては、セルA8に、札幌と入力さいる。

セルB8に【01】入力したい。

声に出して、やりたいことを読んでみましょう。

セルA8が札幌だったら、セルB8に【01】と表示させたい。

その前に、セルB8を文字列に変更したい。


上の図で、左側は、Range(“B8”)がたくさん記載されいるのに対して、向かって右側は、Range(“B8”)が記載されているのは、1回だけです。

中学で習った数学の因数分解と同じで、共通の言葉でくくると楽になります。

この場合の共通の言葉は、Range(“B8”)になります。

With Range("B8")
.NumberFormatLocal = "@"
.Value = Left(yy, 2)
If .Value = "札幌" Then
.Value = "01"
ElseIf .Value = "函館" Then
.Value = "02"
ElseIf .Value = "福島" Then
.Value = "03"
ElseIf .Value = "新潟" Then
.Value = "04"
ElseIf .Value = "東京" Then
.Value = "05"
ElseIf .Value = "中山" Then
.Value = "06"
ElseIf .Value = "中京" Then
.Value = "07"
ElseIf .Value = "京都" Then
.Value = "08"
ElseIf .Value = "阪神" Then
.Value = "09"
ElseIf .Value = "小倉" Then
.Value = "10"
End If
End With

Withステートメントには、ルールがあり、ならず、End Withで終了を宣言しないとエラーになります。

 

Naosuke
VBAの初心者の方は、SCHOLL OF VBAを読んでいただけると、理解が深まります。

 

上のコードが完成のコードになります。

このコードの注意点は、VBAのコードは、上から順番に処理をしますので、上から、2段目に文字列にセルを変更しています。


これで完成しました。

 

スポンサーリンク

ここがポイント

ここがポイント
Function8.png
今回は、面倒はVBAに任せろの最終回になります。
この程度の文字列操作が出れば、業務の文字列操作は、カンタンにできます。
競馬は、土日で、72レースあります。
この煩雑な作業から、解放されたい一心でした。
趣味とVBAが合致すると上達が早いと思います。
動画とブログでわかりやすくExcelとACCESSを紹介しています

まとめ

条件判定のIF構文と、Withステートメントは、たくさん利用しますので、

ぜひ、みなさんのスキルにしてください。

きっと、職場で役立つと思います。

また、面倒はVBAにまかせろ その1 面倒はVBAにまかせろ その2も、

合わせて読んでいただければ、理解が深まると思います。

今回のサンプルファイルは、No6です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事