■ マクロ残高証明
前回行った手順をマクロ化してみます。
§1.データを揃えるため、サンプルデータをダウンロードする
- [麻里府発]の まりふのひとの「公開」SkyDrive に入り、
- フォルダー「麻里府パソコン同好会」をクリックし、(開く)
- フォルダ「iPSマクロ研」をクリックする。 (開く)
- 「2013-1213_出納帳サンプルデータ」(圧縮(zip形式)フォルダ)にチェックを入れ、
- [ダウンロード]をクリックする。
- [ファイルを開く]。
- 「2013-1213_出納帳サンプルデータ.xlsm」を右クリック ⇒[コピー]する。
- 保存先フォルダーを開き‥‥ 貼り付ける。
このサンプルデータには、3っのシートがある。
- [出納帳]シート
- [名前]シート
- 「前月繰越金」は、入っている前提。
- [作業用]シート
更に、マクロ名「選択したセル内の集計と云う文字を取り去る 」が入っている。(前回作成)
§2.出納帳を集計する
手順を確認しながら進めます。(バグがあるかも...)
§2.1. マクロ名「集計シートのクリア」
[名前]シートの集計場所 E〜G列をクリアします。
1)操作
- [名前]シートを選択する。
- セル E2 をクリックし、
- Shift+Ctrl+End を押下する。
- [ホーム]タブ/編集Gr.の[クリア]⇒[数式と値のクリア]をクリックする。
- セル A1 をクリックし、選択を解除しておく。
2)得られたマクロ
コメント行は適当に加除してある。
- Sub 集計シートのクリア()
- Sheets("名前").Select
- Range("E2").Select
- Range(Selection, ActiveCell.SpecialCells(xlLastCell).Select
- Selection.Clear
- Range("A1").Select
- End Sub
3)補完後マクロ
- 書式は残してクリアする。
- Sub 集計シートのクリア()
- Sheets("名前").Select
- Range("E2").Select
- Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
- Selection.ClearContents
- Range("A1").Select
- End Sub
§2.2. マクロ名「作業用シートのクリア」
1)操作
- [作業用]シートを選択する。
- セル A1 を選択し、
- Shift+Ctrl+End を押下する。
- [ホーム]タブ/編集Gr.の[クリア]⇒[すべてクリア]をクリックする。
- セル A1 をクリックし、選択を解除しておく。
2)得られたマクロ
コメント行は適当に加除してある。
- Sub 作業用シートのクリア()
- Sheets("作業用").Select
- Range("A1").Select
- Range(Selection, ActiveCell.SpecialCells(xlLastCell).Select
- Selection.Clear
- Range("A1").Select
- End Sub
3)補完後マクロ
- [作業用]シートは無ければ作る。あればクリアする。
- Sub 作業用シートのクリア()
- Dim wWorksheet As Worksheet
- Dim bFlag As Boolean
- bFlag = False
- For Each wWorksheet In Worksheets
- If wWorksheet.Name = "作業用" Then bFlag = True
- Next wWorksheet
- If bFlag = True Then
- Sheets("作業用").Select
- Range("A1").Select
- Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
- Selection.Clear
- Else
- With Worksheets.Add(after:=Worksheets(Worksheets.Count))
- .Name = "作業用"
- End With
- End If
- Range("A1").Select
- End Sub
§2.3. マクロ名「出納帳を名前で並べ替える」
今回の目的からすれば「名前」のみの並び替えでよいが、先々のことを考慮し「名前/月日」を昇順に並べる。
1)操作
- [出納帳]シートを選択する。
- Ctrl+End ‥‥ これにより、表の右下隅のセルがアクティブになる。
- これは、マクロの修整に必要な操作で、並べ替えには不要。
- セル A1 を選択し、
- [並べ替え]をクリックする。
- 【並べ替え】ダイアログボックスで
- 名前/月日を昇順とする。
- R先頭行をデータの見出しとして使用する。
- 8ふりがなを使わない。
- [OK]で並べ替える。
2)得られたマクロ
コメント行は適当に加除してある。
- Sub 出納帳を名前で並べ替える()
- Sheets("出納帳").Select
- ActiveCell.SpecialCells(xlLastCell).Select
- Range("A1").Select
- ActiveWorkbook.Worksheets("出納帳").Sort.SortFields.Clear
- ActiveWorkbook.Worksheets("出納帳").Sort.SortFields.Add Key:=Range("C2:C113"), _
- SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
- ActiveWorkbook.Worksheets("出納帳").Sort.SortFields.Add Key:=Range("B2:B113"), _
- SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
- With ActiveWorkbook.Worksheets("出納帳").Sort
- .SetRange Range("A1:G113")
- .Header = xlYes
- .MatchCase = False
- .Orientation = xlTopToBottom
- .SortMethod = xlStroke
- .Apply
- End With
- End Sub
3)補完後マクロ
- “113”という行番号が出てくるが、これはデータ量で変わるため固定できない。
- Sub 出納帳を名前で並べ替える()
- Dim LastRow As Long
- Sheets("出納帳").Select
- ActiveCell.SpecialCells(xlLastCell).Select
- LastRow = ActiveCell.Row
- Range("A1").Select
- ActiveWorkbook.Worksheets("出納帳").Sort.SortFields.Clear
- ActiveWorkbook.Worksheets("出納帳").Sort.SortFields.Add Key:=Range("C2:C" & LastRow), _
- SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
- ActiveWorkbook.Worksheets("出納帳").Sort.SortFields.Add Key:=Range("B2:B" & LastRow), _
- SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
- With ActiveWorkbook.Worksheets("出納帳").Sort
- .SetRange Range("A1:G" & LastRow)
- .Header = xlYes
- .MatchCase = False
- .Orientation = xlTopToBottom
- .SortMethod = xlStroke
- .Apply
- End With
- End Sub
§2.4. マクロ名「出納帳を集計する」
出納帳を集計し、名前別の金額合計を[作業用]シートに貼り付ける。
1)操作
- [出納帳]シートを選択する。
- セル A1 を選択し、
- [データ]タブ/アウトラインGr.の[小計]をクリックする。
- 【集計の設定】ダイアログボックスで下記を設定し、[OK]をクリックする。
- グループの基準: 名前
- 集計の方法: 合計
- 集計するフィールド:R入金額, R出金額
- R現在の小計をすべて置き換える
- □グループごとに改ページを挿入する
- R集計行をデータの下に挿入する
- アウトライン記号の[2]をクリックする。
→ 集計行と総計のみ表示される。 - 次の操作はマクロではできないので、
- セルC1をクリックし、
- Ctrl+↓ しておく。
- 集計されたデータ(C1〜F124)を選択する。
- 「可視セル」のみを選択する。(Alt+;(セミコロン))
- コピーする。(Ctrl+C)
- 作業用シートのセル A1 に値のみ 貼り付ける。
- セル A1 をクリックし、選択を解除しておく。
- [出納帳]シートを選択し、
- セル A1 をクリックし、
- 小計を[すべて削除]する。
2)得られたマクロ
コメント行は適当に加除してある。
- Sub 出納帳を集計する()
- Sheets("出納帳").Select
- Range("A1").Select
- Selection.Subtotal GroupBy:=3, Function:=xlSum, TotalList:=Array(5, 6), _
- Replace:=True, PageBreaks:=False, SummaryBelowData:=True
- ActiveSheet.Outline.ShowLevels RowLevels:=2
- Range("C1").Select
- Selection.End(xlDown).Select
- Range("C1:F124").Select
- Selection.SpecialCells(xlCellTypeVisible).Select
- Selection.Copy
- Sheets("作業用").Select
- Range("A1").Select
- Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
- :=False, Transpose:=False
- Range("A1").Select
- Sheets("出納帳").Select
- Range("A1").Select
- Application.CutCopyMode = False
- Selection.RemoveSubtotal
- End Sub
3)補完後マクロ
- “124”という行番号が出てくるが、これはデータ量で変わるため固定できない。
- Sub 出納帳を集計する()
- Dim LastRow As Long
- Sheets("出納帳").Select
- Range("A1").Select
- Selection.Subtotal GroupBy:=3, Function:=xlSum, TotalList:=Array(5, 6), _
- Replace:=True, PageBreaks:=False, SummaryBelowData:=True
- ActiveSheet.Outline.ShowLevels RowLevels:=2
- Range("C1").Select
- Selection.End(xlDown).Select
- LastRow = ActiveCell.Row - 1
- Range("C1:F" & LastRow).Select
- Selection.SpecialCells(xlCellTypeVisible).Select
- Selection.Copy
- Sheets("作業用").Select
- Range("A1").Select
- Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
- :=False, Transpose:=False
- Range("A1").Select
- Sheets("出納帳").Select
- Range("A1").Select
- Application.CutCopyMode = False
- Selection.RemoveSubtotal
- End Sub
§2.5. マクロ名「aa出納帳集計」
今日 作成したマクロを、連続して動かすマクロを作成する。
-
- 先頭の“aa”は、[マクロの表示]ボタンをクリックした時の表示の順番の問題で、他意はない。
1)操作
- [マクロの記録]を開始し、
- マクロ名を入力し、[OK]する。
- マクロの記録を終了する。
2)得られたマクロ
コメント行のみで、中身は無い。
- Sub aa出納帳編集()
- End Sub
3)補完後マクロ
- Sub aa出納帳編集()
- Call 集計シートのクリア
- Call 作業用シートのクリア
- Call 出納帳を名前で並べ替える
- Call 出納帳を集計する
- End Sub