- 締切済み
Excelシートの自動コピーでマクロを使いたい
表題通り、Excelシートの自動コピーをマクロを使って行いたいのですが、 マクロやVBAの知識が全くないため、どなたかコードを教えていただけないでしょうか。 まず今現在、B1セルに9月1日と日付を入れ、シート名を1日としたものがあります。 これを自動で複製して、B1セルの日付を9月2日 9月3日… シート名を2日 3日…となるように、日毎ごとの一ヶ月分のシートを作り ひとつのbookにしたいと考えております。 また、その際に、B1セルとシート名の日付が日曜・祭日に当たる場合、 シート名に色を付けたいと思っています。 (因みにB1セルの日付はシリアル値で入れていて、 書式で○月○日となるように表示していて、日付が日曜・祭日に当たる場合は 赤文字になるよう、別シートに祝日リストも作って 条件付き書式で設定してあります。) Excelの関数は使えても、マクロは全く分からないので どうかよろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.3 です。連続での投稿すみませんが、書き忘れたことを補足させていただきます。 No.3 の帳票の日付を例えば「9/7」と指定すると、記録側で「メモ」の列が空白になっているので、そのままでは帳票側に「0」が表示されます。 これを表示したくないという場合は、F8 セルの書式を設定すれば、ゼロになるときだけ非表示にできます。具体的には、セルを右クリックするなどして「セルの書式設定 > 表示形式タブ > ユーザー定義 > 種類ボックス」に、「[=0]"";G/標準」などを記入します。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
コピーしたり色塗ったりということは、No.1 さんが教えてくださっているとおり、至って簡単にできます。ベストアンサーは辞退します。 ですがその前に是非、1 か月 30 日分のシートを用意するというシステムが本当に最善なのか、見直してみてください。 例えば日誌だとか売上伝票だとか、何らかの毎日の記録を残すのが目的であれば、1 日 1 行ずつ記入していく「記録」シート 1 枚と、このシートから日付あるいは何らかのコードを指定することで特定の行の情報を写し取り、PDF や紙媒体に印刷する「帳票」シート 1 枚、合計でたったの 2 枚だけ用意すれば、事足りてしまったりしませんか? 添付図の例では、次式を記入しています。 F6 =vlookup($G$3,記録!$A$2:$D$4,2,) G6 =vlookup($G$3,記録!$A$2:$D$4,3,) F8 =vlookup($G$3,記録!$A$2:$D$4,4,) あるいは、F6 の数式中の「2」という部分は、次のとおり関数で上書きしてもいいです。この場合、F6 セルをコピーし、G6、F8 にそれぞれ貼り付け。 F6 =vlookup($G$3,記録!$A$2:$D$4,match(f5,記録!$A$1:$D$1,),) それと次回からは、業務委託ではなく、ぜひ始めから「質問を」してください。お待ちしています。
- keithin
- ベストアンサー率66% (5278/7941)
>・1日シートのB1に年/月/1の日付が記入してある >これは書式の設定で、m月d日(aaa)と表示するようにしてあるのですが >年/月/1と表示させていないため、うまくマクロが動いてくれないのでしょうか? 書式は関係ありません。勿論条件付き書式も無関係です。 >B1セルの日付が飛び飛びに >こちらは日曜・祭日の色付けがおかしくなってしまいました。 補足された全てのご説明は、肝心の1日シートのB1セルの「具体的な中身」が「シリアル値で記入されていない」など、何かご説明とは異なる状況であることを示唆しています。 再掲: >1日シートのB1に年/月/1の日付が記入してある 繰り返しますが書式は無関係で、まず次の通りに「記入」してから、マクロを実行してください。 1日シートのB1セルの今の内容を消去し、あなたのご説明の通りに 2013/9/1 と生日付を手で記入、セルの書式設定の表示形式は m月d日(aaa) としてもう一回マクロを実行します。
- keithin
- ベストアンサー率66% (5278/7941)
準備 ・元になる「1日」シートを用意してある(全角半角の間違いも無いこと) ・1日シートのB1に年/月/1の日付が記入してある ・「別シート」シートのA列に祝日一覧が年/月/日で記入してある 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1() dim i as integer dim e as integer dim m as integer ’前掃除 on error resume next application.displayalerts = false for i = 2 to 31 worksheets(i & "日").delete next i application.dispayalerts = true on error goto 0 ’準備 e = day(dateadd("m", 1, worksheets("1日").range("B1")) - 1) worksheets("1日").select ’作業 1日シートタブの色付けも忘れず行う for i = 1 to e if i <> 1 then worksheets("1日").copy after:=worksheets(worksheets.count) range("B1") = range("B1") + i - 1 activesheet.name = i & "日" if weekday(range("B1")) = 1 _ or application.countif(worksheets("別シート").range("A:A"), range("B1").value) > 0 then activesheet.tab.color = vbred else activesheet.tab.color = false end if next i end sub ファイルメニューから終了してエクセルに戻る ALT+F8を押してマクロを実行する。
お礼
回答ありがとうございます。 早速使わせていただいたのですが、 B1セルの日付が飛び飛びになってしまい、 シート名30日のB1セル日付が、2014年12月10日になってしまいました。 シート名の方は2日 3日…と、きちんとキレイに複製できているのですが こちらは日曜・祭日の色付けがおかしくなってしまいました。 準備として ・元になる「1日」シートを用意してある(全角半角の間違いも無いこと) これはOKなのですが ・1日シートのB1に年/月/1の日付が記入してある これは書式の設定で、m月d日(aaa)と表示するようにしてあるのですが 年/月/1と表示させていないため、うまくマクロが動いてくれないのでしょうか?
補足
括弧内の説明が、少し不足していたので補足しておきます。 B1セルの日付はシリアル値で入れていて、 書式で○月○日となるように表示していて、日付が日曜に当たる場合は 赤文字になるよう、条件付書式でWEEKDAY関数を入れ 祝日の場合は、「祝日リスト」シートを作り 条件付き書式でMATCH関数で設定してあります。