実践!Excelマクロ ~シートのコピー +α をマクロ化する事で作業が快適に!~

実践!Excelマクロ

現金出納帳を事例にして「実践!Excelマクロ」をアップします!
今回はシートのコピーを題材にして実際のマクロを作成してみましょう。

現金出納帳のようなExcelシートでは、月を変えて新しいシートを作成する際にシートをコピーして利用する事が多いと思います。
その場合、シートのコピーだけでは無くシート名を変えたり、入力された文字をクリアしたり、繰越残高を入力したりとその他にも面倒な処理が付きまといます。

この一連の処理をマクロを使ってボタン一発で実行出来るようにしましょう。

シートのコピーと月の繰り越しをマクロ化する

シートコピー用の[繰り越し]ボタンを配置してマクロを作成しましょう。動作イメージは以下の通りです。

シートのコピー処理をマクロ化

今回作成するマクロの処理ステップは以下の通りです。

  1. 当月の最終残高を新規シートの繰越残高欄にセットする
  2. [出納帳]シートをコピーする
  3. コピーしたシート名を翌月(yyyy年m月)に変更する
  4. コピーしたシートの文字をクリアする

VBAコード

ボタンに設定するVBAコードは以下の通りです。

Sub SheetCopy()
    Dim wLastGyou As Long
    Dim wSheetName As Variant
    Dim i As Variant
    Dim wMaxDay As Variant
    Dim wNewSheetName As Variant
    Dim wKurikoshi As Long

    'アクティブなシート名を取得
    wSheetName = ActiveSheet.Name

    '最終行番号を取得
    wLastGyou = Worksheets(wSheetName).UsedRange.Rows.Count

    '繰り越し金額を取得
    wKurikoshi = Range("F" & wLastGyou).Value

    '最後の日付を取得(並び替えしていない場合も想定)
    For Each i In Range("A5:A" & wLastGyou - 1)
        If wMaxDay < i Then wMaxDay = i
    Next

    '取得した最終日から年月を抽出
    If IsDate(wMaxDay) Then
        wNewSheetName = DatePart("yyyy", wMaxDay) & "年" _
                & DatePart("m", wMaxDay) + 1 & "月"
    Else
        MsgBox "日付が入力されていないので処理を終了します", _
                vbOKOnly + vbExclamation, "エラー"
        Exit Sub
    End If

    '[出納帳]シートをコピーする
    Sheets(wSheetName).Copy After:=Sheets(wSheetName)

    'コピーしたシート名を変更する
    ActiveSheet.Name = wNewSheetName

    '繰越残高を新しいシートに引き継ぐ
    Range("F4").Value = wKurikoshi

    'コピーされたA5からE列最終行までの文字をクリアする
    Range("A5:E" & wLastGyou - 1).ClearContents

End Sub

VBAコードの解説

それぞれの処理ステップ毎にVBAコードを解説していきます。(解説とは言えない簡単な説明で恐縮すが・・・)

  1. 当月の最終残高を新規シートの繰越残高欄にセットする
    16行目のRangeプロパティValueプロパティを使用して最終残高を変数wKurikoshiにセットしています。
    更に、40行目でコピーした新規シートの繰越残高欄に値をセットしています。
  2. [出納帳]シートをコピーする
    34行目でCopyメソッドを使いワークシートのコピーを実行しています。
  3. 最終日付を取得してコピーしたシート名を翌月(yyyy年m月)に変更する
    19行目から21行目で日付列に入力された最終日(最大の日付)を取得しています。
    今回はFor~Nextステートメントを使用して、日付(A列)を繰り返し読み込んで最終日付を取得しています。

    最終日付を取得した後、24行目から31行目でDatePart関数を使って年月+1月を抽出してシート名とします。また、IsDate関数を使って日付が入力されていない場合はメッセージを表示して処理を中断しています。

    37行目でアクティブシートのNameプロパティを使ってシート名を先ほどのシート名(yyyy年m月)に変更しています。

  4. コピーしたシートの文字をクリアする
    43行目でRangeオブジェクトClearContentsメソッドを使ってコピーしたシートを初期化しています。

以上、今回は「実践!Excelマクロ」シートのコピーとそれに伴う処理に関するマクロの説明でした。

関連エントリー

実践!Excelマクロ ~シートのコピー +α をマクロ化する事で作業が快適に!~” に対して2件のコメントがあります。

  1. you come in reality a great webmaster. The internet site loading rate is amazing. It seems you are doing just about any unique trick. Furthermore, The items are masterwork. you have inked a wonderful activity with this matter!

  2. reverse proxy より:

    Wow that was odd. I just wrote an extremely long comment but after I clicked submit my comment didn’t appear. Grrrr… well I’m not writing all that over again. Anyway, just wanted to say excellent blog!

コメントは受け付けていません。