2017年06月12日

【Excel】オリジナルの家計簿作り⑨

昨日はいろいろありまして更新できませんでした…
が、気を取り直して、一昨日の続きから。

sub タイトル()
    dim 最終行 as long, 処理行 as long
    dim 日付 as date
    dim シート as worksheet
    Dim flag As Boolean
    最終行=cells(rows.count,2).end(xlup).row
    for 処理行=3 to 最終行
        'ここに順繰り回してどうすのかという指示文を入力します
        日付=cells(処理行,2).value
        '日付に合致する月のシートがあるか確認する
        for each シート in thisbook.worksheets
            flag=false
            if シート.name = year(日付) & "年" & month(日付) & "月" then
                flag=true
                exit for
            end if
        next シート
        'もし、フラグが立っていたら、シートを作成する
        'フォーマットシートのコピー
        worksheets("フォーマット").copy after:=worksheets("フォーマット")
        activesheet.name = year(日付) & "年" & month(日付) & "月"
    Next 処理行
end sub


さて、先述のところまで前回やったのですが、いちいち
year(日付) & "年" & month(日付) & "月"
を書くのが面倒なので、変数に突っ込んじゃいましょう。

sub タイトル()
    dim 最終行 as long, 処理行 as long
    dim 日付 as date
    dim シート as worksheet
    dim flag as boolean
    dim シート名 as string
    最終行=cells(rows.count,2).end(xlup).row
    for 処理行=3 to 最終行
        'ここに順繰り回してどうすのかという指示文を入力します
        日付=cells(処理行,2).value
        シート名 = year(日付) & "年" & month(日付) & "月"
        '日付に合致する月のシートがあるか確認する
        for each シート in thisbook.worksheets
            flag=false
            if シート.name = シート名 then
                flag=true
                exit for
            end if
        next シート
        'もし、フラグが立っていたら、シートを作成する
        'フォーマットシートのコピー
        worksheets("フォーマット").copy after:=worksheets("フォーマット")
        activesheet.name = シート名
    Next 処理行
end sub


ということにしましょう。
※stringとは、文字列のことです。

なので、取得したリストの移動先は、"シート名"ということになります。
フォーマットと入力画面の列配置が同じであれば、そのまま転記させてしまいましょう。

dim 列 as long
for 列 = 2 to 5
next 列

これで、2列目から5列目までの(B列~E列)転記準備が整いました。
2 to 5 のところは、ご自身で作成したいフォーマットの列に合わせて変更してくださいね。

"シート名"のどの行に転記するかというと、最終行でなくてはならないので、

dim 転記先 as long
転記先 = worksheets(シート名).cells(rows.count,2).end(xlup).row + 1

とします。
※「+1」は、その前までの式で空欄ではない最終行を意味していますので、「+1」をして、直下の空欄を指定できるようにしてあります。

これらと、実際に転記する式を組み合わせて、

dim 列 as long, 転記先 as long
for 列 = 2 to 5
    転記先 = worksheets(シート名).cells(rows.count,2).end(xlup).row + 1
    worksheets(シート名).cells(転記先,列)=cells(処理行,列)
next 列


これで、該当月のシートに転記ができました。
あとは、日付を昇順に並び替えたいな~
ということで、明日はおまけで並び替えもやっちゃいましょー!

ちなみに、これですべての工程が終わりますので、明日はまとめまでできるといいなぁ…


にほんブログ村さんのランキングへ参加はじめました。
よろしければ、クリックで応援お願いします☆

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村




ラベル:VBA 家計簿
posted by くま母 at 21:41| Comment(0) | ExcelVBA | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。