【Excel マクロ初心者】Cells関数, if関数, for~next関数 ,Select関数を使って自動化してみた

スポンサーリンク
エクセル
スポンサーリンク

どうも、そこらへんの社会人です。

今回は、前回のリベンジになります。(前回は、同じようなマクロを記載しようとして挫折しました・・・・)

今回の記事を読んで頂くとタイトルにある関数の使い方が分かり具体的にどのようなことができるようになるかがわかります!
プログラミング言語と呼ばれているものは、文法から学ぶと結局それで何ができるの???と思うことが多いと思いますので
Excelマクロを学び始めたばかりという初心者の方には今回の記事を読んで頂ければ、文法と使い方が分かるのでは?と思います!

最終的なアウトプットは下記の動画になります。
高速道路の使用履歴を別のフォーマットに転記するというマクロになります。

今回の記事は、これを作成する過程を手順を追って説明しています!!

アドセンス 広告

STEP①:一か所だけをIf文を使用して記載してみる

まずは、下記のようにETCの使用履歴を左側のフォーマットに移していくことを考えます。
今回Cells関数を使うので行と列をわかりやすくするために下記のように記載しています。
(ちなみに私は最初、正:Cells関数(行,列)を 誤:Cells(列.行)で記載しマクロが動かなく混乱していました・・・)

実際のマクロがこちらになります。IF 文を用いた基本的なものになります。

Option Explicit

Sub ETC領収書作成()

If Sheets(“表の作成”).Cells(4, 2).Value = Sheets(“表の作成”).Cells(4, 12).Value _
もしCells(4, 12) = .Cells(4, 2)

And Sheets(“表の作成”).Cells(3, 3).Value = Sheets(“表の作成”).Cells(4, 13).Value Then
かつCells(4, 13) = Cells(3, 3) なら

Sheets(“表の作成”).Cells(4, 3).Value = Sheets(“表の作成”).Cells(4, 15).Value
Cells(4, 15) を .Cells(4, 3)に記載する

End If

End Sub

STEP②:For~Next文を使い1行(1か所)のみ記載してみる

STEP①ができたらSTEP②をやってみましょう

次は下記の黄色の部分をFor~Next文を使ってやっていきましょう

実際のマクロがこちらになります。IF 文を用いた基本的なものになります。

Option Explicit

Sub ETC領収書作成()

Dim gyou
関数 行(gyou)を定義

For gyou = 4 To 13
gyou関数を4~13まで繰り返す

 If Sheets(“表の作成”).Cells(gyou, 2).Value = Sheets(“表の作成”).Cells(5, 12).Value _
 もし、Cells(5,12) = Cells(gyou, 2) 

 And Sheets(“表の作成”).Cells(3, 3).Value = Sheets(“表の作成”).Cells(5, 13).Value Then
 かつ、Cells(5, 13) = .Cells(3, 3) なら

 Sheets(“表の作成”).Cells(gyou, 3).Value = Sheets(“表の作成”).Cells(4, 15).Value
 Cells(4, 15) に Cells(gyou, 3)を記載する

End If

Next

End Sub

STEP③:For~Next文を使い1行(数か所)を記載してみる

下記の黄色の3か所に記載することを考えます。
STEP②でやったものを応用すればできるのでは?と思ったので早速やっていきましょう!!
(初心者の私にとっては、結構ハードル高いです・・・)

For~Next文を2つ組み合わせてみました

Option Explicit

Sub ETC領収書作成()

Dim gyou
関数 行(gyou)を定義

Dim day
関数 日にち(day)を定義・・・12列の日にちになります

For day = 4 To 21
day関数を4~21まで繰り返す

 For gyou = 4 To 13
   gyou関数を4~13まで繰り返す

 If Sheets(“表の作成”).Cells(gyou, 2).Value = Sheets(“表の作成”).Cells(day, 12).Value _
  もし、Cells(day,12) = Cells(gyou, 2)

   And Sheets(“表の作成”).Cells(3, 3).Value = Sheets(“表の作成”).Cells(day, 13).Value Then
  かつ、Cells(day, 13) = .Cells(3, 3) なら

 Sheets(“表の作成”).Cells(gyou, 3).Value = Sheets(“表の作成”).Cells(day, 15).Value
   Cells(day, 15) に Cells(gyou, 3)を記載する

 End If

 Next

Next

End Sub

STEP④:For~Next文を使い2列を記載してみる

次は列にも適用させていきます。まずは2列のみやっていきたいと思います。
ちなみにCells関数でやる前はRange関数でもやろうと思いましたが挫折しました・・・
一応そちらの記事も書いてますのでご参考に・・・(中途半端な内容になってます・・・)

【Ecel マクロ初心者】ETC領収書をマクロで自動入力してみた(For next関数 cha関数)

Cells関数とRange関数の違いはこちらを参考にしました。

VBA講座:RangeとCellsの使い分けについて | Excel(エクセル)セミナー・研修のすごい改善
『たった1秒で仕事が片づくExcel自動化の教科書』(技術評論社)にて、紙面の都合で書けなかった詳細をこちらで解説します。 ■RangeとCellsの使い分けについて 一言で言うと、変数を使う場合はCells、使わない場合はRangeという

実際のマクロはこちらになります。

Option Explicit

Sub ETC領収書作成()

Dim gyou
関数  列(retsu)を定義

Dim day
関数  dayを定義

Dim retsu
関数 gyou を定義

For retsu = 3 To 4
retsu関数を3~4まで繰り返す

  For day = 4 To 21
  day関数を4~21まで繰り返す

  For gyou = 4 To 13
    gyou関数を4~13まで繰り返す

    If Sheets(“表の作成”).Cells(gyou, 2).Value = Sheets(“表の作成”).Cells(day, 12).Value _
    もしCells(day,12) = Cells(gyou,2)     

              And Sheets(“表の作成”).Cells(3, retsu).Value = Sheets(“表の作成”).Cells(day, 13).Value Then
              かつCells(day,13) = Cells(3,retsu)なら

    Sheets(“表の作成”).Cells(gyou, retsu).Value = Sheets(“表の作成”).Cells(day, 15).Value
    Cells(day,15)をCells(gyou, retsu)に記載する

   End If

   Next
   ’For gyou = 4 To 13

  Next
  ’For day = 4 To 21

Next
‘For retsu = 3 To 4

End Sub

STEP⑤:For~Next文を使い複数列を記載してみる(Select Case文)

特定の列のみに適用したい・・・そういう時に用いるはSelect Case文!のようです。

下記のサイト参考にしたので興味のあるかたはご参考ください。
https://excel-ubara.com/excelvba4/EXCEL287.html

これを使うことで下記の場所を記入できます。

実際に記載したマクロは以下になります

Option Explicit

Sub ETC領収書作成()

Dim gyou
関数  列(retsu)を定義

Dim day
関数  dayを定義

Dim retsu
関数 gyou を定義

Dim i
関数 iを定義

For i = 2 To 8
Select Case i
Case 2, 5, 8
iを2,5,8と代入する

For retsu = i + 1 To i + 2
※上記の式はi=2のとき 3から4  i=5のとき6から7  i=8のとき9から10 
For day = 4 To 21
day関数を4~21まで繰り返す

For gyou = 4 To 13
gyou関数を4~13まで繰り返す

If Sheets(“表の作成”).Cells(gyou, i).Value = Sheets(“表の作成”).Cells(day, 12).Value _
もしCells(day,12) = Cells(gyou,i) 

And Sheets(“表の作成”).Cells(3, retsu).Value = Sheets(“表の作成”).Cells(day, 13).Value Then
かつCells(day,13) = Cells(3,retsu)なら

Sheets(“表の作成”).Cells(gyou, retsu).Value = Sheets(“表の作成”).Cells(day, 15).Value
Cells(day,15)をCells(gyou, retsu)に記載する

End If

Next
For gyou = 4 To 13

Next
‘For day = 4 To 21
Next
‘For retsu = i + 1 To i + 2

End Select
Next
‘For i = 2 To 8

End Sub

いかがだったでしょうか?
正直、私も初心者でここまで作成するのに結構時間を必要としましたが、
自分の思った通りにマクロが動くとやりきった感が半端ないですね・・・・
これから、もっとマクロを勉強してできる幅を増やしていきたいと思います!!

コメント

  1. […] […]

タイトルとURLをコピーしました