ここから本文です

アルバイト勤務表作成のため、エクセルでカレンダーを手軽に作りたいです。年月を入力したら、...

esto1112さん

2013/7/2403:22:49

アルバイト勤務表作成のため、エクセルでカレンダーを手軽に作りたいです。年月を入力したら、縦軸に月日と曜日が出るような・・・。

似たような質問はあったのですが、うちの会社は21日始まりなので、2013年8月度と入力すると、7月21日から8月20日までが表示されるものでないといけないのですがいかがでしょうか。

A B C
1 2013 8
2 7/21 日
4 7/22 月
5 7/23 火
6 7/24 水
7 7/25 木
・ ・ ・
・ ・ ・
・ ・ ・

どなたかご教授いただけませんでしょうか。

よろしくお願いいたします。

閲覧数:
906
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

2013/7/2409:28:30

まず、A1に西暦(4桁)、B1に月が入力されるとして回答します。
それから、A列とB列のセルの幅を大きくしておいた方がいいです。
セルの表示内容が####などになった場合は幅が狭くて、表示出来ない状態です。
若干、手順が多いと思いますが、がんばって下さい。
それから、完成したものは保存しておいて、それをコピーしたものを利用された方がいいです。
それは計算式を消したりすることがあるからです。

1.セルA2に計算式を設定します。
=IF(B1=1,DATE(A1-1,12,21),DATE(A1,B1-1,21))
ちょっと面倒な計算式になっているのは1月ですと前年から始まるからです。
2.セルA3に計算式を設定します。
=A2+1
3.セルA3をセルA29までコピーします。
4.月によって、日数が異なり、締め末の21日以降が表示されないようにセルA30に計算式を設定します。
=IF(ISERROR(DAY(A29))=FALSE,IF(DAY(A29)>19,"",A29+1),"")
5.セルA30をセルA32までコピーします。
6.セルB2に計算式を設定します。
=A2
7.セルB2をセルB32までコピーします。
8.A列とB列には西暦を含む同じ内容が表示されているかと思います。これを書式設定で表示内容の変更を行います。
9.A列の書式変更
対象となる複数のセルをマウス操作で選択しても構いませんが、それに慣れていない場合は
セルA2をクリックして、Shiftキーを押したままでキーボードの下矢印キーでA32まで移動させます。
そして、メニューの書式=>セルの表示形式で日付を選んで月と日だけの表示を選択して下さい。
10.B列の書式変更
A列と同様の手順で対象セルを選択します。
そして、メニューの書式=>セルの表示形式でユーザ定義を選択して種類にaaaと入力して下さい。
これで曜日だけの表示になるかと思います。

最後にエクセルではセルのコピーを行った時には計算式の参照しているセル名が自動的に修正されて便利ではあるが、修正して欲しくない場合があります。
その場合は絶対参照という方法を使用します。それはセルA1ですと$A$1とすれば絶対参照になります。
なお、この$は列または行だけを対象にすることも出来ます。例えば、$A1とすればAが固定で1が自動修正になります。

質問した人からのコメント

2013/7/24 12:38:30

笑う 早速のご回答ありがとうございます。大変わかりやすく、すぐ帳票が完成しました。本当に助かりました。感謝!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

ja7awuさん

編集あり2013/7/2408:20:26

VBAで処理したい ということで宜しいのでしょうか。

それなら、こんな感じで如何でしょうか。
使用しているシートのモジュールに記述します。

一応、その手順を書いておきますので、テストしてみてください。

・使用しているシートのシート名タブを右クリックして「コードの表示」を指定します。
・開いたコードウィンドウに下記コードをコピーして貼り付けます。
・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
・メニューから[ツール]-->[マクロ]-->[セキュリティ]で 「セキュリティレベル」を
   「中」に設定します。(Excel 2003)
   [Office]ボタン-->[セキュリティセンタ]-->「マクロの設定」で
   「警告を表示してすべてのマクロを無効」に設定します。(Excel 2007~)
・以上で設定完了です。

これで、A1に「年」、B1に「月」を入力してみてください。

年月と認識出来ない内容を入力すると、カレンダーは、消去されます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TgRng As Range
Dim CntD As Integer
Dim StrDate As String
Set TgRng = Intersect(Range("A1:B1"), Target)
If Not TgRng Is Nothing Then
    StrDate = Range("A1").Text & "/" & Range("B1").Text & "/21"
    Application.EnableEvents = False
    Range("A2:B35").ClearContents
    If IsDate(StrDate) Then
        Range("A2:B2").Value = DateAdd("m", -1, DateValue(StrDate))
        CntD = DateDiff("d", Range("A2").Value, DateValue(StrDate) - 1) + 1
        With Range("A2:B2")
            .AutoFill Destination:=.Resize(CntD), Type:=xlFillDays
            .Resize(CntD, 1).NumberFormatLocal = "m月d日"
            .Cells(2).Resize(CntD).NumberFormatLocal = "aaa"
            .Offset(-1).Interior.ColorIndex = 35
            .Offset(-1).Borders.LineStyle = xlContinuous
        End With
    End If
    Application.EnableEvents = True
End If
Set TgRng = Nothing
End Sub

hi5108さん

2013/7/2407:26:11

1.セル[A2] に計算式 "=DATE(A$1,B$1-1,21)" を設定する。
2.セル[A3] に計算式 "=IF(A2="","",IF(DAY(A$2)=DAY(A2+1),"",A2+1))" を設定する。
3.セル[A3] をセル[A4]から[A32] までコピーする。
4.セル[B2] に計算式 "=IF(A2="","",MID("日月火水木金土",WEEKDAY(A2),1))" を設定する。
5.セル[B2] をセル[B3]から[B32] までコピーする。
6.適当に書式を設定する。

※日付がA列、曜日がB列だと思って書いています。違ったらずらしてください。
※冒頭の年月も年がA1、月がB1としています。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

5文字以上入力してください

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。