確かに、妻のように、お金を数えるのが大好きです。 さらに、それは単純ではありません。「彼らが稼いだ金額と費やした金額」。 いいえ、彼女はそれらをグループに分け、毎日カウントします。 このビジネスは非常に骨が折れるものであり、かなりの時間がかかります。 彼女の仕事を促進するために、そして私の利己的な動機のために、私は小さな計算機を作りました。
数日間、私は彼女が読書室に何を望んでいるかを見つけようとした。 信じられないほどの努力を犠牲にして、かなり小さなリストが得られました。
必要条件
-  収益会計 
      
- 受領日
 - 受け取った量
 - カードまたは現金で
 
 -  原価計算 
      
- 費用の日付
 - 費用額
 - 何を使いましたか
 
 - 残金はいくらですか
 - 私たちは何にお金を使っていますか(スケジュール)
 
選択肢
他のプログラマと同じように、「何を書けばいいの?」という質問がありました。 PythonからJavaまで多くのオプションがありました。 しかし、私はかなり怠け者なので、ボタンを「描画」したくありませんでした。 次に、Excelを詳しく調べました。 「これがインターフェースです」と私は自分に言いました。 それはあなたのお金がテーブルよりもどこに行ったのかをさらに明確に説明することができ(私はインフォグラフィックについて話していません)、誰もがそれを扱うことができます。
プロセス
したがって、Excelブックを作成します。デフォルトでは3つのシートがありますが、これで十分です。
最初のシート(「シート1」)
「1」行に、日付、金額、カード/現金、合計を入力します
      そのため、「日付」列の形式は「日付」、「金額」-最も近い整数に丸めたお金です。 [カード/現金]列を少し工夫する必要があります。 まず、この列に表示されるリストを作成します。
「Ctrl」+「右矢印」を押すと、シートの右端の列に表示されます。 ここにリストを書きます:
- 私のカード
 - 妻カード
 - 現金
 
次に、セル「D2」の上に立ち、「Ctrl」+「下矢印」を押します。 そのため、ヘッダーなしで列全体を選択します。
これらのセルのドロップダウンリストを作成します。 「データ」->「検証...」。 開いているウィンドウで、「データ型」:「リスト」を選択し、「ソース」でリストが書き込まれた列を示し、「= $ IV:$ IV」の例を取得しました。
列全体を選択するので、アイテムを追加するときにメニューを再割り当てする必要はありません。
セルにドロップダウンリストが追加されました。
      最後に、セル「D2」の「合計」列で、式は次のようになります-「= SUM(B2:B65536)」
最初のシートの準備ができました。 これが収入です。
セカンドシート(「シート3」)
ここではすべてが同じです。「Card / Cash」列の代わりに「What」列があり、ドロップダウンリストが変更されます。たとえば、このようなレコードがまだ含まれています。
- 製品
 - たばこ
 - 道順
 - ビール
 
3番目のシート(「データ」)
最も興味深いこと。 シートは次のようになります。
      セル「A2」の数式は「= Sheet1!D2-Sheet3!D2」であり、シートにグラフを追加します。
      私には、回覧がより視覚的に見えるようです。
次に、マクロを実行しやすくするためのパネルを作成します。 ツールバーを右クリック->「設定」ボタン「作成」。 私のメニューは「MyToolBar」と呼ばれ、この名前はマクロで使用されるので、変更する場合は忘れずに変更してください。
ツールバーが表示されたら、「Alt」+「F11」を押します。
ToolBar`eでボタンを作成するためのマクロ:
Public Sub InitToolBar() 
      
        
        
        
      
     Dim cmdBarSm As CommandBar 
      
        
        
        
      
     Dim ctlNewbtn As CommandBarButton 
      
        
        
        
      
     'Application.CommandBars("MyToolBar").Controls(" ").Delete 
      
        
        
        
      
     'Application.CommandBars("MyToolBar").Controls(" ").Delete 
      
        
        
        
      
     'Application.CommandBars("MyToolBar").Controls(" ").Delete 
      
        
        
        
      
     Set cmdBarSm = Application.CommandBars("MyToolBar") 
      
        
        
        
      
     Set ctlNewbtn = cmdBarSm.Controls.Add(msoControlButton) 
      
        
        
        
      
     ctlNewbtn.Caption = " " 
      
        
        
        
      
     ctlNewbtn.FaceId = 26 
      
        
        
        
      
     ctlNewbtn.OnAction = "getMonth" 
      
        
        
        
      
     Set ctlNewbtn = cmdBarSm.Controls.Add(msoControlButton) 
      
        
        
        
      
     ctlNewbtn.Caption = " " 
      
        
        
        
      
     ctlNewbtn.FaceId = 28 
      
        
        
        
      
     ctlNewbtn.OnAction = "getDay" 
      
        
        
        
      
     Set ctlNewbtn = cmdBarSm.Controls.Add(msoControlButton) 
      
        
        
        
      
     ctlNewbtn.Caption = " " 
      
        
        
        
      
     ctlNewbtn.FaceId = 31 
      
        
        
        
      
     ctlNewbtn.OnAction = "GetGroup" 
      
        
        
        
      
     End Sub 
      
        
        
        
      
    
      
      ロックされたコードには、これらのボタンを削除するコマンドがあります。 このようなマクロを初めて実行する必要がある場合、そうでない場合、ボタンが見つからないと誓います。
コストを計算するための3つのボタンを作成しました:「日別」、「月別」、「グループ別」。 アイコンは、OnActionでマクロと呼ばれるFaceIdで設定されます。
getMonthマクロ:
Sub getMonth() 
      
        
        
        
      
     Dim ActSheet As Worksheet 
      
        
        
        
      
     Dim BeginCell As Integer 
      
        
        
        
      
     Dim SumCell As Integer 
      
        
        
        
      
     Dim CurSumCell As Integer 
      
        
        
        
      
     Dim NewData As Boolean 
      
        
        
        
      
     Dim CurData As Date 
      
        
        
        
      
     Dim ValueP As Integer 
      
        
        
        
      
     Dim MonthNow As String 
      
        
        
        
      
     
      
        
        
        
      
     '   
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Range("A5", "D65536").Select 
      
        
        
        
      
     Selection.Clear 
      
        
        
        
      
     '   
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     BeginCell = 2 
      
        
        
        
      
     CurSumCell = 5 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     
      
        
        
        
      
     While ActSheet.Cells(BeginCell, 1).Value <> Empty 
      
        
        
        
      
     NewData = True 
      
        
        
        
      
     SumCell = 5 
      
        
        
        
      
     CurData = ActSheet.Cells(BeginCell, 1).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ' 
      
        
        
        
      
     While ActSheet.Cells(SumCell, 1).Value <> Empty 
      
        
        
        
      
     If MonthName(Month(CurData)) = ActSheet.Cells(SumCell, 1).Value Then 
      
        
        
        
      
     NewData = False 
      
        
        
        
      
     End If 
      
        
        
        
      
     SumCell = SumCell + 1 
      
        
        
        
      
     Wend 
      
        
        
        
      
     '   
      
        
        
        
      
     If NewData Then 
      
        
        
        
      
     ActSheet.Cells(CurSumCell, 1).Value = MonthName(Month(CurData)) 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ValueP = ActSheet.Cells(BeginCell, 2).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Cells(CurSumCell, 3).Value = ActSheet.Cells(CurSumCell, 3).Value + ValueP 
      
        
        
        
      
     CurSumCell = CurSumCell + 1 
      
        
        
        
      
     End If 
      
        
        
        
      
     ' 
      
        
        
        
      
     If Not NewData Then 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ValueP = ActSheet.Cells(BeginCell, 2).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Cells(CurSumCell - 1, 3).Value = ActSheet.Cells(CurSumCell - 1, 3).Value + ValueP 
      
        
        
        
      
     End If 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     BeginCell = BeginCell + 1 
      
        
        
        
      
     Wend 
      
        
        
        
      
     
      
        
        
        
      
     '   
      
        
        
        
      
     Set ActSheet = Worksheets.Item("1") 
      
        
        
        
      
     BeginCell = 2 
      
        
        
        
      
     CurSumCell = 5 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     
      
        
        
        
      
     ' A   
      
        
        
        
      
     While ActSheet.Cells(BeginCell, 1).Value <> Empty 
      
        
        
        
      
     NewData = True 
      
        
        
        
      
     SumCell = 5 
      
        
        
        
      
     CurData = ActSheet.Cells(BeginCell, 1).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ' 
      
        
        
        
      
     MonthNow = ActSheet.Cells(SumCell, 1).Value 
      
        
        
        
      
     While ActSheet.Cells(SumCell, 1).Value <> Empty 
      
        
        
        
      
     If MonthName(Month(CurData)) = ActSheet.Cells(SumCell, 1).Value Then 
      
        
        
        
      
     NewData = False 
      
        
        
        
      
     End If 
      
        
        
        
      
     SumCell = SumCell + 1 
      
        
        
        
      
     Wend 
      
        
        
        
      
     '   
      
        
        
        
      
     If NewData Then 
      
        
        
        
      
     ActSheet.Cells(CurSumCell, 1).Value = MonthName(Month(CurData)) 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("1") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ValueP = ActSheet.Cells(BeginCell, 2).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Cells(CurSumCell, 2).Value = ActSheet.Cells(CurSumCell, 2).Value + ValueP 
      
        
        
        
      
     CurSumCell = CurSumCell + 1 
      
        
        
        
      
     End If 
      
        
        
        
      
     ' 
      
        
        
        
      
     If Not NewData Then 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("1") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ValueP = ActSheet.Cells(BeginCell, 2).Value 
      
        
        
        
      
     
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     If ActSheet.Cells(CurSumCell - 1, 1).Value <> MonthName(Month(CurData)) Then 
      
        
        
        
      
     ActSheet.Cells(CurSumCell, 4).FormulaR1C1 = "=RC[-2]-RC[-1]" 
      
        
        
        
      
     CurSumCell = CurSumCell + 1 
      
        
        
        
      
     End If 
      
        
        
        
      
     ActSheet.Cells(CurSumCell - 1, 2).Value = ActSheet.Cells(CurSumCell - 1, 2).Value + ValueP 
      
        
        
        
      
     End If 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("1") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     BeginCell = BeginCell + 1 
      
        
        
        
      
     Wend 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     End Sub
      
      マクロgetDay:
Sub getDay() 
      
        
        
        
      
     Dim ActSheet As Worksheet 
      
        
        
        
      
     Dim BeginCell As Integer 
      
        
        
        
      
     Dim SumCell As Integer 
      
        
        
        
      
     Dim CurSumCell As Integer 
      
        
        
        
      
     Dim NewData As Boolean 
      
        
        
        
      
     Dim CurData As Date 
      
        
        
        
      
     Dim ValueP As Integer 
      
        
        
        
      
     Dim MonthNow As String 
      
        
        
        
      
     
      
        
        
        
      
     '   
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Range("F5", "G65536").Clear 
      
        
        
        
      
     '   
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     BeginCell = 2 
      
        
        
        
      
     CurSumCell = 5 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     
      
        
        
        
      
     While ActSheet.Cells(BeginCell, 1).Value <> Empty 
      
        
        
        
      
     NewData = True 
      
        
        
        
      
     SumCell = 5 
      
        
        
        
      
     CurData = ActSheet.Cells(BeginCell, 1).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ' 
      
        
        
        
      
     While ActSheet.Cells(SumCell, 6).Value <> Empty 
      
        
        
        
      
     If CurData = ActSheet.Cells(SumCell, 6).Value Then 
      
        
        
        
      
     NewData = False 
      
        
        
        
      
     End If 
      
        
        
        
      
     SumCell = SumCell + 1 
      
        
        
        
      
     Wend 
      
        
        
        
      
     '   
      
        
        
        
      
     If NewData Then 
      
        
        
        
      
     ActSheet.Cells(CurSumCell, 6).Value = CurData 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ValueP = ActSheet.Cells(BeginCell, 2).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Cells(CurSumCell, 7).Value = ActSheet.Cells(CurSumCell, 7).Value + ValueP 
      
        
        
        
      
     CurSumCell = CurSumCell + 1 
      
        
        
        
      
     End If 
      
        
        
        
      
     ' 
      
        
        
        
      
     If Not NewData Then 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ValueP = ActSheet.Cells(BeginCell, 2).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Cells(CurSumCell - 1, 7).Value = ActSheet.Cells(CurSumCell - 1, 7).Value + ValueP 
      
        
        
        
      
     End If 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     BeginCell = BeginCell + 1 
      
        
        
        
      
     Wend 
      
        
        
        
      
     
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     End Sub 
      
        
        
        
      
    
      
      そして最後に、最後のGetGroup
Sub GetGroup() 
      
        
        
        
      
     Dim ActSheet As Worksheet 
      
        
        
        
      
     Dim BeginCell As Integer 
      
        
        
        
      
     Dim SumCell As Integer 
      
        
        
        
      
     Dim CurSumCell As Integer 
      
        
        
        
      
     Dim NewData As Boolean 
      
        
        
        
      
     Dim CurGroup As String 
      
        
        
        
      
     Dim ValueP As Integer 
      
        
        
        
      
     
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Range("I5", "J65536").Clear 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     BeginCell = 2 
      
        
        
        
      
     CurSumCell = 5 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     
      
        
        
        
      
     While ActSheet.Cells(BeginCell, 3).Value <> Empty 
      
        
        
        
      
     NewData = True 
      
        
        
        
      
     SumCell = 5 
      
        
        
        
      
     CurGroup = ActSheet.Cells(BeginCell, 3).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ' 
      
        
        
        
      
     While ActSheet.Cells(SumCell, 9).Value <> Empty 
      
        
        
        
      
     If CurGroup = ActSheet.Cells(SumCell, 9).Value Then 
      
        
        
        
      
     NewData = False 
      
        
        
        
      
     CurSumCell = SumCell + 1 
      
        
        
        
      
     End If 
      
        
        
        
      
     SumCell = SumCell + 1 
      
        
        
        
      
     Wend 
      
        
        
        
      
     '   
      
        
        
        
      
     If NewData Then 
      
        
        
        
      
     If ActSheet.Cells(CurSumCell, 9).Value <> Empty Then 
      
        
        
        
      
     CurSumCell = CurSumCell + 1 
      
        
        
        
      
     End If 
      
        
        
        
      
     ActSheet.Cells(CurSumCell, 9).Value = CurGroup 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ValueP = ActSheet.Cells(BeginCell, 2).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Cells(CurSumCell, 10).Value = ActSheet.Cells(CurSumCell, 10).Value + ValueP 
      
        
        
        
      
     CurSumCell = CurSumCell + 1 
      
        
        
        
      
     End If 
      
        
        
        
      
     ' 
      
        
        
        
      
     If Not NewData Then 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ValueP = ActSheet.Cells(BeginCell, 2).Value 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActSheet.Cells(CurSumCell - 1, 10).Value = ActSheet.Cells(CurSumCell - 1, 10).Value + ValueP 
      
        
        
        
      
     End If 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("3") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     BeginCell = BeginCell + 1 
      
        
        
        
      
     Wend 
      
        
        
        
      
     Set ActSheet = Worksheets.Item("") 
      
        
        
        
      
     ActSheet.Activate 
      
        
        
        
      
     ActiveSheet.Shapes("Chart 1").Select 
      
        
        
        
      
     ActiveChart.SetSourceData Source:=Sheets("").Range("I5:J" + CStr(CurSumCell - 1)), PlotBy:= _ 
      
        
        
        
      
     xlColumns 
      
        
        
        
      
     End Sub 
      
        
        
        
      
    
      
      ここに興味深い点があります
ActiveSheet.Shapes("Chart 1").Select 
      
        
        
        
      
     ActiveChart.SetSourceData Source:=Sheets("").Range("I5:J" + CStr(CurSumCell - 1)), PlotBy:= _ 
      
        
        
        
      
     xlColumns 
      
        
        
        
      
    
      
      [範囲]で、[データ]シートの書式を変更した場合はもちろん、範囲を示すことを忘れないでください。
おわりに
これですべて準備完了です。 もちろん、完璧なマクロコードのふりをするわけではありませんが、その仕事はうまくいきます。 この読者は多くの人にとって有用であり、これらの正月休みにあなたの愛する人と過ごす時間を少し節約すると思います。