[[20200421114945]] 『【VBA】新しいシートに条件付き書式の引継ぎとシ=x(まめしば) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『【VBA】新しいシートに条件付き書式の引継ぎとシートの追加』(まめしば)

このWEBサイトにあるサンプルコードを元に、
12か月分の予定表シートを作成します。
https://lilia-study.com/excel/vba-sample/schedule.html

上記コードに、以下の機能も追加したいです。
(1)Sheet1に条件付き書式で土日・祝日(別シート有)の行に
色がかかるように設定している。
上記のコードだと新しいブックに条件付き書式は引き継がれないので、
条件付き書式もコピーしたい。
(2)(1)に関わるので、sheet1とは別にある祝日シートもコピーしたい。

自分でも試行錯誤してみたのですが、上手くいきません。
どのようにコードを変更したら良いか教えてもらえると助かります。
よろしくお願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


条件付き書式部分は解決しましたので、
どなたか祝日シートのコピーの仕方を教えて頂けますでしょうか。
(まめしば) 2020/04/21(火) 15:28

こんなのでいいんじゃないですか? 

acWB.Sheets("祝日").Copy newWB

※でも本当に条件付き書式の方は旨く行ったんですか、

(半平太) 2020/04/21(火) 16:04


ご返信ありがとうございますm(_ _)m

acWB.Sheets("祝日").Copy newWB
はどの辺に挿入すればよいでしょうか?

−−−−−−−−−−−−−−−−−−−−−−−−−−

 acWB.Sheets("祝日").Copy newWB

  ' 12回繰り返す

    For i = 1 To 12

        If i > 1 Then

−−−−−−−−−−−−−−−−−−−−−−−−−−

このように挿入してみて実行したのですが、新しいブックに祝日シートはないです。
挿入する場所が悪いのでしょうか?

また条件付き書式もおっしゃる通りやっぱり駄目でした。
土日の条件付き書式のみでマクロを実行させるとちゃんと動作するのですが、
祝日の条件付き書式をそこに加えると、土日も含め、新しいブックの条件付き書式は
受け継がれません。

(まめしば) 2020/04/22(水) 11:00


自分が実行しているコードは以下の通りです。

Sub newSchedule()
On Error Resume Next

    ' 変数の宣言

    Dim acWB As Workbook    ' このブック用

    Dim newWB As Workbook    ' 新しいブック用

    Dim acWS As Worksheet    ' このブックのSheet1用

    Dim newWS As Worksheet    ' 新しいブックの新しいシート用

    Dim cntWS As Integer    ' 新しいブックのシート数用

    Dim i As Byte            ' 繰り返し用

    Dim y As Integer        ' 年用

    Dim m As Byte            ' 月用

    Dim FileNameY As Integer    ' ファイル名の年用

    Dim scheDate As Date    ' 日付用

    Dim dirName As String    ' フォルダ名用

    ' このブックを変数にセット

    Set acWB = ThisWorkbook

    ' Sheet1を変数にセット

    Set acWS = acWB.Sheets("Sheet1")

    ' Sheet1を新しいブックにコピー

    acWS.Copy

    ' 新しいブックを変数にセット

    Set newWB = ActiveWorkbook

    ' コピーしたシートを変数にセット

    Set newWS = newWB.ActiveSheet

    ' Sheet1の年と月でその月の1日の日付を取得

    scheDate = DateSerial(acWS.Range("P4").Value, acWS.Range("P5").Value, 1)

    acWB.Sheets("祝日").Copy newWB '★ここに祝日コピーのシートを挿入しました

    ' 12回繰り返す

    For i = 1 To 12

        If i > 1 Then

            ' 新しいブックのシート数を数える

            cntWS = newWB.Sheets.Count

            ' 元のブックのSheet1を新しいブックの最後尾にコピーする

            acWS.Copy After:=newWB.Sheets(cntWS)

            ' コピーしたシートを変数にセット

            Set newWS = newWB.ActiveSheet

        End If

        ' 日付から年と月を取得

        y = Year(scheDate)

        m = Month(scheDate)

        ' ファイル名用の年を変数に入れる

        If FileNameY = 0 Then

            FileNameY = y

        End If

        ' コピーしたシートのC1に年、D1に月を入力

        newWS.Range("P4").Value = y

        newWS.Range("P5").Value = m

        ' コピーしたシート名を「年月」に変える

        newWS.Name = y & "年" & m & "月" 

        ' 日付を1ヶ月後にする

        scheDate = DateSerial(y, m + 1, 1)

    Next

    ' 新しいブックの最初のシートをアクティブにする

    newWB.Sheets(1).Activate

    ' このブックのフォルダを取得

    dirName = acWB.Path 

    ' 新しいブックを名前を付けて保存

    newWB.SaveAs dirName & "\" & FileNameY & "年予定表.xlsx"

End Sub

(まめしば) 2020/04/22(水) 11:04


 >  acWB.Sheets("祝日").Copy newWB '★ここに祝日コピーのシートを挿入しました
 >このように挿入してみて実行したのですが、新しいブックに祝日シートはないです。

 本当ですね。済みません。これに換えてください。 m(__)m
              ↓
     acWB.Sheets("祝日").Copy Before:=newWB.Sheets(1) 

 >また条件付き書式もおっしゃる通りやっぱり駄目でした。

 バージョンが新しいエクセルで、他シートを参照している入力規則が、
 シートのコピーから新ブックを作ると入力規則が消えると言うトラブルが、
 最近、発覚ました。

 この条件付き書式も同じ現象だなぁと思っていたところです。
 仕様の変更なのか、単なるバグなのか分かりません。

 あとで、マイクロソフトがこっそり直して呉れるかも知れませんが、
 当分の間、新しい条件付き書式を設定するマクロを書き足すぐらいかな、と思っています。

(半平太) 2020/04/22(水) 13:54


再度ご返信ありがとうございます!
記載してあるコードできちんと追加されておりました(*^^*)感謝です!

> バージョンが新しいエクセルで、他シートを参照している入力規則が、

 シートのコピーから新ブックを作ると入力規則が消えると言うトラブルが、
 最近、発覚ました。

な・・・なんと・・・だから駄目だったのですね。
その情報を知れただけでも良かったです。
条件付き書式設定のマクロを頑張ってチャレンジしてみます。

ご丁寧に本当にありがとうございましたm(_ _)m
(まめしば) 2020/04/22(水) 15:59


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.