• ベストアンサー

エクセルで予定表を作成

予定表を作成したいと思っています。 マクロのことはよく判りません。 やりたいことは・・・ 今現在作っているもので、予定を入力するシートとそこからリンクして予定を表示しているシート(一ヶ月単位のカレンダー形態のもの。一ヶ月1シートになってます)があるのですが、 1)月ごとのシートを選択して表示を切り替えるのではなく、1枚のシート上で、月を選択するだけでそこにその月が表示されるようにしたい。 2)予定に参加する参加者の管理をしたい。参加者は人数が決まっているわけではないのであらかじめ行や列を作っておいても不要になったり足りなかったりしてしまいます。予定を記入するシートとは別に、必要なときだけ自動的に予定が反映された記入する欄なりシートなりを作成できるようにしたい。 のですが・・・ どんな方法があるかアイデアをご提供いただきたいと思います。

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

  • ベストアンサー
  • zenjee
  • ベストアンサー率47% (50/106)
回答No.3

 Sheet1(予定表と仮称)の作り方ですが、最初の回答では、「日」を列(右)方向に表示するようにしておりましたが、予定を入力したいという趣旨のようですから、横書きで入力できるよう、「日」を行(下)方向に表示するように変更して回答します。  A1とB1はセル結合し、表示形式をユーザー定義で「yyyy"年"」とします。  C1は月を入力するセルとし、表示形式をユーザー定義で「0"月"」とします。  A1に次の式を入力します。(なお、Sheet2の、「月初」については前回答と同じです。) =VLOOKUP(C1,月初,2,FALSE)  A2から列(右)方向は見出行とし、例えばA2「表示の有無」、B2「予定番号」、C2「日」、D2「曜」、E2「場所」、F2「予定内容」、G2「○○」………等と仮定します。  A3:A33は別シート(Sheet3)に表示させる行事について、表示させるものには「1」と入力するようにします。  B3に次の式を入力し、B33までコピーします。 =IF(A3="","",SUM(A$3:A3))  C3には前回答同様  「=A1」  と入力します。  C4には次の式を入力し、C33までコピーします。 =IF(C3="","",IF(DAY(C3+1)<DAY(C3),"",C3+1))  D3には次の式を入力し、D33までコピーします。 =IF(C3="","",TEXT(C3,"aaa"))  予定表で使用する列を仮にJ列までとすると、B3:J33を選択し、挿入→名前→定義で、例えば「予定」と名前を付け、OKします。  次は、予定表のうち転記したいデータを自動的に表示するSheet3の作り方です。  1行目は見出列とし、例えばA1「予定表番号」、B1「月日」、C1「曜」、D1「場所」、E1「行事内容」、F1「参加者」、G1[○○○」………のように見出しを付けます。  A2から下行は予定表の予定番号列に表示された数値が自動的に転記されるようにします。  その方法は、A2にとりあえず「1」と入力しておき、A3に次の式を入力して、以下必要と思われる行までコピーします。(B列「月日」の表示形式は日付で適宜選択してください。) =IF(ISERR(IF(SUM(予定表!$A$3:A$33)<A2+1,"",A2+1)),"",IF(SUM(予定表!$A$3:A$33)<A2+1,"",A2+1))  次にB2に次の式を入力し、列方向及び行方向の必要なセル位置までコピーします。 =IF($A2="","",VLOOKUP($A2,予定,COLUMN(B:B),FALSE))  以上で、Sheet1「予定表」のA列に「1」と入力した分のデータがSheet3の該当セルに予定表番号とともに自動的に転記されます。  

0konta0
質問者

お礼

ありがとうございます。 同様に、参考にさせていただきます。 こういうのってご自分で考えるんですか?? 皆さんすごい。

その他の回答 (3)

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

一読して、頭の悪い私には内容をつかめなかったが、辛抱して読んで 想像を交えながら、下記を記してみます。質問者の意図と違っている場合はお許しを願う。 データ例 予定がわかり次第、a、b列に入力していく。日付的的には順序にならない。 スケジュールはa3から入力し、b1には、後刻必要の都度、月数を入力する。 12 日付 行動内容 2005/10/1 10月販売会議 2005/11/2 社長と同行a社 2005/10/12 b社見積もり 2005/11/22 c社引き取り 2005/10/5 休暇 2005/12/23 d社販促 23 2005/10/13 衛生委員会 2005/11/5 健康診断 2005/10/24 予算提出 2005/11/5 福島出張 2005/12/18 忘年会 18 2005/12/24 クリスマス会 24 2005/12/28 仕事納め 28 2005/12/26 挨拶回り 26 2005/12/3 12月販売会議 3 c3に(目障りならz列などでも良い、ワーク列) =IF(MONTH(A3)=$B$1,DAY(A3),"") と入れて、下方向に式を複写する。 結果上記の通り。 d3に =INDEX($A$3:$B$100,MATCH(SMALL($C$1:$C$100,ROW()-2),$C$3:$C$100,0),1) と入れて下方向に式を複写する。 d3はsHEET2へ持っていくことも可能。とりあえず同一シート(sHEET1)にします。 e3に =INDEX($A$3:$B$100,MATCH(SMALL($C$1:$C$100,ROW()-2),$C$3:$C$100,0),2) と入れて下方向に複写。 結果 日付 行動内容 2005/12/3 12月販売会議 2005/12/18 忘年会 2005/12/23 d社販促 2005/12/24 クリスマス会 2005/12/26 挨拶回り b1を10にすれば、即座に10月の予定が、列に表示される。 (注)1.c列をz列にしたり、sHEEt1のd,e列をsHEET2の列に持っていくと式は当然変わります。 2.d列を式複写してf列を正しき出す方法もあります 2のところをcOLUMN()--3にします。 3下の方の行で#NUM!が出るセルができるが、=COUNT($C$3:$C4100)が =ROW()-2より大きいかif文で聞いて空白にしてください。 式が長くなるので、とりあえず省いた回答です。 (2)の参加者の問題 良ければ実例でも上げてください。 「自信あり」は、上記例では、確認済みの意味です。

0konta0
質問者

お礼

ありがとうございました。 一生懸命説明を読みながらチャレンジしたいと思います。 皆様のご意見を参考にさせていただきます。

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.2

 こんにちは。  まず予定表ですが、私が過去ある所で同様の作業をやっていたときの例を掲げておきますので、よかったら参考にしてください。  シート2に次のような表を作り、挿入→名前→定義で、例えば「月初」と名前をつけ、参照範囲は「=Sheet2!A:B」としておきます。この表のA列は、「月」でA1に例えば「11」B1に「2005/11/1」と入力、A2に =IF(A1=12,1,A1+1) B2に =EDATE(B1,1) と入力し、下行にコピーします。 なお、表はほぼ1年ごとに参照済(処理済)の行を削除し、AB列最上セルに月とその月初日の日付を入力、最下行から下に順次上の式をプルダウンコピーし表を更新していきます。 A B 11 2005/11/1 12 2005/12/1 1  2006/1/1 2  2006/2/1 3  2006/3/1 4  2006/4/1 5  2006/5/1 6  2006/6/1 7  2006/7/1 8  2006/8/1 9  2006/9/1 10 2006/10/1 11 2006/11/1 ↓  シート1のB1を「月」入力のセルとし、当月起算日の月を入力します。  A1に次の式を入力します。なお、A1の表示形式は「yyyy/」とし、A1とB1間の罫線は、線なしにします。 =VLOOKUP(B1,月初,2,FALSE)  B1に入力した月数を検索値として、A1にその月の初日が入ります。  C列は見出列とし、C1が「日」C2が「曜」とします。  D1の式は  =A1  とします。  E1に次の式を入力し、AH1までコピーします。 =IF(D1="","",IF(DAY(D1+1)<DAY(D1),"",D1+1))  これは、当該月の暦に応じ、月末の翌日を表示させない(空白にする)ための式です。(例えば11月31日など)  D2に次の式を入力し、AH2までコピーします。これは曜を表示する式です。 =IF(C1="","",TEXT(C1,"aaa"))  なお、蛇足ですが、休・祝日はセル色・文字色が変わるよう、別シートに10年分ぐらいの休日一覧表を作っておき、シート1のC1:AD2に条件付き書式を定義しておりました。条件付き書式の定義方法については、お求めがあれば別途お答します。  祝日一覧表は下記サイトからダウンロード可能で、この表に土、日、会社休日などを加え、一覧表にすると便利でしょう。http://www.vector.co.jp/download/file/win95/personal/ff367806.html  以上は質問(1)の予定表の部分に対しての回答ですが、質問(2)については、具体的にどのようにされたいのか、ちょっと意味が分かりません。 別シートに氏名や予定を入力すると予定表の該当セルに自動的にデータが反映されるようにしたい、という意味でしょうか。これについては補足ご説明があればお答えできるかも知れません。

0konta0
質問者

補足

ありがとうございます。 じっくり読んで、研究させていただきます。 (2)の質問は おっしゃっているのとは逆で、 予定の記入シートに予定を入れたものが、必要な予定のものだけ(例えば何か一つ指示をしたりすると)別のシートや場所に日付や予定が反映されその詳細を書き込めるようになる。できれば複数行が任意で。 と言うのが希望なのです。 その詳細は予定によっては必要がなかったりするので、記入シートにそれを記入できる欄を最初から作ってしまうととてつもなく大きな表になってしまって見づらくなりそうなものですから。 (言っている意味分りますか???すみません,説明が下手で。)

  • 11369
  • ベストアンサー率29% (20/67)
回答No.1

 質問に対する正確な回答ではないですが、別の方法を提案させていただきます。  エクセルでご質問のようなものを作成するのは、可能ですが時間がかかることと、いずれは管理しきれなくなりすたれてしまうのではないかと考えられます。複数のバージョンのファイルがいくつもできてしまったり、改ざんが可能であったり、リンクが複雑すぎてわけがわからなくなるなど、多くの問題が予想されます。  予定表の作成・管理は、グループウェアを利用することをお勧めします。ウェブサーバーが必要となりますが、参加者の管理をしたいということであれば、LANを組まれているのでしょうから導入は容易でしょう。 グループウェアといってもたくさんあると思いますが、お薦めはフリーソフトのURLに示したものです。

参考URL:
http://wiz.syscon.co.jp/
0konta0
質問者

お礼

ありがとうございます。 とても魅力的なソフトですね。 是非使ってみたいと思うのですが・・・ なにぶん、私にはそういった物を取り込む権限を有していないので、すぐに導入。というわけには行きません・・・ ですが、検討の余地も充分あると思いますので、参考にさせていただきます。 (こういったことがエクセルでもどうにかできると良いのですが・・・)