どうも、そこらへんの社会人です。
今回は、前回のリベンジになります。(前回は、同じようなマクロを記載しようとして挫折しました・・・・)
今回の記事を読んで頂くとタイトルにある関数の使い方が分かり具体的にどのようなことができるようになるかがわかります!
プログラミング言語と呼ばれているものは、文法から学ぶと結局それで何ができるの???と思うことが多いと思いますので
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関数の違いはこちらを参考にしました。


実際のマクロはこちらになります。
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
いかがだったでしょうか?
正直、私も初心者でここまで作成するのに結構時間を必要としましたが、
自分の思った通りにマクロが動くとやりきった感が半端ないですね・・・・
これから、もっとマクロを勉強してできる幅を増やしていきたいと思います!!
コメント
[…] […]