カレンダー作成 別シートよりデータ反映

このQ&Aのポイント
  • エクセルで作成したカレンダーを使い、仕事で誰が何日に休むかを一目で把握したい。
  • カレンダー作成のために、名前に色分けをした種類を入力している。
  • 別のシートで作成したデータをカレンダーに反映させたいが、同じ日付のデータがある場合、どうすれば反映されるかわからない。
回答を見る
  • ベストアンサー

カレンダー作成 別シートよりデータ反映

目的は仕事で何日に誰が休むむかを一目で知りたくてエクセルで作成したカレンダーを作りました(縦型日付表示) 現在は届けの用紙が来たらカレンダーに手打ちしてます。 (シート1) 種類は名前に色分けをしたかったので種類を入れてます。       (上手く作成できたら種類によって名前に色わけとかしたくて種類を作りました)        横に名前が出るようにしてます。同じ日に休みの人が増えれば HIJKと横に続きます。   A      B    C      D     E      F     G 1 日付   曜日  名前   種類  名前   種類 2 1日         桃    有給  (みかん)   (休み) 3 2日 4 3日 以下日にちは月末まであります。 別のシート(シート2)で作成したデータを反映させたいのですが同じ日付でデータがある場合 どうすれば反映されるのでしょうか?ためしにD3にカウント式(=COUNTIF($A$3:$A3,$A3))を入れて 順番をつけてみました。   A      B    C      D 1 日付  名前  種類  カウント 2 5/1  桃    有給   1 3 5/3  奈々   半日   1 4 5/1  みかん 休み   2 以下休み届けなどが出されたら随時追加します。 わからないなりにネットで見て数式を入れてみました。 シート1のC2に =IF(ISERROR(VLOOKUP(A2,シート2!$A:$C,2,0)),"",VLOOKUP(A2,シート2!$A:$C,2,0)) C3に =IF(ISERROR(VLOOKUP(A2,休み!$A:$D,3,0)),"",VLOOKUP(A2,休み!$A:$D,3,0)) 入力すると始めの 5/1 桃 有給はカレンダーにあがるのですが5/1 みかん 休みを出せません あまりエクセルなどに詳しくなく、他の数式なども活用できるのかこういう表がそもそもエクセルでできるのかも勉強不足でわかりません。なんだかマネて作成したらあまりに長くて引数が足りませんみたいな表示がでました。 お手数をおかけしますが、教えていただけたら嬉しいです。よろしくお願い致します。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! お望みの方法とは異なるかもしれませんが、手っ取り早くVBAでやってみました。 まずSheet1にカレンダーを作成します。 ↓の画像で上側がSheet1、下側がSheet2とします。 (お手元のSheetは画像通りの配置にしてください) まずSheet1のA1セルに西暦年を、C1セルに表示させたい月の数値を入力します。 A4セル(セルの表示形式はユーザー定義から d日 としておく)に =IF(MONTH(DATE(A$1,C$1,ROW(A1)))=C$1,DATE(A$1,C$1,ROW(A1)),"") という数式を入れます。 B4セル(セルの表示形式はユーザー定義から aaa としておく)に =IF(A4="","",A4) という数式を入れ → A4・B4セルを範囲指定 → B4セルのフィルハンドルで月末の34行目までコピー! これでA1・C1セルの数値を入れ替えるだけでカレンダーができます。 次にAlt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト Dim i As Long, j As Long, lastRow As Long, lastCol As Long, wS As Worksheet 'この行から Sub 表示() Set wS = Worksheets("Sheet1") lastCol = wS.Cells(3, Columns.Count).End(xlToLeft).Column With Worksheets("Sheet2") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row If lastRow > 1 Then Range(.Cells(2, "A"), .Cells(lastRow, "C")).ClearContents End If For i = 4 To 34 For j = 3 To lastCol Step 2 If wS.Cells(i, j) <> "" Then With .Cells(Rows.Count, "A").End(xlUp).Offset(1) .Value = wS.Cells(i, "A") .Offset(, 1) = wS.Cells(i, j) .Offset(, 2) = wS.Cells(i, j + 1) End With End If Next j Next i End With End Sub 'この行まで そしてExcel画面に戻り、画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペースト Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim lastCol As Long lastCol = Cells(3, Columns.Count).End(xlToLeft).Column If Intersect(Target, Range(Cells(4, "C"), Cells(34, lastCol))) Is Nothing Then Exit Sub Call 表示 End Sub 'この行まで 最後にExcel画面に戻り、Sheet2のA列の表示形式を「日付」にしておきます。 これでSheet1のデータ変更があるたびにSheet2に画像のような感じで表示されます。m(_ _)m

serotouhu
質問者

お礼

回答1の方から教えて頂いたように、私がバージョン情報を書いていない中でご解答いただきありがとうございます。 回答が早くてこちらにまずビックりしております。 しかも画像付きで!!カレンダーが大変みやすいですね。 内容も詳しく書いていただきすごく助かります。 これから早速やってみたいと思います。本当にありがとうございました。

その他の回答 (1)

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

シート1にカレンダー,シート2に休暇届一覧とします 簡単のため,次のように準備します シート1: A2にはとりあえず 5/1 を記入,以下コピーして5/31まで準備します(後述) B2は =TEXT(A2,"aaa;;;") 以下コピー シート2: A列には年/月/日を記入します 簡単のためB列に「カウント」を用意します B2: =IF(A2="","",TEXT(A2,"yyyymmdd-")&COUNTIF($A$2:A2,A2)) 以下コピー 邪魔ならB列は隠しておきます C列,D列に名前,休暇種別を記入します 改めてシート1: C2には =IF(COLUMN(A2)/2>COUNTIF(Sheet1!$A:$A,$A2),"",VLOOKUP(TEXT($A2,"yyyymmdd-")&TEXT(COLUMN(A2)/2,"0"),Sheet1!$B:$D,MOD(COLUMN(A2)+1,2)+2,FALSE)) 右にコピー,下にコピーして完成。 #参考 実際には無意味に数式を複雑にしないため C2には =IF(COLUMN(B2)/2>COUNTIF(Sheet1!$A:$A,$A2),"",VLOOKUP(TEXT($A2,"yyyymmdd-")&COLUMN(B2)/2,Sheet1!$B:$D,2,FALSE)) D2に =IF(C2="","",VLOOKUP(TEXT($A2,"yyyymmdd-")&COLUMN(B2)/2,Sheet1!$B:$D,3,FALSE)) と記入,C2:D2を2つセットで右に下にコピーします。 #ご利用のエクセルのバージョンがご相談に書かれていませんが,エクセル2007以降ならもっと簡単な数式に出来ます。ご相談投稿では,普段ご利用のソフトのバージョンまでキチンと明記することを憶えて下さい。次回以降のご参考に。 #参考: A2の5/1は,実際にはどこかのセルに年と月の数字を記入して計算によって表示させ,さらにセルの書式設定の表示形式のユーザー定義で d日 のように設定して表示を整えます。 A列の縦のカレンダーを計算式で上手に表示する方法について,別途ご相談を投稿して解決して下さい。

serotouhu
質問者

お礼

詳しくやり方を書いていただきありがとうございます。 バージョンとか書くの忘れてました・・・・。投稿の仕方も教えていただきありがとうございます。(何を使用しているかわからないと答えようが無いですものね・・。) こんなに早く回答がもらえるとは思ってなかったし親切に教えていただけるとは考えていなかったのですごく嬉しいです。 これから早速試してみます。本当にありがとうございました。

関連するQ&A

  • エクセル(2003・2007)でデータ抽出し、別シートを作成するための

    エクセル(2003・2007)でデータ抽出し、別シートを作成するための関数を教えて下さい ●シート名:サンプルA                ●シート名:サンプルB   A  B    C   D  E・・        A  B     C   名前 日付1  日付2  備考      名前 日付1   備考 1 山田 2010/10/15 2010/10/10 ああ    1 鈴木 2010/10/18 うう 2 佐藤             いい       2 太田 2010/10/21 かか  3 鈴木 2010/10/18 うう     → 4 井上 2010/11/20 ええ 5 石田 2010/8/7 2010/10/7 おお 6 太田 2010/10/21 かか 具体的に上記のデータから【B列が本日から10日間以内かつC列がスペース】のデータのA・B・D行を別シートに作成する関数を教えて下さい よろしくお願いします ※なぜか文字がずれてしまってて、すいません・・・

  • EXCELの関数で別のシートからデータを取り出す方法について

    こんばんは。 excelの関数で次のようなことができますか? sheet1 A     B   C 123 125 122 sheet2 A    B    C     D 122            りんご 123           みかん 125            バナナ 上記のようなデータがsheet1とsheet2にあります。 sheet1のC列にA列のセルの番号と対応した商品を sheet2のA列とD列に対応データから引用できますか? (となりに並んでいないデータです。) 関数的にはvlookup,index,matchとかを使うとよさそうですが うまくいきません。 解決方法を教えてください。 よろしくお願いします。

  • 別のシートにデータを出す方法

    シート1に 番号 A1に1 A2に2 A3に3 A4に4 データ↓ B1に43 B2に45 B3に47 B4に55 C1に733 C2に890 C3に826 C4に94 D1に57 D2に67 D3に41 D4に52 E1に301 E2に104 E3に719 E4に441 という表があるとします。 番号1の場合は、B1の43、C1の733、D1に57、E1に301というデータです。 シート2の、 A3に、1という数字(シート1のA1の、1という番号)をいれれば、 シート2の B3に、シート1の、B1の43というデータ。 C3に、シート1の、C1の733というデータ。 D3に、シート1の、D1の57というデータ。 E3に、シート1の、E1の301というデータ。 がでるようにしたいのですが、 VLOOKUPを使ってできますか? どのような関数の立て方したらいいでしょう? XPのExcel2003です。 よろしくお願いしますm(_ _)m

  • 【Excel VBA】別シートへの反映方法

    こんばんは。 現在月間&日ごとのスケジュール表をVBAで作成しています。 そこで質問です。 Sheet1のA列に日付、B列に予定、C列に人の名前 があります。 Sheet1のC列の人の名前を各日付ごとの シート(シート名は1日、2日、3日・・・)のセル「E5」へ 反映させたいのですが、どうしても分かりません。 分かり難い質問で、大変申し訳ありませんが、アドバイスよろしくお願いします。

  • エクセルカレンダーの作り方

    エクセル2003でカレンダーを作成したいです。 作成方法を教えていただきたく投稿いたしました。 祝日カレンダーというシートを作成し、 A5~A50まで日付(2013/01/01と表記) B5~B50まで祝日の名前が入った表を作成しました。           A       B      6  2013/01/01   元旦 7  2013/01/14   成人の日 8  2013/02/11   建国記念の日 9  2013/03/20   春分の日 10 2013/04/29   昭和の日 といった感じです。 別シート「シート1」のE2のセルに 2013/01/01 と日付をいれてあります。 この日付は毎日変わるのですが、そのすぐしたのセルE3のセルに 祝日カレンダーシートに対応している日付がきたら、祝日の名前を表示させたいのです。 1/1なら元旦。1/14なら成人の日。 といった感じです。 このやり方を教えていただけないでしょうか。 よろしくお願い致します。

  • Excel:カレンダーシートに反映させたい

    例として、 1つ目のシートは社員名簿です。 A列・社員番号 B列・氏名 C列・希望日(ここが空白になっていて、希望日を後で入れる) … のように縦に100名程度続いています。 2つ目のシートに添付画像のような縦カレンダーを作りました。 上で入れた希望日をカレンダーの日付ごとに振り分けてくれる数式はありますでしょうか? 画像のように1つの日につき4名まで横に氏名が並ぶようにしたいです。 1日につき4名の枠を超えてしまった時は…などは考慮しなくても結構です。シート1を入力する時点で1日の定員は超えないように管理されているものとします。

  • VLOOKUPにて数字を打てばデータ(別ワークシート)が反映させる表を

    VLOOKUPにて数字を打てばデータ(別ワークシート)が反映させる表を作成 しております。 現在C9に数字を入力すればD9にデータを表示されるように しているのですがC9に数字を入力しなくてもD9に直接数字を入力すれば D9にデータが反映されるようにしたいのですが設定方法はありますでしょうか。 以下が現在D9の中の式となります。 =IFERROR(VLOOKUP(C9,テーブル1[#すべて],2,FALSE),"")

  • エクセル2003 科目ごとに別シートに転記したい

    Ecxel2003を使用しています。 [現金出納帳]シートに記入したデータが各科目(利息、会費など)のシートに自動的に転記される方法として次の式を使いました。 [現金出納帳]シートには   A   B   C   D 1    日付  科目 金額 2 3 4 5 6    3/8  利息  18 7    3/9  会費  100   [利息]シートには A5=IF(ISERROR(MATCH("利息",現金出納帳!$C$6:$C$500,0)),"",MATCH("利息",現金出納帳!$C$6:$C$500,0)) A6=IF(ISERROR(MATCH("利息",OFFSET(現金出納帳!$C$6:$C$500,A5,0,100,1),0)+A5),"",MATCH("利息",OFFSET(現金出納帳!$C$6:$C$500,A5,0,100,1),0)+A5) B5=IF(ISERROR(INDEX(現金出納帳!$B$6:$B$500,A5,1)),"",INDEX(現金出納帳!$B$6:$B$500,A5,1)) B6=IF(ISERROR(INDEX(現金出納帳!$D$6:$D$500,A5,1)),"",INDEX(現金出納帳!$D$6:$D$500,A5,1)) と式を入れると[現金出納帳]シートから転記されます。 同様に[会費]シートも式の”利息”を”会費”に書き換えたものを入力すると[現金出納帳]シートから転記されます。 ここで、 [収入]シートというものを作って、[利息]と[会費]を一つにまとめたシートを作る場合、 式はどうなりますか?([現金出納帳]シートには利息、会費以外にも色々な科目のデータが入っていきます) なお、上式の意味は充分理解していない程度の知識しかありません。よろしくお願いいたします。

  • セルの内容を別のシートのセルに呼び出す。

    Sheet1のあるセルを「セルの書式設定」の表示形式の「ユーザー定義」で [=1]"○";[=2]"◎";"有"  と設定し、  1や2や3で「○」 「◎」 「有」 を呼び出すように定義し、 1を入力すると○、2を入力すると◎・・・ が問題なく返って来ているのを確認した上で、 =IF(ISERROR(VLOOKUP(A2,Sheet1!$A$4:$C$33,3,FALSE)),"",IF(VLOOKUP(A2,Sheet1!$A$4:$C$33,3,FALSE)=0,"",VLOOKUP(A2,Sheet1!$A$4:$C$33,3,FALSE))) 以上のような式を入れて、そのセルの内容をSheet2のセルに呼び出したところ、 帰って来た値が「○」 「◎」 「有」ではなく、入力した1,2、3しか返って来ません。 解決方法があれば、どなたかご教授願えないでしょうか。 よろしく、お願い致します。

  • エクセルで範囲内のデータを別シートにうつしたい

    エクセルで特定の範囲内の数値にあてはまるデータを別のシートに新たな表として作成したいのですが、簡単な方法があれば教えてください。 例えば Sheet1   A   B     C  1 25  ミカン   3000 2 30  リンゴ   4500 3  5  メロン   9800 4 17  ブドウ   1800 5 50  バナナ  1000 このようなデータを次のような表にしたいのです。 A列の数値が10~30のみ行ごと抜粋する Sheet2   A   B     C  1 25  ミカン   3000 2 30  リンゴ   4500 3 17  ブドウ   1800  よろしくお願いいたします。

専門家に質問してみよう