• ベストアンサー

VBAでスケジュール表を作成しています

業務短縮化のために、VBAを使って社内のスケジュール管理ファイルを制作しています。 つくろうとしているのは、こんな感じです。 1、まず、罫線だけのマスター用紙があります。 2、別シートに設置した「スケジュール作成」ボタンをクリックすると、マスター用紙がコピーされ、新しいシートが作成されます。 この新しいシートの「A」列に、自動的にカレンダーが入力されます。 この2の部分をVBAで自動化したいと考えています。 すでにボタン押下→シートをコピーするところはできました。 カレンダーを作るには、月の最終日の日にちと曜日をとればいいのかな?とか予想はしているのですが。。。 手掛かりなどありましたらお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

関数でもできるので参考に A1=2007、B1=12 A2に=DATE($A$1,$B$1,1) A2に =IF(A2="","",IF(A2+1>DATE($A$1,$B$1+1,0),"",A2+1)) 以下32行目まで式を複写する。 これで1か月分の日付が出る。 ーー VBAでこの部分は(ついでに曜日も出した) Sub test01() y = Cells(1, "A") m = Cells(1, "B") For i = 2 To 32 Cells(i, "A") = DateSerial(y, m, i - 1) Cells(i, "B") = Format(DateSerial(y, m, i - 1), "aaa") If DateSerial(y, m, i - 1) = DateSerial(y, m + 1, 0) Then End Next i End Sub ーー 人により色々なコードの組み方がありそう。 上記での、ポイントは終了脱出条件のDateSerial(y, m + 1, 0) で月末日を出している0の部分です。

nepa-aiko
質問者

お礼

お二人の間をとって、 Sub Sheet_Copy() Worksheets("ワークシート").Copy After:=Worksheets("ワークシート") y = Cells(3, "C") m = Cells(3, "D") For i = 1 To 31 Cells(i + 7, "A") = DateSerial(y, m, i - 1) Cells(i + 7, "B") = Format(DateSerial(y, m, i - 1), "aaa") If DateSerial(y, m, i - 1) = DateSerial(y, m + 1, 0) Then End Next i End Sub というふうにしてみました。 (シート内の「3C」に作成したい予定表の年を入力、「3D」に月を入力します) すると一応指定したセル内に日付が収まるんですが・・。 例えば、2007年の11月を指定すると、1行目が10月31日になってしまいます。。。(水曜日?なのに) あと、スケジュール帳は部内で共有するため、 >(シート内の「3C」に作成したい予定表の年を入力、「3D」に月を入力します) ↑の部分をできれば「スケジュールの作成」ボタンとともに別ワークシートに設定したいと思います。(このワークシートは後ほど、管理者しか見られないように設定します) そこでy = Cells(3, "C","sheet1")と指定したら、コンパイルが通らずにエクセルから怒られてしまいました。。。(当たり前でしょうか)

nepa-aiko
質問者

補足

すみません。補足です。 日付の入力するのはA6からです。 あと、12月中に1月のカレンダー・・・というように、基本的に1ヵ月先のものを制作します。 教えていただいたものだと、「DateSerial」を使って作成日の日付をとって・・という感じでしょうか? 正解に近づけそうなのに悔しいのでがんばります!

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

このような質問は実際のシートが見えないので回答しにくいですが、できるだけ汎用的な方法で回答します。ヒント程度に考えてください。 マクロは以下でよいでしょう。カレンダの開始セルはA3としています。 Sub Macro1()  Worksheets("Master").Copy After:=Worksheets("Master")  ActiveSheet.Name = Format(Date, "YYYY") & "年" & Format(Date, "MM") & "月"  ActiveSheet.Range("A3").Value = Date - Day(Date) + 1 End Sub マスタシートのA4セルには  =IF(MONTH($A$3+ROW(Z1))=MONTH($A$3),$A$3+ROW(Z1),"") を貼り付けて、下方向に30行分コピーして、セルの書式を日付形式にします。 マクロを実行するとA3セルと同じ月の日付列が生成されるはずです。

nepa-aiko
質問者

お礼

お二人の間をとって、 Sub Sheet_Copy() Worksheets("ワークシート").Copy After:=Worksheets("ワークシート") y = Cells(3, "C") m = Cells(3, "D") For i = 1 To 31 Cells(i + 7, "A") = DateSerial(y, m, i - 1) Cells(i + 7, "B") = Format(DateSerial(y, m, i - 1), "aaa") If DateSerial(y, m, i - 1) = DateSerial(y, m + 1, 0) Then End Next i End Sub というふうにしてみました。 (シート内の「3C」に作成したい予定表の年を入力、「3D」に月を入力します) すると一応指定したセル内に日付が収まるんですが・・。 例えば、2007年の11月を指定すると、1行目が10月31日になってしまいます。。。(水曜日?なのに) あと、スケジュール帳は部内で共有するため、 >(シート内の「3C」に作成したい予定表の年を入力、「3D」に月を入力します) ↑の部分をできれば「スケジュールの作成」ボタンとともに別ワークシートに設定したいと思います。(このワークシートは後ほど、管理者しか見られないように設定します) そこでy = Cells(3, "C","sheet1")と指定したら、コンパイルが通らずにエクセルから怒られてしまいました。。。(当たり前でしょうか)

nepa-aiko
質問者

補足

すみません。補足です。 日付の入力するのはA6からです。 あと、12月中に1月のカレンダー・・・というように、基本的に1ヵ月先のものを制作します。 教えていただいたものだと、「Date」を使って作成日の日付をとって・・という感じでしょうか? 正解に近づけそうなのに悔しいのでがんばります!

関連するQ&A

  • エクセルVBAでスケジュール表作成・2

    http://oshiete1.goo.ne.jp/qa3608086.htmlの続きです。 エクセルVBAで、1ヵ月単位のスケジュール表を作成しています。 ここの方々のご協力で、 原紙をコピー→任意の年・月のカレンダーを自動入力 というところまではできました。 今度は、新しいシートの「C」列へ自動入力された曜日のうち、 「土」か「日」だったら行全体を16番の色で塗りつぶすという 処理をしたいと思います。 しかし、 For Each C In TargetRange If C.Formula.Value = "土" Or "日" Then ActiveRows.Font.ColorIndex = 16 Next oneCell だとエラーになってしまいます。(「Nextに対応するForがない」と言われます??) ヒントなどありましたらお願いいたします。

  • エクセルでスケジュール表作成

    いつもお世話になっています。 エクセル(オフィスXP使用)でスケジュール表を作成しています。 日付は一番初めのセルに日付を入力すると自動的に日数が入力されるよう計算式を(隣のセル+1)で作成しています。1Pに月曜始まりで2週間分の日数が入っています。曜日は固定なのでWEEKDAY関数は使っていません。(直接曜日を入力しています)土日は網掛けをしています。 以上のスケジュール表で、自動的に祝日を判別し、セルの色を変えたいのですが方法はありますか?出来れば祝日の曜日欄には自動的に祝日と入るようにしたいのですが・・・。条件付書式などを組み合わせてなんとか1ヶ所入力すると全て自動で行えるように出来ないでしょうか?どの関数を組み合わせればよいか、もしくは別の方法(シートを別に作成し、祝日だけを入力すると、スケジュールのシートが自動的に変わったり・・・)など、ありましたら教えていただけると助かります。 宜しくお願いします。

  • エクセルでのスケジュール表作成

    EXCELの機能の中に、カレンダー情報を利用して、スケジュール表を自動作成する機能があるらしいと聞いたのですが、ご存知の方教えてください。 具体的には、年月を指定すると横軸に1日から末日までの数字が並び、並行して曜日が並び、更に休日に赤色などでハッチングされる機能だと思います。今までは手作業でやっていたのですがカレンダーを見ながらいちいちハッチングなどしていました。うろ覚えで恐縮ですがよろしくお願いします。

  • エクセルで1ヶ月分のスケジュール表を作りたい

    月を入れると自動的に曜日が変更になり、 土曜と日曜に色を付けたいのです。 A1 2007/3/1 と入力すると見た目の表示は 2007年3月 A2 3月と表示され、 A3~33 日にちの1~31と表示    (セルをクリックしても何も入力されてません) B3~33 曜日を自動的に入れる。(土)と(日)赤色に。    (セルをクリックしても何も入力されてません)     人からもらったスケジュール表を真似しようと コピーして作ったのですが、コピー先に関数が反映されません。 シートの保護というのに元データはチェックされてます。 わかりづらいかもしれませんがよろしくお願い致します。 上記の方法でなくても、日にち、曜日と色が自動的に入力される 方法がありましたら教えてください。 よろしくお願い致します。

  • エクセルVBAでのスケジュール作成

    いつも大変お世話になっております。 本日も質問させてください。 会社指定の異なる2つのブックのエクセル表に自分の部署の社員全員のスケジュールを入れなければいけません。 (1つは月間、もう1つは週間で、それぞれ各月、各週毎にシートがあります。) VBAのフォームを作成し、週間スケジュールは自動でセットできるようになりました。 ですが、月間のスケジュールがうまくいかなくて困っています。 (入力フォームは共通のものを使用します。) スケジュールの表はシートが月別になっていてA列に社員名、1行目に日付、2行目に曜日、3行目に祝日が表示されるようになっています。 4行目からが各社員のスケジュールですが、1人の1日分のスケジュール入力のセルは2列×3行=6セルです。 (わかりにくいので図で表現したかったのですが、ずれて表示されてしまって余計にわかりにくいのでやめてみました。ちなみに、1人目の1日目のスケジュールのセル範囲はB4:C6となります。) そして、各セルには入力する項目が決まっています。 (この項目についてはフォームで作成済みです。) セルが多いため、Rangeを使おうと思っても指定するのが困難です。 個人的にはRangeのセルの値を別シートに作成した表からindexで検索できたらなぁ。と思っています。 できるかどうかすらわかっていませんが。(汗) もちろん、もっと効率的な方法があればそちらを教えていただきたいです。 週間スケジュールのセルから入力値をもってくる事も考えたのですが、月間は1日から必ず始まっていますが、週間は月曜日からのため、月や週によって日付が異なることなどから、やはり私には難しいのです。 よろしくお願いします。

  • EXCEL VBAで日報作成したい

    お世話になります。 EXCEL VBAの勉強をかねて日報を作成しようと思っています。 添付図にあるような簡単な日報ですが、VBAでやりたいことは2つあります。 1.行追加 各行の隣にある「行追加」ボタンを押したらその行を下に追加したいのです。 2.カレンダー作成 「カレンダー作成」というボタンを押したらA5に入っている月を参照して、添付図のようなA列が月、B列が日、C列が曜日、D列が開始時間、E列が終了時間、F列が作業、G列に行追加ボタンが自動で該当月のカレンダーに自動作成できれば最高です。 上記1.2を実現するためのロジックについてどなたかお知恵をお借りできませんでしょうか? よろしくお願い致します。 EXCEL2013

  • VBAと線の作成

    VBAの初心者です。 今下の画像のような、エクセルのシートを 練習用に作りました。 列が4列あり、C列の店舗の 値が切り替わるごとに 下に太い罫線を引きたいのです。 手で作成できますが、参考に VBAで自動に入力できるコード等は あるのでしょうか。 列数は不変で4列とします。 よろしくお願いします。

  • excel VBA フォームを使って

    初歩的な質問だと思いますが、教えていただけますでしょうか。 excelのVBAを使って、ユーザフォームを作ります。 そこにカレンダーコントロールでいわゆる「カレンダー」を作成し、 その下にテキストボックス(ちょっと大きめ)を作ります。 カレンダーをクリックし、テキストボックスにスケジュールが表示されるというものを作りたいです。 現在ワークシートには、scheduleというものだけを作成し、そこには日付とスケジュールを書き込んでいる状況です。 スケジュールは1行のみとは限りません。複数行のほうが多いです。 お忙しいところ申し訳ありませんが、よろしくお願いします。

  • EXCEL VBAで複数シート内のセルをまとめて表を作成

    EXCELマクロ(VBA)を教えてください。 なやんでいることは、 目的:シート1からシート5までの表の値をシート6に一覧表を作成させる。 ・シート1からシート5まで シート内の表からセル値をコピーしてマクロで(ボタンか何かで)シート6にシート1からシート5のセル値を貼り付けていくような動作をさせられるようなプログラムをつくりたいです。    表(一覧)を作成させたいので わかる方プログラミングを教えてください。よろしくお願いします。

  • excel vba 作成について教えて下さい。

    excel VBAを使ってあるブックのセル範囲を別のブック(日報.XLS)のシートへコピー貼り付けをしたいのですが、コピーする側のブックがランダムに取り込まれ(例 8時間ピッチにて自動的にブックが作成される)そのブックを日にちごとに集計し、一か月ごとにまとめるということをやらなければなりません。 例)8時間ごとにフォルダが作成されます。   000001.XLS 000002.XLS   00000F.XLS ・・・・・・・・16進数にて   上記ブックのSheet1のA2:A11までの数値を別のブック(日報月報集計)のに貼り付ける。 別のブック(日報月報集計)は項目ごとに10個のシートがあり 8時間ごとのファイルのセルA2は別ブックのSheet1の日付けに対応するセルへ貼り付け B2は       Sheet2 上記操作を8時間ごと(可変可能)に自動的にコピー貼り付けをやりたいのですが ブック間のコピー貼り付け等わからないことが(初心者です。)多々あり、いろいろ調べてはいるのですが、STOPした状態です。 出来れば、初心者にも理解しやすい解説等あれば宜しくお願いします。

専門家に質問してみよう