家計簿アプリ

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

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

家計簿アプリを、より使いやすく自分仕様に改造していきましょう!

以前の投稿で、家計簿アプリとして最低限の機能を持たせることができました。
(その6までをご確認いただいていない方は、まずは下記まとめをご確認ください。)

ただ、これは本当に最低限の機能しかなく、勘定科目も『固定費』と『変動費』しかないので、
各家庭に合った勘定科目を自由に追加できるように
このマクロのデコレーションをしていく必要があります。

前回、好きな詳細科目を追加できるように作り変えることができました。

ただ前回の修正だと、項目の選択がやりやすい形にしてはいますが、それでもまだ操作に手間がかかってしまっています。
より簡単な操作にしようと思うと、
 金額入力 ⇒ 項目選択のボタン
をするだけでリストに追加されていけば、操作の手間がさらに減りますよね。

今回は、各勘定科目ごとにボタンを作って、金額を入力してボタンを押せばリストに追加されていくようにしていきたいと思います。

【本記事の目標】

複数のボタンを処理できるマクロにしよう

簡単なイメージは下記記事に記載していますので、イメージづくりや今回以降の流れの参考に。
また、前回の記事については下記をご確認ください。

 



基本の考え方

現状の入力シートでの入力方法のイメージを書くと、下記のような動きをしていることになります。

これをベースにマクロを修正していき、『リストに追加』のボタンを各勘定科目ごとに作って、
 金額入力⇒ボタンクリック
だけで入力していく、というのが今回の目的です。

最終的には、下記のようなシートが出来上がるイメージです。

このシートで、金額を入力した後、任意の勘定科目のボタンを押せば、記載された金額でこの勘定科目を使った、というデータがリストに記載されます。

じゃあ、これを実現しようと思うと、マクロをどういった修正を施せばいいのでしょうか。

少し強引なやり方

一番わかりやすいやり方は、『リストに追加』のマクロ(KamokuInput_1のプロシージャ)で、シートに記載されている内容を読み込んでいる場所を修正し、シートの場所を読み込むのではなく直接入力してしまう、というやり方です。

例えば『食費』というボタンを作った場合、新しく「SyokuhiInput_1」というプロシージャを作って、中に「KamokuInput_1」の内容をそのままコピーし、シートから読み込んでいた部分(Syushi1、Kamoku1、Kamoku2という変数)に直接『食費』というデータを入力するようにしていたらいいのです。

実はこの方法だと、マクロを変更するのはこれだけです。
勘定科目はまだまだ数がありますので、これと同じように『給料』『光熱費』『生活費』を作っていき、各ボタンに各項目のプロシージャがリンクするようにしておけばOKです。

ただこの方法だと、「KamokuInput_1」に記載されていた内容と全く同じコードが、勘定科目のボタンの数だけできてしまうことになります。
マクロとしては実は全く問題はないですが、コードが非常に煩雑になってしまうのと、
例えば貼り付け先の列を1列ずらしたいとなったとき、勘定科目のボタンにリンクされている全てのプロシージャを修正する必要があり、非常に手間がかかってしまいます。

修正・編集がやりやすいマクロの構成

上記のように、コードのほとんどが同じ動作で、一部分だけ異なる動きをするようなマクロを作る場合は、同じ動作をする部分だけを別プロシージャとして記載しておき、異なる動きをする部分だけ個別のプロシージャとして書いておくと、何か修正が必要になった場合でも修正作業が非常に楽になります。

このようなプロシージャの書き方は、【フォルダ内一覧化アプリ】の再帰呼び出しの部分でも使っている方法ですので、ぜひご参考ください。

それでは上記のイメージ図を基に、今ある『KamokuInput_1』のプロシージャを少し改造し、同じ動作をする部分だけ残して他のプロシージャから呼び出しやすい形にし、
あとは各勘定科目のボタンのプロシージャを作って、そこから呼び出すようにしていきましょう。



今あるマクロの修正

元のマクロを、他から呼び出される関数に

それでは今ある『KamokuInput_1』のプロシージャを少し改造していきます。

修正したい部分は個別に入力が必要な『収支』『固定費・変動費』『各勘定科目』を読み込んでいる下記部分ですね。

ここをどう改造していくかですが、色々と方法はありますが1つの方法として、
これらの項目を引数として入力するというのがあります。

引数に関しては下記記事でも説明していますので、ご参考ください。

引数は、このプロシージャを呼び出す際に入力する値になりますので、別プロシージャから呼び出す際に自由に入力ができるので、同じプロシージャを呼び出したとしても、入力した引数によって異なる動きをさせることができます。

引数を設定する場合は、プロシージャの名前の隣の括弧の中に記入します。
  Sub KamokuInput_1(「この部分に引数となる変数を記入する」)
また、引数として設定した時点で変数として定義されますので、別途『Dim』等での定義は不要になります。
ですので、今回入力したい『Syushi1』『Kamoku1』『Kamoku2』これらの変数を全て引数に設定してしまえば、マクロの修正は完了です。

完成したマクロは下記のようになります。

Option Explicit

Sub KamokuInput_1(Syushi1 As String, Kamoku1 As String, Kamoku2 As String)
'リストに追加をクリック

Dim Kingaku1 As Double

Kingaku1 = ThisWorkbook.ActiveSheet.Range("C3").Value


Dim EndRow1 As Integer

With ThisWorkbook.ActiveSheet

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

.Cells(EndRow1, 2).Value = Syushi1
.Cells(EndRow1, 3).Value = Kamoku1
.Cells(EndRow1, 4).Value = Kamoku2

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

End With

Call Jisaku_SUM

End Sub

ボタンクリック時のマクロ

これで同じ動作をする部分だけのプロシージャを作ることができましたので、あとはこれを呼び出すマクロを組んでしまえばOKです。

これを呼び出すマクロは非常に単純で、ただ呼び出して引数に入力したい単語を記載するだけになります。
例えば『食費』の項目のプロシージャだと下記のようになります。

Option Explicit

Sub Syokuhi_1()

Call KamokuInput_1("支出", "変動費", "食費")

End Sub

これだけ?
と思われるかもしれませんが、これだけです。
あとは任意で作った勘定科目の分だけこのようなプロシージャを作ればOKです。

1つ1つのプロシージャは単純ですが、数が多くなりますので別モジュールとして記載しましょう。
今回は『ButtonClick1』というモジュールを作って、そこに全てのボタンに対応するプロシージャを記載していくようにします。

実際に記載したものが下記になります。

Option Explicit

'給料
Sub Kyuryo_1()
    Call KamokuInput_1("収入", "", "給料")
End Sub

'光熱費
Sub Konetsuhi_1()
    Call KamokuInput_1("支出", "固定費", "光熱費")
End Sub

'通信費
Sub Tushinhi_1()
    Call KamokuInput_1("支出", "固定費", "通信費")
End Sub

'家賃
Sub Yatin_1()
    Call KamokuInput_1("支出", "固定費", "家賃")
End Sub

'食費
Sub Syokuhi_1()
    Call KamokuInput_1("支出", "変動費", "食費")
End Sub

'生活費
Sub Seikatsuhi_1()
    Call KamokuInput_1("支出", "変動費", "生活費")
End Sub

'衣服代
Sub Ihukudai_1()
    Call KamokuInput_1("支出", "変動費", "衣服代")
End Sub

'教育費
Sub Kyoikuhi_1()
    Call KamokuInput_1("支出", "変動費", "教育費")
End Sub

'娯楽費
Sub Gorakuhi_1()
    Call KamokuInput_1("支出", "変動費", "娯楽費")
End Sub

 



各項目ごとのボタンを作る

これで必要なマクロは出来上がりましたので、あとは各勘定科目ごとのボタンを作って、それぞれに相当するマクロを割り当ててあげれば完成です。

ボタンに関してはどんな形でもいいです。自分好みに作って配置してもらったらいいかと思います。
下記に1例を置いておきます。

ちなみに、今回ボタン入力で勘定科目が入力されますので、以前までにあったドロップダウンリストから選ぶ部分は不要になりますので削除しています。

あとはこのボタンにマクロを割り当てていけばOKです。
例えば『食費』のボタンだと
 右クリック
   ⇒ マクロの登録(N)
     ⇒ Syokuhi_1のマクロを選択し『OK』をクリック

とすれば『食費』のボタンの完成です。

あとは、同じ流れで全てのボタンにそれぞれに対応するマクロを割り当てれば完成です。

実際に使ってみると入力が非常に楽になっているのが分かると思います。

次の記事へ

コメント

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