教えて!gooグレードポイントがdポイントに!

(1)エクセルで7月31日分のシートをつくり、今年のカレンダーどおりの日付・曜日を(各シートのA1セルに、いちいち入力するのではなく)一括で各シートのA1セルに表示できる方法があれば、教えて下さい。

(2)エクセルで昨年7月の平日の数だけシートがあるファイルがあります。各シートのA1セルには、「平成19年7月○日(○曜日)」と入力されています。
このファイルを、今年の7月の平日カレンダーに一括置換するには、どうすればいいでしょうか?
昨年と今年は平日の日付はもちろん、同じ日でも曜日が違いますので、各シートを開き、いちいち日付・曜日を直さなければいけないのでしょうか。教えて下さい。宜しくお願いします。

教えて!goo グレード

A 回答 (3件)

(1)31枚のシートに1日づつずらした日付を入れる方法


VBAで無いと出来ないでしょう。下記のように簡単。
シートの名前がシート1,シート2・・などで、そのシート名の1や2・・に頼る方法もありますが、変えられるとだめになるので、やめておいたほうがよいでしょう。
シートが別になると連続データの作成や関数式の複写が働かなくなるので難しいのです。
Sub test02()
For i = 1 To 4
Sheets(i).Range("a1") = #6/30/2008# + i
Sheets(i).Range("a1").NumberFormat = "yyyy/mm/dd(aaa)"
Next i
End Sub
ただし日付を入れるシートは31枚がシート名のタブ位置的に固まっていること、他のシートが混じってないこと。が条件です。
私はシートが4枚しかないので、4でテストしたが
For i = 1 To 31
で、シートを31枚用意してやってください。
(2)今年の日付で置き換え
ただし去年のシートは平日枚数分がシート名のタブ位置的に固まっていること、他のデータ性格のシートが混じってないこと。という前提で
(1)上記のプログラムの中で、WEEKDAY関数で土日を判別し
(海の日が規則を乱すが特別に判別して飛ばす)土日は飛ばして次のシート(.Nextシート)に順順に日付をセットしていけば簡単。
Sub test03()
Sheets(1).Select
For i = #7/1/2008# To #7/4/2008#
If Weekday(i) = 1 Or Weekday(i) = 7 Or i = #7/21/2008# Then
Else
MsgBox Format(i, "yyyy/mm/dd(aaa)")
ActiveSheet.Range("A1") = Format(i, "yyyy/mm/dd(aaa)")
ActiveSheet.Next.Activate
End If
Next i
End Sub
ただし今年平日数より、1シートだけ最後の次に余分にシートを作っておいて実行してください。
祝日・会社休業日等を年間で一般化するのはコードが複雑になる。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参考にさせていただきます。

お礼日時:2008/07/20 07:27

#1のレスは、


(2)
に対するものです。

(1)
に関しては、VBAで行行うことになると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参考にさせていただきます。

お礼日時:2008/07/20 07:26

「置換」でオプションの検索場所を「ブック」にして、


検索する文字列:2007
置換後の文字列:2008
としてはいかがでしょう?
    • good
    • 1

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

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

教えて!goo グレード

人気Q&Aランキング