アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルで11日から翌月10日までの横方向のスケジュール表があります。
この表を日曜から始まるカレンダー形式にする方法を教えてください。

エクセルのA1に数字で11、B1に12、C1に13と日付が入力されています。今月は30日でT1が30、AD1が10となりますので同じ数字は入らないことになります。日付の数字だけで月の数字はありません。
A2は曜日で土、以降B2が日、C2が月・・・・の文字列
A3からは予定事項(A)が入力されており、空欄もあります
A4からは予定事項(B)が入力されており空欄はありません。

日曜から始まるカレンダー表になるように手作業で作っていますが、関数か、マクロで簡単に作る方法を教えてください。
曜日を基準にして配置すればいいのだろうと思っていますが、丸投げのようになって恐縮ですが、よろしくお願いします。
サンプルではカレンダーに罫線が入っていますが、これは後から手作業でもいいです。

「エクセルのスケジュール表からカレンダーを」の質問画像

A 回答 (3件)

No.2です。


たびたびごめんなさい。

投稿後思ったのですが、アップした画像を見ると各行にわざわざ「曜日」を入れる必要はないように思います。
↓の画像のように1行目(7行目)に曜日を入力しておけばその列は○曜日というのは判断できますので、
各週は3行使用するだけで良いのではないでしょうか?

↓の画像の場合の数式を載せておきます。
1行目~3行目は前回と同じです。

B8セルに
=IF(COUNTIF($2:$2,DATE($A$1,$C$1,0)-WEEKDAY(DATE($A$1,$C$1,0))+COLUMN(H1)+IF(WEEKDAY($A$2)<5,7)+7*(ROW(A3)/3-1)),DATE($A$1,$C$1,0)-WEEKDAY(DATE($A$1,$C$1,0))+COLUMN(H1)+IF(WEEKDAY($A$2)<5,7)+7*(ROW(A3)/3-1),"")

B9セルに
=IF(B8="","",INDEX($4:$4,,MATCH(B8,$2:$2,0))&"")

B10セルに
=IF(B8="","",INDEX($5:$5,,MATCH(B8,$2:$2,0))&"")

と数式を各々入れておき、B8~B10セルを範囲指定 → B10セルのフィルハンドルでH列までコピー!
そのまま(3行が範囲指定されている状態で)H10セルのフィルハンドルで下へ3行ずつコピー!

これで画像のような感じになります。

※ あくまで私的感覚ですが、
こちらの方が少しすっきりしているように思われます。m(_ _)m
「エクセルのスケジュール表からカレンダーを」の回答画像3
    • good
    • 2
この回答へのお礼

tom04 様 ありがとうございました。お蔭様で解決しました。
わざわざ改良版まで教えていただき助かりました。
おっしゃるように大変見栄えが良くなりますね、気づきませんでした。
大切に使わせていただきます。
簡単で恐縮ですが、お礼申し上げます。

お礼日時:2015/04/11 09:42

こんばんは!


必ず11日から始まる1ヶ月のカレンダーを作成すればよい訳ですよね?
一案です。
シリアル値で考えた方が何かと便利ですので、↓の画像のように西暦年と月の数値を入れるセルを設けておきます。
画像ではA1セルに「西暦年」・C1セルに「月」の数値をそれぞれ入力するとします。

A2セル(セルの表示形式はユーザー定義から d としておきます)に
=IF(DATE($A1,$C1,COLUMN(K1))<EDATE(DATE($A1,$C1,11),1),DATE($A1,$C1,COLUMN(K1)),"")

A3セルに
=IF(A2="","",TEXT(A2,"aaa"))

という数式を入れます。
A2・A3セルを範囲指定 → A3セルのフィルハンドルで右へ(AE列まで)コピー!
これで次の月の10日までのカレンダーが表示されます。
(4行目・5行目はご自身で予定なりを入力します)

次にB8セルに
=IF(COUNTIF($2:$2,DATE($A$1,$C$1,0)-WEEKDAY(DATE($A$1,$C$1,0))+COLUMN(H1)+IF(WEEKDAY($A$2)<5,7)+7*(ROW(A4)/4-1)),DATE($A$1,$C$1,0)-WEEKDAY(DATE($A$1,$C$1,0))+COLUMN(H1)+IF(WEEKDAY($A$2)<5,7)+7*(ROW(A4)/4-1),"")

B9セルに
=IF(B8="","",TEXT(B8,"aaa"))

B10セルに
=IF(B8="","",INDEX($4:$4,,MATCH(B8,$2:$2,0))&"")

B11セルに
=IF(B8="","",INDEX($5:$5,,MATCH(B8,$2:$2,0))&"")

という数式をそれぞれに入れます。
(この画面から各セルにコピー&ペーストの方が簡単だと思います。)

最後にB8~B11セルを範囲指定 → B11セルのフィルハンドルで右へ7列分(H列まで)コピー!
そのまま(4行が範囲指定されている状態で)下へ4行ずつコピーします。

これで画像のような感じになります。m(_ _)m
「エクセルのスケジュール表からカレンダーを」の回答画像2
    • good
    • 0

その手のカレンダー作るの面倒だったなあ。


WEEKDAY関数とかMOD関数とか使って工夫しましよ。

左上の最初のセルに前月の最終日が来るようにしておき、(当月の1日-1の計算で求められます)
その値に1を連続して加算して表にします。
WEEKDAY関数(WEEKDAY(yy/mm,1))で対象の月の1日が何曜日かを確認します。(日曜日なら1が、土曜日なら7が返ってきます)
さらにその値を7で割り余りを求めます。(MOD関数を使います)
その余りの値を左上の最初のセルに加算します。(0~6までの値なので、一番上の横一列が前月になることはありません)
これで見た目カレンダー作成完了です。
あとは、当月をどこかに入力しておき、その値を参照して左上の最初のセルを計算させればOK。

自分なら、日を並べる表の上あたりに年、月を示す数値をいれて
DATEVALUE関数で対象月の1日に相当するシリアル値を取得させますね。
また、そうやって作ったカレンダーは日付がシリアル値になっているので注意してください。
質問の例ではさらにDAY関数などを使ってシリアル値を日にちに相当する数値に直すとよいかもしれません。
計算式が長くなってしまう場合は、他にこの計算をさせる作業列や作業行を設け、
そこから演算結果の値だけを引っ張ってくるのもよいと思います。

ああ・・・前月の日付も表示されるので、
条件付き書式でセルの背景色と同じ色になるようにしておくと
見た目はきれいにできるかもしれません。

これは自分で作った場合の一例ですので、
他のかたがもっとスマートに作成するやり方を教えてくだされば
そちらを参考にしてください。
    • good
    • 1
この回答へのお礼

Cupper-2 様 ありがとうございました。
大変勉強になりました。
簡単で恐縮ですが、お礼申し上げます。

お礼日時:2015/04/11 09:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています