エクセルマクロを使用して、運賃を自動計算する方法
エクセルマクロを使用すれば、どんな事務作業も効率化することができます。
今回は、エクセルマクロで運賃自動計算ツールを作成します。
目次
開発タブの設定
今回は、エクセルのマクロを使用するので、下準備が必要となります。
といってもマクロに関する知識は必要ありませんのでご安心ください。
まずは「ファイルタブ」を開き、左下のオプションを選択します。
上のような画面が表示されれば、「リボンのユーザー設定」→「開発」にチェックを入れ、OKボタンを押します。
これで下準備は完了です。
マクロの記述
続いては以下のエクセルマクロのコードを貼り付けます。
貼り付け先は後程説明しますので、まずはコードをコピーしてください。
Sub macro()
Dim s1 As Worksheet
Set s1 = Worksheets(1)
Dim kenmei As String
Dim myRng As Range
Set myRng = s1.Range("G1").CurrentRegion
Dim y As Long
Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Select Case Left(Cells(i, 1).Value, 3)
Case "神奈川", "和歌山", "鹿児島"
kenmei = Left(Cells(i, 1), 4)
Case Else
kenmei = Left(Cells(i, 1), 3)
End Select
y = myRng.Find(kenmei).Column
Select Case Cells(i, 2)
Case Is <= 2
Cells(i, 3) = s1.Cells(10, y)
Case Is <= 5
Cells(i, 3) = s1.Cells(11, y)
Case Is <= 10
Cells(i, 3) = s1.Cells(12, y)
Case Is <= 20
Cells(i, 3) = s1.Cells(13, y)
Case Else
Cells(i, 3) = s1.Cells(14, y)
End Select
Next
End Sub
先ほど設定した「開発タブ」から「Visual Basic」を開きます。
このような画面が開かれると思います。
「挿入」→「標準モジュール」を選択してください。
そこに先ほどのコードをコピペします。
コードの解説
Dim s1 As Worksheet
Set s1 = Worksheets(1)
上記は、「s1」は一枚目のワークシートと定義するコードです。
Dim kenmei As String
kenmeiは、文字列の変数であることを定義しています。
これは特に理解する必要はありません。
Dim myRng As Range
Set myRng = s1.Range("G1").CurrentRegion
「myRng」はs1(1枚目のシート)のG1セルの周りのセル
すなわち、以下のシートでいうと、G1:P14までの運賃表を表します。
Dim y As Long
yは数字の変数であることを定義しています。
これは特に理解する必要はありません。
Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
iという変数は2からA列の文字が書かれている一番下の行まで繰り返すという意味です。
例えば、A列の30行目まで住所が書かれていれば、2から30
45行目まで住所が書かれていれば、2から45と、自動で数値が決められます。
Select Case ○○
Case "神奈川", "和歌山", "鹿児島"
○○に入るのが「神奈川」「和歌山」「鹿児島」だった場合、
kenmei = △△
kenmeiは△△になる。
Case Else
それ以外の場合、
kenmei = □□
kenmeiは□□になります。という文法です。
End Select
今回の場合だと ○○にあたる部分がLeft(Cells(i, 1).Value, 3)
これは左((上からi番目,右から1番目)の文字,それらの文字の3文字)
という意味になります。
さらに説明すると、iが2だとすれば、上から2番目、右から1番目
すなわち、A2セルの文字列の左から3番目までの文字となります。
このシートでいえば、A2の左から3文字=「長崎県」になります。
「神奈川」「和歌山」「鹿児島」でないので、
Case Else の条件になります。
kenmei = Left(Cells(i, 1), 3)
Left(Cells(i, 1), 3)これは先ほど述べた通りなので、
kenmeiは「長崎県」となります。
y = myRng.Find(kenmei).Column
yはmyRng(G1:P14までの運賃表)からkenmei(長崎県)を探しだし、kenmei(長崎県)が合った列の数値が入ります。
今回、長崎県はP4セルにあるので、yは16となります。(abcdefg....pは16番目だから)
Select Case Cells(i, 2)
Case Is <= 2
Cells(i, 3) = s1.Cells(10, y)
上記で説明したように、
Select Case ○○
Case Is <= 2
○○に入る数字が2以下だった場合、
Cells(i,3)(上からi番目、右から3番目のセル) = s1(1枚目のシート)のセル(上から10番目,右からy番目)
となります。
Case Is <= 5
Cells(i, 3) = s1.Cells(11, y)
Case Is <= 10
Cells(i, 3) = s1.Cells(12, y)
Case Is <= 20
Cells(i, 3) = s1.Cells(13, y)
Case Else
Cells(i, 3) = s1.Cells(14, y)
End Select
これらも先程と同じ意味合いになります。
Next
これらの動作を繰り返すという意味です。
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
またこのコードの下の行から順番に動作します。
ただし、先ほどはiが2でしたが、次は3になります。
そして、iが指定の数値まで到達すれば、終了となります。
コードの解説は以上となります。
これと同じようなシートを作成すれば、コードを全くいじらずに
コピペで使うことができます。
ぜひ試してみてください!
エクセルの事務作業を圧倒的に効率化したい方、エクセルの単純作業に時間をかけたくない方はこちらからご相談ください!
excelの自動化や効率化、便利屋になります 関数やマクロを使用し、Excelの作業を大幅に効率化します! | Excelマクロ作成・VBA開発 | ココナラ