家計簿アプリ

ExcelVBAで家計簿アプリを作ろう その1-3

家計簿アプリ
スポンサーリンク

前回からの続きです。前回投稿と併せてご確認ください。

●今までプログラミングなんかに触れたことが無くて
  「今更そんなの使いこなせるわけない」と思っている方
●小学校でプログラミングが必修科目になり、
  子どもに「ここ分からないから教えて~」と言われても
 「無理!!」と言うしかなくて困ったお父さん・お母さん

そんなプログラミング全くの初心者に向けて
 「こうやったら自動で動くソフト(Excelマクロ)が作れるんだ!」
というのを理解していただくように、
ゼロからソフトを作っていく過程を紹介していきたいと思います。

Windowsのパソコンがあれば大抵標準装備されているExcelを使って紹介しますので、
この投稿のシリーズを最後まで読んでいただければ、
また、投稿を読みながら実際に一緒にソフトを作っていっていただければ、
 「自分で実際にソフトを作ることができて、プログラミングに少し自信がついた!
と思ってもらえるかと思いますので、是非とも一緒に手を動かしてみてください。

【本記事の目標】

Excelシートに入力した値を、所定の場所に自動コピーさせよう

前回からの続きです。前回投稿と併せてご確認ください。

  1.金額を入力して勘定科目を選択したら、リストに自動で記入する。
  2.記入したリストを自動的に集計する。
  3.集計した結果から、今月使った割合が多い項目が何かわかるようにグラフ化する。
  4.翌月の内容を記入する際は、自動で新しい白紙のリストを作成して記入していく。
  5.毎月の集計結果を集めて、毎月の家計がどういう変化をしているかがわかるグラフを作る。
  6.毎月の集計結果をさらに集計し、その年使った割合が多い項目が何かわかるようにグラフ化。

Step3 リストの中で一番最後に記入されている場所を探す ⇒ Step4 一番最後の記入されている場所から、1つ次の場所を確認する

リストを準備する

金額や勘定科目がデータとして変数に入力されましたので、
その結果を記載するリストを準備していきます。
いわゆる、家計簿の表になっている部分です。
今回は金額と勘定科目を記載できればいいので、下記のようにリストを準備しておきます。

この表に、変数に入力されたデータを記載していきます。
金額は収入・支出で分けなくても問題ないですが、集計がやりやすいので今回は分けて作ってみます。

 



リストの最後の行を探す

データを記載する際、どのセルに入力するかを指定する必要があります。
セルの場所が決まっているのであれば、その場所(”B1”とか)を指定すればいいのですが、今回のようにリストに追加をしていく場合は記載したい場所が変わっていくので、
その変化に対応できる形でコードを書いていく必要があります。

このような時も、事前準備③で行った時と同じように、まずは自分が手で操作するときに、どう考えて、どう動かすのか、を具体的に細分化していくと分かりやすいです。

やり方は色々ありますが、例えばこのような方法があります。

  1. A列の一番最後の行まで行く
  2. 一番最後の行から「Ctrl+↑」でデータが入っている一番最後の行まで飛ぶ
  3. 最後の行はデータが入っているので、1つ下の行数をメモしておく

これを実際にコードで書くと下記のようになります。

Dim EndRow1 As Integer

With ThisWorkbook.Sheets("入力")

EndRow1 = .Cells(.Rows.Count, 1).End(xlUp).Row
EndRow1 = EndRow1 + 1

End With

Dim EndRow1 As Integer

EndRow1というのがデータを入力したい場所の行数をメモする変数です。
行数は整数なのでIntegerにしています。

With ThisWorkbook.Sheets(“入力”)

これは同じ文言を繰り返し使うことが多い場合に、コードを簡略化して各場合に使う構文です。
Withの後ろにある文言は、With~End Withの間では省略が可能で、
先頭に「.」を書くとそれは先頭に省略された文言が書かれている、という意味になります。

上記のコードの場合、
 「EndRow1 = .Cells(.Rows.Count, 1).End(xlUp)」
を省略せずに書くと、
 「EndRow1 = ThisWorkbook.Sheets(“入力”).Cells(ThisWorkbook.Sheets(“入力”).Rows.Count, 1).End(xlUp)」
になります。

EndRow1 = .Cells(1, .Rows.Count).End(xlUp).Row

ここは一気に一文で書いていますが、分解していくと、
 「.Rows.Count」:”入力”シートの一番最後の行数。1048576。
 「.Cells(.Rows.Count, 1)」:”A1048576”のセル
 「.End(xlUp)」:Ctrl+↑と同じ意味
 「.Row」:そのセルの行数
になっているので、この一文で
『シートの一番最後の行である”A1048576”セルからCtrl+↑して移動したセルの行数をEndRow1に入れる』
というのを実行しています。

EndRow1 = EndRow1 + 1

一番最後の行からCtrl+↑で移動すると、データがあるセルを選んでいるので、
その次の行にするためEndRow+1をしている。

これで、データを入力したい行数(リストの最後の行から1つ次の行)を取得することができた。

セルの場所を指定する場合、”A1”等のセルの場所を記載する以外に、
  Cells(行数, 列数)
とすることで、行数と列数を記載して指定することもできる。

セルの場所を示すコードに【Range】【Cells】の2つがある。
それぞれ意味合いが異なっていて、
 Range:複数のセルが含まれる領域
 Cells単一のセル
という違いがある。

【Range】は複数セルの領域と書いているが、単一セルも示すことができる。
なので【Range】を使えば【Cells】を使う必要性がないように感じるが、
あくまでも【Range】は領域を示すコードなので、
単一セルでしか操作できない上記の「Ctrl+↑」のような動きは【Range】ではできない。
そのため【Range】と【Cells】の使い分けが必要です。



Step5 一番最後の1つ次の場所に、入力された金額を記入する ⇒ Step6 一番最後の1つ次の場所に、選択された勘定科目を記入する

入力したいセルの行数がわかったので、あとは入力するだけです。

『収入』・『支出』はA列に
『勘定科目』はB列に
『収入』の場合はC列に金額を
『支出』の場合はD列に金額を
入力していきます。

この部分をコードで書くと下記のようになります。

With ThisWorkbook.Sheets("入力")

.Cells(EndRow1, 1).Value = Syushi1
.Cells(EndRow1, 2).Value = Kamoku1

If Syushi1 = "収入" Then
    .Cells(EndRow1, 3).Value = Kingaku1
Else
    .Cells(EndRow1, 4).Value = Kingaku1
End If

End With

.Cells(EndRow1, 1).Value = Syushi1

セルの場所を指定して、そこに入っている値(.Value)をSyushi1に入っているデータで置き換えています。
変数にセルの値を入れたときと、イコール(=)の右左が変わりますのでご注意ください
イコールを書いたときは、基本的に左の値を右の値で上書きします

これまでの内容を一気に書くと、下記のようになります。

Option Explicit

Sub KamokuInput_1()

Dim Kingaku1 As Double

Kingaku1 = ThisWorkbook.Sheets("入力").Range("B1").Value

Dim Syushi1 As String
Dim Kamoku1 As String

Syushi1 = ThisWorkbook.Sheets("入力").Range("D1").Value

If Syushi1 = "収入" Then
    Kamoku1 = ""
Else
    Kamoku1 = ThisWorkbook.Sheets("入力").Range("E1").Value
End If

Dim EndRow1 As Integer

With ThisWorkbook.Sheets("入力")

EndRow1 = .Cells(.Rows.Count, 1).End(xlUp).Row
EndRow1 = EndRow1 + 1

.Cells(EndRow1, 1).Value = Syushi1
.Cells(EndRow1, 2).Value = Kamoku1

If Syushi1 = "収入" Then
    .Cells(EndRow1, 3).Value = Kingaku1
Else
    .Cells(EndRow1, 4).Value = Kingaku1
End If

End With

End Sub



マクロ起動ボタンを付けて完成!

これで、
 1.金額を入力して勘定科目を選択したら、リストに自動で記入する。
というマクロが完成しました!

あとはこれを実行しやすいようにしていきます。

マクロの実行は『開発』タブの『マクロ』をクリックし、
指定のプロシージャを選択して【実行(R)】をクリックすればマクロが動き出します。

しかしこれだと実行するまでが手間なので、金額入力部分にマクロ実行のボタンを作っていきます。

作り方は簡単です。
まずはシート上にボタンになる図形を用意します。
『挿入』タブの『図形』から好きな図形を選び、金額入力部分の近くに置きます。
図形の大きさや色、文字はお好みで設定します。
今回は長方形を置きます。
3D書式で「面取り:上」を「丸」に設定するとボタンのような見栄えになるのでオススメです。

 



あとは、図形を右クリックし、『マクロの登録』をクリック。
「マクロの登録」のウィンドウが新しく立ち上がるので、
作成したプロシージャ名を選択し『OK』をクリック。

すると、この図形をクリックするとマクロが起動するようになります。

実際に金額や勘定科目を入力して図形をクリックし、動きを確認してみましょう!

次の記事へ

コメント

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