スポンサーリンク

日常の面倒は、VBAに任せろ

 

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

日常の実務でもあるあるだと思うのですが、毎回、毎回、コピッて、ㇵっての繰り返しはいやになりますよね。

もし、ボタン一発で解決したら、こんなに楽なことはありません。

今回は、面倒は、VBAに任せろという題名で、皆さんに関数とVBAを比較して紹介します。

 

スポンサーリンク

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

 

今回のテーマ
  • 毎日の繰り返し作業に嫌気がさしている人
  • お好みの文字を抽出したい人
  • なんでもボタン一発で解決したい人
スポンサーリンク

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

関数とVBAの考え方は基本、変わりません。VBAのほうが、少し難しいでが、個人的には、難易度は同じくらいです。勇気をもってVBAのコードを1行でいいので書いてみましょう。そうすれば、VBAは楽しくなります。

レースIDを作成したい


この赤枠の中を、自動で、必要な事項を入力したいわけです。

ExcelのセルA1に下記の情報が与えられています。

[馬連マトリクス](馬連人気順) 2019831日(土)札幌
259R 14.15発走

この赤字になった文字を抜き取りたいわけです。

レースIDとは何か?

JRAの競走馬には、開催毎に、IDが割り振られます。

201908310102050901 これが、レースIDのサンプルです。

 

このレースIDを作成することで、データベースで管理をすることが可能な訳です。

入力するのがとても面倒なため、何とか、自動で取得したいわけです。

レースIDの構成
20190831⇒年月日
01   ⇒馬場コード(※01は札幌を指します)
0205  ⇒開催回数と開催日
09   ⇒レース番号
01   ⇒ゼッケン番号
つまりこの18桁のIDで競争馬を特定します。

使用する関数その1 TRIM関数

浄水器の会社で、日本トリムという会社があります。自宅でも使用しています。

TRIMの意味は、刈り取る等の意味ですね。

なぜ、TRIM関数を使うのかというと、余分な空白があると、うまく抽出できない可能性があるので、

あらかじめ、余分を取り除いておきます。

注意点は、左端と右端しか取り除くことができません。

Naosuke
料理でいうところの、あく抜きでしょうか。(笑)

 

使用する関数その2 MID関数

MID関数は、文字列の中から、文字を抽出する関数です。


セルB1の伊川直助を抽出したいときに、下記のような式を入力します。

MID関数の使い方
=MID(B1,5,4)
MID ⇒文字列の中から値を抜き出す命令を出す関数
B1  ⇒抽出したいセルを指定します。この場合は、セルB1になります。
5  ⇒セルB1のどの場所から抽出するのかを指定します。この場合は、【伊】が5番目なので、5を入力します。
4  ⇒5番目から、何文字を抽出するかを指定します。伊川直助は、4文字なので 4を指定します。

 

使用する関数その3 FIND関数

FIND関数は、指定されたセルから、値を見つける関数で、見つけた文字の位置を数字で返します。


FIND関数 ⇒特定の文字を見つけろという関数です。この場合は、セルC1から”川”を見つける関数です。

FIND関数の使い方
=FIND(“川”,”C1″,1)
C1    ⇒”川”はセルC1にあるので、その場所セルC1を指定します。
1     ⇒ セルC1の先頭から”川”を探すので、”川”は2番目の2が返ります。

仕上げ すべての関数を組み合わせる

結論から言うと、2019を抽出するためには、

関数の組合せ
=TRIM(MID(A1,FIND(“)”,A1)+1,FIND(“年”,A1)-FIND(“)”,A1)-1))
このような関数を入力します。
TRIM   ⇒空白の取り除け
MID     ⇒文字列の中から、文字を抽出しろ
A1     ⇒その場所は、セルのA1にある
FIND   ⇒”)”を見つけろ
A1+1 ⇒セルA1の”)”のその1つ後ろを指定


FIND ⇒”年”を見つけろ

A1    ⇒その場所は、セルのA1にある

-FIND(“)”,A1)-1)) ⇒ここが少し難しいですね。ポイントは、FIND関数は、数字を返すので、加減乗除ができます。

つまり、-FIND(“)”,A1)-1))は


これが、特定の文字から特定の文字までの間を抽出する方法です。

=TRIM(MID(A1,FIND(“年”,A1)+1,FIND(“月”,A1)-FIND(“年”,A1)-1)) ⇒これは、8を抽出

これを見ると、

=TRIM(MID(A1,FIND(“年”,A1)+1,FIND(“月”,A1)-FIND(“年”,A1)-1))

Naosuke
赤文字を操作すると、文字が抽出できるんじゃね?と推測ができます。

 


=TRIM(MID(A1,FIND(“月”,A1)+1,FIND(“日”,A1)-FIND(“月”,A1)-1))

31は月と日に挟まれていますので、式は、上記のようになり、

最初の月を2回、日を1回、代入することで、完成します。

特定の文字から特定の文字の間の値を抽出
=TRIM(MID(A1,FIND(“★★★”,A1)+1,FIND(“■■■”,A1)-FIND(“★★★”,A1)-1))
“★★★”⇒月 ”■■■”⇒日

Naosuke
簡単ですよね。

 

注意点

FIND関数は、文字列の一番初めの値しか見つけることができません。


だから、

=TRIM(MID(A1,FIND(“(土)”,A1)+3,FIND(“R”,A1)-FIND(“(土)”,A1)-1))

このようにして、

札幌 2回 5日 9Rと別途抽出をしなければ、なりません。

ここで、読者様から、不満が出そうです。競馬は、土曜日だけじゃないと。

それは、次回、VBAで抽出したいと思います。

スポンサーリンク

ここがポイント

 

ここがポイント
Function8.pngVBAと関数は似ていると実感できましたでしょうか?
結局、セルの範囲を、VBAのコードで表現することが出来ればいいのです。
Range(“A1″)=”伊川直助”
そうすると、セルA1に、伊川直助が入力されます。
今回は、それが、少し、複雑になっただけです。
日常の業務を楽にしましょう。
動画とブログでわかりやすくExcelとACCESSを紹介しています

 

まとめ

今回のネタは競馬です。
実際のところ、仕事より、趣味を優先している伊川直助です。
仕事は、妥協しても、趣味は妥協したくない。
男って、そんなもんですよね。
今回のブログは続編がありますので、よろしければ、合わせて、読んでいただければ幸いです。
今回も最後までお読みいただきありがとうございました。

今回のサンプルファイルありません。

ネットや基本書で調べるはやめてください

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

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

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

スポンサーリンク

Twitterでフォローしよう

おすすめの記事