- ベストアンサー
エクセルのシート毎に日付
業務日報を作成しています。 1シート1日なので、1ヶ月30シート~31シートあります。 1ヶ月1ファイルです。 この全シートのA1に日付を入れたいのですが、毎日入力するとも 限らないので、最初から 2008年8月1日(金)のような日付を 入力したいのです。 その場合、1日分を入力したら2日以降31日まで入力になるような 方法はないでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
次の方法は如何でしょうか。 (1)シートは名は、1~31とします。 (2)シート2~31までを選択→A1に=DATE(YEAR(Sheet1!$A$1),MONTH(Sheet1!$A$1),MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,2))を入力 (3)シート1を選択、A1に日付を入力 因みに小の月の場合、シート31は「翌月の一日」になります。
その他の回答 (5)
- fujillin
- ベストアンサー率61% (1594/2576)
式をコピーしたり31シートを作成したりするのも面倒なので、1シートだけ作成すればコピーまで行うマクロにしてしまいました。 (できあがるシート名を1~31としています。) 準備:下のマクロをマクロのモジュールにコピペ (投稿の都合上でインデントを全角ブランクにしています) 1)シートのフォーマットの雛型となるものを作成し、シート名は1(英数字の1)として、他にシートが無い状態にしておく。 2)この状態のものを雛型のブックとして保存 [ ある1ヶ月分を作成するとき ] 1)雛型のブック(上のブック)のコピーを作成 2)シート1のA1に日付を入力する(日にち形式のものならOK 例:08/8/1) 3)セットしておいた、マクロを実行。 注)マクロは原型のみなので、入力された値(日にち)のチェックや、シート名が正しいかなどのチェックは一切行っていません。 (実際に使用するには、この辺のチェックを入れておかないと、誤操作の時にエラーが出ます) ------------------------------------------ Option Explicit Dim s1 As Worksheet, s2 As Worksheet Dim d_date As Date Dim m_str As String, d_str As String, w As String Dim d As Integer Const L_week = "日月火水木金土" Sub BookSet() Set s1 = Sheets("1") d_date = s1.Cells(1, 1).Value m_str = Str(Format(d_date, "yyyy")) & "年" & Str(Format(d_date, "m")) & "月" d = 1 d_str = m_str & Str(d) & "日" While IsDate(d_str) If (d = 1) Then Set s2 = s1 Else s1.Copy after:=Worksheets(Worksheets.Count) Set s2 = ActiveSheet s2.Name = Str(d) End If With s2.Cells(1, 1) .NumberFormatLocal = "@" .HorizontalAlignment = xlLeft .Value = d_str & "(" & Mid(L_week, Weekday(d_str), 1) & ")" End With d = d + 1 d_str = m_str & Str(d) & "日" Wend s1.Activate End Sub
お礼
ありがとうございます! 私はマクロがわからないので・・・勉強してみます!
- mu2011
- ベストアンサー率38% (1910/4994)
NO4です。 軽率でした。 以下の訂正版をお試し下さい。 =DATE(YEAR(1!$A$1),MONTH(1!$A$1),MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,2))として下さい。
お礼
今度は貼り付けてすぐに、A1に「#VALUE!」と表示され、その後シート1に日付を入力しても変化なしです。 なにか、私のやり方がマズイのかも知れません。
- mu2011
- ベストアンサー率38% (1910/4994)
NO3です。 以下の手順でお試し下さい。 (1)シート名を1~31に設定 (2)シートタグの2をクリック→shiftキーを押しながらシートタブの31をクリック(シート2~シート31が選択された状態になる) (3)シート2のA1に関数を入力(シート2~シート31のA1に関数が入力される) (4)シートタブ1をクリック→A1に日付を入力
お礼
ご親切にありがとうございます! おっしゃる通りにしてみたのですが・・・ (3)シート2のA1・・・というところで、mu2011さんが教えてくださったものをコピーして貼り付けたのですが(これが悪いのかな?) 貼り付けると「値の更新:Sheet1」というのが出ます。 ここで何かを選択するのですか?それが出ている時はシート2のA1には「1900/1/0」と表示されています。 その「値の更新」というのをキャンセルするとA1には「#REF!」と表示されます。 よろしくお願いします!
- mu2011
- ベストアンサー率38% (1910/4994)
NO1です。 >2008/8/1と入力すると2008年8月1日のように変換されるとダメですか? ⇒内部シリアル値(200/8/1ならば表示形式を標準で39661)ならば特に問題ありません。 因みに各シートA1セルの書式設定をユーザ定義でyyyy"年"m"月"d"日"(aaa)とされると想定しています。
お礼
んー・・・ウマク行きません。 もう少し頑張ってみます!
- dghjty145
- ベストアンサー率46% (42/90)
まずはじめに1日のシートのA1に日付を入力。表示形式を調整。 次に2日のシートのA1のデータを張り付ける。そのままの状態で、「形式を選択して貼り付け」を選択し、「リンク貼り付け」を選択。そのままの状態で、F2ボタンを押して、Sheet1!$A$1のうしろに半角で+1と入力。 3日のシートのA1に2日のシートのA1を張り付ける。F2ボタンを 押して+1を+2に修正。 以降は31日まで足す数字を1つずつ増やしながら、3日のシートの 手順を繰り返す。
お礼
ありがとうございます! これならウマク行きそうですが、1年分あるので作業が大変ですね。
お礼
早速ありがとうございます! やってみたのですがうまくいきません。 (3)の日付を入力というのはどのような方法で入力するのでしょうか?2008/8/1と入力すると2008年8月1日のように変換されるとダメですか?