2017年06月10日

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

昨日は、フォーマットシートをコピーして名称を変えるところまでやりました。

sub タイトル()
    dim 最終行 as long, 処理行 as long
    dim 日付 as date
    最終行=cells(rows.count,2).end(xlup).row
    for 処理行=3 to 最終行
        'ここに順繰り回してどうすのかという指示文を入力します
        日付=cells(処理行,2).value
        'フォーマットシートのコピー
        worksheets("フォーマット").copy after:=worksheets("フォーマット")
        activesheet.name = year(日付) & "年" & month(日付) & "月"
    Next 処理行
end sub


それでは、予告通り「すでに該当月のシートが存在する場合は、シート作成をしない」という条件を加えていきます。

すでに該当月のシートが存在する場合の確認方法は、ファイル内に存在するシート名を1つずつ、
変更後のシート名と同じものがないか確認していきます。

for each シート in thisbook.worksheets
next シート

の構文で、シートを1つずつ見ていくことができます。

もし、同じシート名があれば、フラグを立てておき、後でシートを作成する日付か否かを判断させます。
(あらかじめ、フラグをfalseに設定しておく必要があります)

flag=false
if シート.name = year(日付) & "年" & month(日付) & "月" then
    flag=true
end if

この2つを合わせると、

for each シート in thisbook.worksheets
    flag=false
    if シート.name = year(日付) & "年" & month(日付) & "月" then
        flag=true
        exit for
    end if
next シート
'もし、フラグが立っていたら、シートを作成する


フラグを立てた後は、残っているシートを見続ける意味がないので、
for~Nextの繰り返し処理を抜けましょう。
データ量が多いときは、処理スピードが上がります。

今回、追加で作った箱があるので、宣言もしておきましょう。

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


さて、明日はいよいよ、入力データを該当月のシートに移動させます。



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

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


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

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