■ マクロ残高証明
§1.データを揃えるため、サンプルデータをダウンロードする
- [麻里府発]の まりふのひとの「公開」SkyDrive に入り、
- フォルダー「麻里府パソコン同好会」をクリックし、(開く)
- フォルダ「iPSマクロ研」をクリックする。 (開く)
- 「2013-1220_出納帳サンプルデータ」(圧縮(zip形式)フォルダ)にチェックを入れ、
- [ダウンロード]をクリックする。
- [ファイルを開く]。
- 「2013-1220_出納帳サンプルデータ.xlsm」を右クリック ⇒[コピー]する。
- 保存先フォルダーを開き‥‥ 貼り付ける。
このサンプルデータには、3っのシートがある。
- [出納帳]シート
- [名前]シート
- 「前月繰越金」は、入っている前提。
- [作業用]シート
マクロは、下記が入っている。
- 前回作成したマクロ
修正箇所- 出納帳を集計する ‥‥ 書式はクリアしないようにした。
- 作業用シートのクリア ‥‥ [作業用]シートは無ければ作る。あればクリアするようにした。
- 選択したセル内の集計と云う文字を取り去る
§2.出納帳を集計する
- 前回作成したマクロ(その後、一部改修)の動作確認を行う。
- 前回の続きのマクロを作成する。(バグがあるかも...)
§2.6. マクロ名「名前の集計を取り去る」
作成済みマクロを使います。
1)操作
- [作業用]シートを選択する。
- セル A1 をクリックし、
- Shift+Ctrl+↓
- マクロ「選択したセル内の集計という文字を取り去る」を実行する。
- セル A1 をクリックし、選択を解除しておく。
2)得られたマクロ
コメント行は適当に加除してある。
- Sub 名前の集計を取り去る()
- Sheets("作業用").Select
- Range("A1").Select
- Range(Selection, Selection.End(xlDown)).Select
- Application.Run "'2013-1220_出納帳サンプルデータ.xlsm'!選択したセル内の集計という文字を取り去る"
- Range("A1").Select
- End Sub
3)補完後マクロ
-
- Sub 名前の集計を取り去る()
- Sheets("作業用").Select
- Range("A1").Select
- Range(Selection, Selection.End(xlDown)).Select
- Call 選択したセル内の集計という文字を取り去る
- Range("A1").Select
- End Sub
§2.7. ここまで作成したマクロを連続して動かす
- マクロ「aa出納帳編集」を下記のように改修後、実行する。
- Sub aa出納帳編集()
- Call 集計シートのクリア
- Call 作業用シートのクリア
- Call 出納帳を名前で並べ替える
- Call 出納帳を集計する
- Call 名前の集計を取り去る
- End Sub
§2.8. 名前「金額リスト」を作る
次に VLookup 関数を使うため、[作業用]シートの表に「金額リスト」という名前を付ける。
但し、名前はマクロに反映されないため、マクロは作らない。
1)操作
- [作業用]シートを選択する。
- 表(A2〜D12)を選択する。
- セル A1 をクリックし、
- Shift+Ctrl+End
- 名前ボックスに“金額リスト”を入力する。
§2.8. マクロ名「残金を計算する」
[名前]シートを完成させる。
1)操作
- [作業用]シートの表の右下のアドレスの取得
- [作業用]シートを選択する。
- Ctrl+End
- [名前]シートを選択する。
- セル E2 に次の式を入力する。
=IF(ISERROR(VLOOKUP(C2,金額リスト,3,FALSE)),0,VLOOKUP(C2,金額リスト,3,FALSE))
- セル F2 に次の式を入力する。
=IF(ISERROR(VLOOKUP(C2,金額リスト,4,FALSE)),0,VLOOKUP(C2,金額リスト,4,FALSE))
- セル G2 に次の式を入力する。
=D2+E2-F2
- 3行目以降は、計算式をコピーする。
2)得られたマクロ
コメント行は適当に加除してある。
- Sub 残金を集計する()
- Sheets("作業用").Select
- ActiveCell.SpecialCells(xlLastCell).Select
- Sheets("名前").Select
- Range("E2").Select
- ActiveCell.FormulaR1C1 = _
- "=IF(ISERROR(VLOOKUP(RC[-2],金額リスト,3,FALSE)),0,VLOOKUP(RC[-2],金額リスト,3,FALSE))"
- Range("F2").Select
- ActiveCell.FormulaR1C1 = _
- "=IF(ISERROR(VLOOKUP(RC[-3],金額リスト,4,FALSE)),0,VLOOKUP(RC[-3],金額リスト,4,FALSE))"
- Range("G2").Select
- ActiveCell.FormulaR1C1 = "=RC[-3]+RC[-2]-RC[-1]"
- Range("E2:G2").Select
- Selection.AutoFill Destination:=Range("E2:G21")
- Range("E2:G21").Select
- Range("A1").Select
- End Sub
3)補完後マクロ
得られたマクロは難解です。全面的に作り変えます。
- Sub 残金を集計する()
- Dim i As Long
- Dim LastRow As Long
- Dim sRange As String
- Sheets("作業用").Select
- ActiveCell.SpecialCells(xlLastCell).Select
- sRange = "$A$2:" & ActiveCell.Address
- Sheets("名前").Select
- Range("C1").Select
- Selection.End(xlDown).Select
- LastRow = ActiveCell.Row
- For i = 2 To LastRow
- If IsError(Application.VLookup(Cells(i, 3), Worksheets("作業用").Range(sRange), 3, False)) Then
- Cells(i, 5) = ""
- Else
- Cells(i, 5) = Application.VLookup(Cells(i, 3), Worksheets("作業用").Range(sRange), 3, False)
- End If
- If IsError(Application.VLookup(Cells(i, 3), Worksheets("作業用").Range(sRange), 4, False)) Then
- Cells(i, 6) = ""
- Else
- Cells(i, 6) = Application.VLookup(Cells(i, 3), Worksheets("作業用").Range(sRange), 4, False)
- End If
- Cells(i, 7) = Cells(i, 4) + Cells(i, 5) - Cells(i, 6)
- Next
- Range("A1").Select
- End Sub
≪補足説明≫
- 7行目:Ctrl+End([作業用]シートの表の右下隅のセルをアクティブにする)
- 8行目:VLookup で参照する表の範囲(A2〜D12)を sRange にセットする。($A$2:$D$12)
- 12行目:Ctrl+↓
- 13行目:C列の最終行を LastRow にセットする。
- 15行目〜29行目:For〜Nextステートメント ‥‥ テキスト P.126 STEP6 処理を繰り返す
- 16行目〜20行目:If〜Then〜Else〜End If ‥‥ テキスト P.102 STEP3 制御構造を使用する
- 16行目〜17行目:VLookup関数で作業用シート $A$2:$D$12 を検索した時、見つからなかった(エラーになった)時、"" とする。
- 19行目:見つかった時は、預り金を返す。
- 22行目〜25行目:同様に、出金額を返す。
- 28行目:残金額を計算する。
- 30行目:終わったら、セルA1 をアクティブにしておく。
§2.9. マクロを完成させる
これまで作成したマクロを順に実行させるマクロを作成する。
完成したマクロ
- Sub aa出納帳編集()
- Call 集計シートのクリア
- Call 作業用シートのクリア
- Call 出納帳を名前で並べ替える
- Call 出納帳を集計する
- Call 名前の集計を取り去る
- Call 残金を集計する
- End Sub
事後放言
- 初めに「Excel/フィルターで「を含む」で絞り込むマクロ(2条件)」を行ったので、出だしが遅れた。
- しかもバグがあるなんて‥‥ (Excel2007と Excel2010の違いかも知れないが未確認)
- 「2013-1220_出納帳サンプルデータ」(圧縮(zip形式)がアップロードしてなくて遅れた。(確認不足)
- 「完成したマクロ」まで走ったが、「残金を計算する」のコードは次回に持ち越した。
- インデントの付け方がバラバラ。この辺も次回に...