電子書籍の厳選無料作品が豊富!

表題通り、Excelシートの自動コピーをマクロを使って行いたいのですが、
マクロやVBAの知識が全くないため、どなたかコードを教えていただけないでしょうか。

まず今現在、B1セルに9月1日と日付を入れ、シート名を1日としたものがあります。
これを自動で複製して、B1セルの日付を9月2日 9月3日…
シート名を2日 3日…となるように、日毎ごとの一ヶ月分のシートを作り
ひとつのbookにしたいと考えております。
また、その際に、B1セルとシート名の日付が日曜・祭日に当たる場合、
シート名に色を付けたいと思っています。

(因みにB1セルの日付はシリアル値で入れていて、
書式で○月○日となるように表示していて、日付が日曜・祭日に当たる場合は
赤文字になるよう、別シートに祝日リストも作って
条件付き書式で設定してあります。)

Excelの関数は使えても、マクロは全く分からないので
どうかよろしくお願い致します。

A 回答 (4件)

No.3 です。

連続での投稿すみませんが、書き忘れたことを補足させていただきます。

No.3 の帳票の日付を例えば「9/7」と指定すると、記録側で「メモ」の列が空白になっているので、そのままでは帳票側に「0」が表示されます。

これを表示したくないという場合は、F8 セルの書式を設定すれば、ゼロになるときだけ非表示にできます。具体的には、セルを右クリックするなどして「セルの書式設定 > 表示形式タブ > ユーザー定義 > 種類ボックス」に、「[=0]"";G/標準」などを記入します。
    • good
    • 0

コピーしたり色塗ったりということは、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,),)


それと次回からは、業務委託ではなく、ぜひ始めから「質問を」してください。お待ちしています。
「Excelシートの自動コピーでマクロを使」の回答画像3
    • good
    • 0

>・1日シートのB1に年/月/1の日付が記入してある


>これは書式の設定で、m月d日(aaa)と表示するようにしてあるのですが
>年/月/1と表示させていないため、うまくマクロが動いてくれないのでしょうか?

書式は関係ありません。勿論条件付き書式も無関係です。




>B1セルの日付が飛び飛びに
>こちらは日曜・祭日の色付けがおかしくなってしまいました。

補足された全てのご説明は、肝心の1日シートのB1セルの「具体的な中身」が「シリアル値で記入されていない」など、何かご説明とは異なる状況であることを示唆しています。



再掲:
>1日シートのB1に年/月/1の日付が記入してある

繰り返しますが書式は無関係で、まず次の通りに「記入」してから、マクロを実行してください。


1日シートのB1セルの今の内容を消去し、あなたのご説明の通りに
2013/9/1
と生日付を手で記入、セルの書式設定の表示形式は
m月d日(aaa)
としてもう一回マクロを実行します。
「Excelシートの自動コピーでマクロを使」の回答画像2
    • good
    • 0

準備


・元になる「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セルの日付はシリアル値で入れていて、
書式で○月○日となるように表示していて、日付が日曜に当たる場合は
赤文字になるよう、条件付書式でWEEKDAY関数を入れ
祝日の場合は、「祝日リスト」シートを作り
条件付き書式でMATCH関数で設定してあります。

補足日時:2013/09/08 01:58
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
早速使わせていただいたのですが、
B1セルの日付が飛び飛びになってしまい、
シート名30日のB1セル日付が、2014年12月10日になってしまいました。

シート名の方は2日 3日…と、きちんとキレイに複製できているのですが
こちらは日曜・祭日の色付けがおかしくなってしまいました。


準備として

・元になる「1日」シートを用意してある(全角半角の間違いも無いこと)
これはOKなのですが

・1日シートのB1に年/月/1の日付が記入してある
これは書式の設定で、m月d日(aaa)と表示するようにしてあるのですが
年/月/1と表示させていないため、うまくマクロが動いてくれないのでしょうか?

お礼日時:2013/09/08 01:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!