- ベストアンサー
Excelにてリストから表示した月の日付を表示する
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
カレンダー、試しに作ってみました。添付図を参照。 -4 日とか 37 日とかが図中に表示されていますが、下で説明するとおり、後で、書式によって見えなくさせることができます。 A1 2013 など C1 3 など A4 =sumproduct({-5,-4,-3,-2,-1,0,1}*(weekday(date(a1,c1,{-5,-4,-3,-2,-1,0,1}))=1)) B4 =a4+1 A6 =g4+1 B6 =a6+1 入力したら、B4・B6 セルをそれぞれ右方向に、G 列までドラッグしてオートフィル。次いで、A6:G6 のセル範囲をコピーして、A8・A10・A12・A14 の各セルに貼り付け。 ここまでで、添付図の状態になっています。次に、前月や翌月の日付を表示しないために、条件付き書式を設定します。 日付が表示されている全てのセルを Ctrl+ドラッグで同時に選択します。選択されている中で 1 つだけ色の異なっている「アクティブセル」の位置を Tab キーで動かし、A4 セルまで持ってきます。その状態で「ホームタブ>条件付き書式>新しいルール」をクリック。 表示されるダイアログで、「数式を使用して…」を選び、「次の数式を…」のボックスに「=month(date($A$1,$C$1,a4))<>$C$1」を入力。「$」マークを付け忘れると失敗するので、ご注意。さらに、「書式」ボタンの中の「表示形式タブ>ユーザー定義>種類ボックス」に、「;;」を入力。 以上で、正しく操作できていれば、余計な日付は非表示になっています。 ところで、VBA を使わなければできないことというのは確かにありますが、「visual basic for APPLICATIONS」であり、基本、手作業で実行する Excel の操作を自動化してくれるだけのものだとお考えください(超高速ですが)。つまり、手作業での Excel の機能についてそれなりに習熟していないと、VBA を使おうとも、大したことはできないということです。魔法か何かではありません。 VBA を勉強するなんてまだ早いとか言っているのではありませんよ。難しそうな気がする処理は何でも VBA という考え方をする人がいるならば、それは違いますよというお話です。
その他の回答 (6)
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.3 です。ごめんなさい、ちょっと手が滑って、過剰な関数を用いてしまいました。 配列定数({ }という部分)の代わりに少しでもセル参照を使っている場合は SUMPRODUCT 関数を使うのですが、今回はその部分には全く含まないので、A4 は次式の SUM で十分です。 A4 =sum({-5,-4,-3,-2,-1,0,1}*(weekday(date(a1,c1,{-5,-4,-3,-2,-1,0,1}))=1)) 一応、SUMPRODUCT でも計算を誤るわけではないのですが、過剰でした。 他に修正はありません。失礼しました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号5です。 入力規則の設定方法に関して回答するのを忘れておりました。 入力規則の設定方法は、Excelのバージョンによって若干異なっており、以下の様な操作によって設定します。 【Excel2007よりも前のバージョンの場合】 A1セルを選択 ↓ 「メニュー」バーの[データ]ボタンをクリック ↓ 現れた選択肢の中にある[入力規則]をクリック ↓ 現れた「データの入力規則」ダイアログボックスの[設定]タブをクリック ↓ 「入力値の種類」欄をクリック ↓ 現れた選択肢の中にある[整数]をクリック ↓ 現れた「データ」欄クリック ↓ 現れた選択肢の中にある[次の値以上]をクリック ↓ 「元の値」欄に 1904 と入力 ↓ 「データの入力規則」ダイアログボックスの[OK]ボタンをクリック ↓ C1セルを選択 ↓ 「メニュー」バーの[データ]ボタンをクリック ↓ 現れた選択肢の中にある[入力規則]をクリック ↓ 現れた「データの入力規則」ダイアログボックスの[設定]タブをクリック ↓ 「入力値の種類」欄をクリック ↓ 現れた選択肢の中にある[リスト]をクリック ↓ 現れた「元の値」欄に次の様に入力 1,2,3,4,5,6,7,8,9,10,11,12 ↓ 「データの入力規則」ダイアログボックスの[OK]ボタンをクリック 【ExcelのバージョンがExcel2007以降のバージョンの場合】 A1セルを選択 ↓ Excelウィンドウの上の方にある[データ]タブをクリック ↓ 現れた「データツール」グループの中にある[データの入力規則]ボタンをクリック ↓ 現れた選択肢の中にある[データの入力規則]をクリック ↓ 現れた「データの入力規則」ダイアログボックスの[設定]タブをクリック ↓ 「入力値の種類」欄をクリック ↓ 現れた選択肢の中にある[整数]をクリック ↓ 現れた「データ」欄クリック ↓ 現れた選択肢の中にある[次の値以上]をクリック ↓ 「元の値」欄に 1904 と入力 ↓ 「データの入力規則」ダイアログボックスの[OK]ボタンをクリック ↓ C1セルを選択 ↓ Excelウィンドウの上の方にある[データ]タブをクリック ↓ 現れた「データツール」グループの中にある[データの入力規則]ボタンをクリック ↓ 現れた選択肢の中にある[データの入力規則]をクリック ↓ 現れた「データの入力規則」ダイアログボックスの[設定]タブをクリック ↓ 「入力値の種類」欄をクリック ↓ 現れた選択肢の中にある[リスト]をクリック ↓ 現れた「元の値」欄に次の様に入力 1,2,3,4,5,6,7,8,9,10,11,12 ↓ 「データの入力規則」ダイアログボックスの[OK]ボタンをクリック
- kagakusuki
- ベストアンサー率51% (2610/5101)
同じ月の同じ日であっても、年によって曜日が異なりますから、自動で行うためには、年の情報も必要となります。 ですから、例えば、A1セルに西暦年を表す4桁の整数値を入力し、C1セルに月を選択するドロップダウンリストを設定する事で、初めて日付が表示される様な設定等にします。 又、御質問文の添付画像では、第1週目の日付を表示する行と第2週の日付を表示する行の間隔が空いている様ですので、今仮に、 第1週目の日付をA4~G4の範囲に表示し、 第2週目の日付はA14~G14の範囲に表示し、 第3週目の日付はA24~G24の範囲に表示し、 第4週目の日付はA34~G34の範囲に表示し、 第5週目の日付はA44~G44の範囲に表示する という具合に、10行ごとに日付を表示するものとします。 まず、B1セルに「年」、D1セルに「月」と入力して下さい。 次に、A3セルに「日」、B3セルに「月」、C3セルに「火」、D3セルに「水」、E3セルに「木」、F3セルに「金」、G3セルに「土」と入力して下さい。 次に、A4セルに次の関数を入力して下さい。 =IF(IF(COLUMNS($A:A)=1,FALSE,ISNUMBER(INDEX($A$4:$G$4,COLUMNS($A:A)-1))),INDEX($A$4:$G$4,COLUMNS($A:A)-1)+1,IF(ISNUMBER(1/(WEEKDAY(($A$1&"/"&$C$1&"/1")+0)=COLUMNS($A:A))),1,"")) 次に、A14セルに次の関数を入力して下さい。 =IF(ISNUMBER(($A$1&"/"&$C$1&"/"&($G$4+COLUMNS($A:A)+ROUND((ROWS($4:14)-1)/(ROWS($4:$14)-1)-1,0)*7))/$G$4),$G$4+COLUMNS($A:A)+ROUND((ROWS($4:14)-1)/(ROWS($4:$14)-1)-1,0)*7,"") 次に、A4~A14の範囲をコピーして、B4~G14の範囲に貼り付けて下さい。 次に、A14~G23の範囲をコピーして、A24~G63の範囲に貼り付けて下さい。 以上です。
お礼
細かく教えていただき大変参考になりました! 今回実現したい事に関しましてとても理解が深まりました。 本当にありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
エクセルで作ることができます。 例えば次のようにします。 カレンダーですから年や月の指定が必要です。 A1セルに西暦年を2013のように入力します。 A2セルには月を3月なら3と入力します。プルダウンリストから選択するようにしてもよいでしょう。 プルダウンリストにするのならA2セルを選択してから「データ」タブの「データの入力規則」で入力値の種類で「リスト」を選び、元の値の窓には「1,2,3,4,5,6,7,8,9,10,11,12]を入力してOKします。 A4セルからG4セルまでには日、月…と土まで入力します。 A5セルには次の式を入力してG5セルまでドラッグコピーします。 =IF(WEEKDAY(DATE($A$1,$A$2,1))>COLUMN(A1),"",IF(WEEKDAY(DATE($A$1,$A$2,1))=COLUMN(A1),1,IF(OFFSET(A5,0,-1)<>"",OFFSET(A5,0,-1)+1,""))) 次の週、すなわち第2週目については例えばA10セルに次の式を入力してG10セルまでオートフィルドラッグコピーします。 =IF(A5="",$G5+COLUMN(A1),IF(A5+7<=DAY(DATE($A$1,$A$2+1,0)),A5+7,"")) A10セルの式についてはその後に下方にドラッグコピーします。例えばA30セルまでドラッグコピーします。 A15,A20,A25,A30のセルについては第3週から第6週までの日にちが表示され他の行は別の数値が表示されます。 A15,A20,A25,A30セルを除く、A11以降のセルについてはそれらのセルをCtrlキーを押しながら選択しDeleteキーでデータを削除します。 A15セル、A20,A25,A30のセルについてはそれぞれの式をG列まで横方向にドラッグコピーします。 以上で完成です。 なお、各週の間の空間の行を上の例では4行にしていますが、10行にしたいのでしたら上の例でA10セルへ入力した式をA16セルに入力して、その後は上記と同じ操作をすればよいでしょう。
お礼
ありがとうございます。 大変勉強になりました!
- tsubuyuki
- ベストアンサー率45% (699/1545)
要するに、カレンダー風の予定表のようなモノを作りたい、 しかも、「月を可変にして」入力や閲覧は一つのシートで行いたい、 という事ですね。 既に別で入力してあるものを閲覧するだけであれば、 式・関数・その他の機能だけで、おそらく可能です。 ただし、入力したものを蓄積したり、修正したり、と言う機能までつけるのであれば、 マクロ・VBAを使うことになるでしょう。 ひとまず、どこまでやりたいのかを整理してみたほうが良いと思いますよ。
お礼
ありがとうございます! 理想の物を作成できるようにVBAの勉強もこれから行っていこうと思います。
- mu2011
- ベストアンサー率38% (1910/4994)
>別のシートを参照するプルダウンリストの作成で実現はできるのでしょうか? ⇒出来ます。 例えば、別シートのリスト範囲を選択→名前ボックス欄にLIST(仮称)と入力、Enterキー押下とすれば、リスト範囲名を別シートで参照出来ますので、リストの元の値欄に=LISTとするだけです。
お礼
ありがとうございます! おっしゃって頂いた通りの方法で参照はおこなえました!
お礼
細かく教えていただきありがとうございます。 回答していただいた方法の通りで、私が私の実現したかったことができました! 本当にありがとうございます! また機会がありましたらご鞭撻の程よろしくお願いいたします。