• 締切済み

Excelシートの自動コピーでマクロを使いたい

表題通り、Excelシートの自動コピーをマクロを使って行いたいのですが、 マクロやVBAの知識が全くないため、どなたかコードを教えていただけないでしょうか。 まず今現在、B1セルに9月1日と日付を入れ、シート名を1日としたものがあります。 これを自動で複製して、B1セルの日付を9月2日 9月3日… シート名を2日 3日…となるように、日毎ごとの一ヶ月分のシートを作り ひとつのbookにしたいと考えております。 また、その際に、B1セルとシート名の日付が日曜・祭日に当たる場合、 シート名に色を付けたいと思っています。 (因みにB1セルの日付はシリアル値で入れていて、 書式で○月○日となるように表示していて、日付が日曜・祭日に当たる場合は 赤文字になるよう、別シートに祝日リストも作って 条件付き書式で設定してあります。) Excelの関数は使えても、マクロは全く分からないので どうかよろしくお願い致します。

みんなの回答

回答No.4

No.3 です。連続での投稿すみませんが、書き忘れたことを補足させていただきます。 No.3 の帳票の日付を例えば「9/7」と指定すると、記録側で「メモ」の列が空白になっているので、そのままでは帳票側に「0」が表示されます。 これを表示したくないという場合は、F8 セルの書式を設定すれば、ゼロになるときだけ非表示にできます。具体的には、セルを右クリックするなどして「セルの書式設定 > 表示形式タブ > ユーザー定義 > 種類ボックス」に、「[=0]"";G/標準」などを記入します。

回答No.3

コピーしたり色塗ったりということは、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/7940)
回答No.2

>・1日シートのB1に年/月/1の日付が記入してある >これは書式の設定で、m月d日(aaa)と表示するようにしてあるのですが >年/月/1と表示させていないため、うまくマクロが動いてくれないのでしょうか? 書式は関係ありません。勿論条件付き書式も無関係です。 >B1セルの日付が飛び飛びに >こちらは日曜・祭日の色付けがおかしくなってしまいました。 補足された全てのご説明は、肝心の1日シートのB1セルの「具体的な中身」が「シリアル値で記入されていない」など、何かご説明とは異なる状況であることを示唆しています。 再掲: >1日シートのB1に年/月/1の日付が記入してある 繰り返しますが書式は無関係で、まず次の通りに「記入」してから、マクロを実行してください。 1日シートのB1セルの今の内容を消去し、あなたのご説明の通りに 2013/9/1 と生日付を手で記入、セルの書式設定の表示形式は m月d日(aaa) としてもう一回マクロを実行します。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

準備 ・元になる「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を押してマクロを実行する。

an1122
質問者

お礼

回答ありがとうございます。 早速使わせていただいたのですが、 B1セルの日付が飛び飛びになってしまい、 シート名30日のB1セル日付が、2014年12月10日になってしまいました。 シート名の方は2日 3日…と、きちんとキレイに複製できているのですが こちらは日曜・祭日の色付けがおかしくなってしまいました。 準備として ・元になる「1日」シートを用意してある(全角半角の間違いも無いこと) これはOKなのですが ・1日シートのB1に年/月/1の日付が記入してある これは書式の設定で、m月d日(aaa)と表示するようにしてあるのですが 年/月/1と表示させていないため、うまくマクロが動いてくれないのでしょうか?

an1122
質問者

補足

括弧内の説明が、少し不足していたので補足しておきます。 B1セルの日付はシリアル値で入れていて、 書式で○月○日となるように表示していて、日付が日曜に当たる場合は 赤文字になるよう、条件付書式でWEEKDAY関数を入れ 祝日の場合は、「祝日リスト」シートを作り 条件付き書式でMATCH関数で設定してあります。

関連するQ&A

  • エクセル2003 マクロ シート名

    エクセル2003です。 1つのブックにシートが10シート有ります。 R2のセルに日付を入れると それぞれのシート名が日付 (例)"11月25日"になるようなマクロを作りたいのですが、 教えてください。 又は逆にシート名に"11月25日"とすると R2セルが"11月25日"となるマクロを教えてください。 日付はシート毎に違います。 すみませんがよろしくおねがいします。

  • 自動でのカレンダー作成について

    エクセルで、シートごとに月別のスケジュール表を作りたいです。 例えば、4月シート 横軸に会議名を記入し、それぞれ当てはまる日付に時間を入れます。 (セルA2/1日)(セルB2/日曜) (セルA3/2日)(セルB3/月曜)とし、土日祝日に塗りつぶしで色を入れる このような表で、月をセルA1に入れた場合、 自動で日付の右セルに曜日を入れること、土日祝日に塗り潰しの色を入れるには、どのようにしたらいいでしょうか? 質問の内容がわかりにくかったら申し訳ありませんが、よろしくお願いします。

  • Excelマクロで任意の項目の数値を自動コピー

    【要望】 Excelのマクロを使用して、任意の項目の数値を、任意のセルへ自動的にコピーしたいです。 さらに、マクロを実行した日付を判別して、データの抽出するセルを自動的に変えるようにしたいです。 【具体例】 マクロを組むことで、Sheet1の「*」の部分にSheet2の数字を参照して、自動的にコピーをするようにしたいのです。 さらに、実際に1月1日の日時にマクロの実行を行えば「1月1日」のデータをコピーし、 次の日、1月2日にマクロの実行を行えば「1月2日」のデータをコピーするようにしたいのです。 ////////////////////////// <Sheet1>         1月1日 1月2日   A社実績    *     *   B社実績    *     * <Sheet2>         1月1日 1月2日   B社       目標    1     1     実績    1     1   A社     目標     1     1     実績     1      1 ////////////////////////// 【問題点】 (1)Sheet2はSheet1とフォーマットが違うため、単純なセル番地の参照では、思い通りに行かない。 (2)マクロを実行する日時によって、異なる作業を行うマクロにしたいが、思い通りに行かない。 【ヒント】 教えて頂く側の立場がヒントを出すなんて大変恐縮ですが、TODAY関数をうまく利用すればできるのでしょうか...?? 以上です。 よろしくお願いします。

  • エクセルで日付を自動入力したい…

    エクセル2003にて自動で日付、曜日が入力できる方法を教えください。 現在、日曜、祭日除く27(←MAX営業日数分)の日報の台紙シートを、12ファイル(12ヶ月分)作っています。 (1)A1のセルに日付   例;平成19年9月10日 (2)A2のセルに曜日   例;(月) (3)シート名に     例;10月 ←日付+曜日をこの形式。次は11火        という形式で日々入力しています。 シート一枚ずつに上記の作業をしています。         マクロや数式の設定等で手順を簡略化できませんでしょうか??? 毎日の作業なので効率化したく色々勉強したつもりですが改善できずに困っています。 わかる方教えて下さい。よろしくお願いします。

  • エクセルでシート名をセル参照するマクロ

    いつもお世話になっております。 ワークシートをコピーする際、 B1セルの値を複製したシート名にするマクロを と思ってやってみましたが、 Sub Macro1() ' ' Macro1 Macro Sheets("0000").Select Application.CutCopyMode = False Sheets("0000").Copy Before:=Sheets(3) Range("B1").Select Selection.Copy Sheets("0000 (2)").Select Sheets("0000 (2)").Name = "0524" Range("B1").Select End Sub 5行目でB1セルをコピーしましたが、 シート名として命名されたのは、 "0524"という固定の値でした。 (そのときのB1セルの値です) このB1セルは日付データなのですが、 マクロを実行する日によって、 翌日だったり、3日後だったりします。 (営業日ベースなので) どのようにしたら、B1セルの値を シート名に使用できるでしょうか よろしくお願いいたします。

  • エクセル(マクロ)で累計部分を更新しながらシートを

    日報作成をマクロで自動化する方法を探しています。 とりあえずできたのは、 1:「1日」シートを作り、セルA1には日付「2015年9月1日」を入力。 2:「1日」シートをコピーして「2日」シートを作成し、セルA1の日付を「2015年9月2日」に変更。 3:2の作業を「31日」シートまで繰り返す。 というところまでです。 (1つのワークブックに、「1日」~「31日」までのシートがある状態です。) これに加えて、たとえば、セルB1に当日売上を入力すると、 セルB2に月累計が出るようにしたいのです。 試してみたのは、「1日」シートのセルB2に「=B1」と入力し、 「2日」~「31日」シートのB2に =INDIRECT(TEXT(A1-1,"1日")&"!B2")+B1 と入力してみましたが、これだと月累計ではなく「1日」シートのみとの合計になってしまい、 「3日」~「31日」シートでは、数式内のシート名"1日"の部分を 手動で更新していかなければなりません。 数式内のシート名を翌日の日付に変更しながらシートをコピーする方法はありますか? または、 B2=前日シートのB2+当日シートのB1 となる数式は無いでしょうか?? ちなみに今マクロで使っているのは下記のコードです。 ——————————— Sub 日報作成() Dim firstDay As Date firstDay = InputBox("日報", "最初の日付を指定", Date) '最初のシートの日付を指定 Worksheets("1日").Range("A1") = firstDay Dim i As Integer For i = 1 To 30 Worksheets("1日").Copy after:=Worksheets(Worksheets.Count) '1日のコピーを末尾に作る Worksheets(Worksheets.Count).Name = i + 1 & "日" 'コピーしたシートの名前を変える Range("A1").Value = DateAdd("d", i, firstDay) '日付を一日ずつ足していく Next i End Sub ――――――――――― 似たようなデータを毎月大量に作るので、どうにか効率化できたらと思っています。 ちなみに、わたしはプログラミングCを少しかじったことがありますが、 マクロを使うのは初で、上記もネットで見つけたコードを少しいじった程度です、、 詳しい方がいらしたら教えてください。 よろしくお願いいたします。

  • エクセルのセルの値をシート名にするマクロ

    エクセルで、例えばB2セルに入力された数字を使って自動でシート名にしたいのですが、(=そのセルの値が変更されたときに 自動的に シート名が変更されるマクロ )どうやったらよいのか良くわかりません。また、重複するシート名があった場合にはアラートを表示させたいです。 例: 1.B2セルに10と入力する 2.もしシート名に重複が無ければ、シート名が自動的に「10月」になり、アクティブセルはB2に戻って復帰する。 3.重複がある場合は「シート名に重複があります」等のアラートを表示して終了する 多分 イベントとかいうものが絡んでくるのでしょうが、マクロは時々使うのですが、いつも記録したものを手直しする程度なので、標準モジュールの部分しか触った事がありません。 どなたか教えてください。お願いします。

  • 自動で任意の数字を入力する

    条件付き書式を使い、土曜・日曜・祝日に自動的にB列~N列までセルに色がつくように設定してあります。 (例:セルの色は省略) B行(日付) C行(曜日)・・E行・・・・・・・・N行   1         日       2         月        3         火        4         水        5         木     6         金   7         土   8         日   ・          ・   ・          ・   ・          ・   31         火 色がついたセル(土・日・祝)のE行に”0”を自動で入力したいと考えています。マクロを使えば可能なのでしょうか? よろしくお願いいたします。

  • [EXCELマクロ] シートタブに自動で色をつけるには?

    シートが、1日~31日まであり、シート内は31枚とも全て同じで、 例えば、セルA1 に、日付(平成19年7月18日と表示)があったとき、 その日付を参照して、土曜日なら青色、日曜日なら赤色、というふうに 自動で31枚全てのタブの色を変更してくれるようにしたいのですが、 可能でしょうか? また可能であれば、どのようにマクロを組めばいいでしょうか? Excel2003を使用しています。 よろしくお願い致します。

  • EXCELでマクロを初めて実行してみたんですがぁ・・・・

    初めてマクロというものをやってみました。 ただ、動作を記憶させただけです。プログラムは全然知りません。 sheet1の株価4本値と日付を1日だけ繰り上げる 単純な動きです。一番最後のセルにその日の 日付と4本値と入れて、マクロを実行させて、1日だけ繰り上げる 作業です。 それを、Sheet2が「=Sheet1!B2」このような形で参照するように してあるのですが、実行させると、 Sheet2B2のセルが#REF!とかなんとか表示されて B3からしか正しく表示されません。 以後同じことを繰り返すと、どんどん1つずつセルがエラーして 正しく表示されるセルが下がりながら、減っていってしまいます??? なぜなんでしょうか?? また回避策というか、正しい方法はありますでしょうか?? 何卒、初めてなので、わかりやすくお教えいただけると ありがたいです。 よろしくお願いを致します。

専門家に質問してみよう