[[20081209102349]] 『土日祝日抜きの表を作成』(ca) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『土日祝日抜きの表を作成』(ca)

 08年12月
     A   B   C   D   E   F   G    H   I  〜・・・
 1      1日 2日 3日 4日 5日 合計 6日 7日 〜・・・
 2 ○県  3   4   3   4   1   13   2   3  〜・・・
 3 ○県  2   1   4   2   1   10   2   3  〜・・・
 4 ○県  3   2   1   3   1   10   2   3  〜・・・
 5 ○県  5   4   3   2   1   15   2   3  〜・・・
 6 合計  13  11  11  11  4   48   2   3  〜・・・

 上記のような表を利用して、一週間毎に集計を取ってるのですが
 数県毎に1ブックづつ分かれている為に
 毎月毎日、日付を付けて作成するのが大変になってきました。

 その為、日付だけはエクセルのカレンダーのように
 月だけ入力すれば関数で自動入力出来ませんでしょうか?

 後、カレンダーとは違い土日祝日は、無くし合計欄を作成できるでしょうか?

 環境は、XPのエクセル2003です。
 マクロは、自動入力とネット上からコピペしてイジるくらいです。

 カレンダーの質問は多くあります。
全文検索で探してみてください。
[[20031018171450]]
など参考になるものは多いと思います。
(bbq)

 すいません。質問が悪かったようです。
 タイトルを変更致しました。

 正確には表を作成したいのですが、日付入力を関数かマクロで自動にし
 その上で土日祝日は、入力しない形にしたいのです。

 また、週毎に集計(合計)の欄を挿入したいのです。

 そういった事は可能でしょうか?
 (ca)

 貼り付けたリンクが不適切でした。
検索すると色々参考になるスレッドはあります。
[[20030613134733]]
(bbq)

 そのシートの\Sheet1/を右クリック→コードの表示
 下のコードをコピペ

 戻ってA1に2008年12月などと書き込んでみませう。
 どうでっか、こんな塩梅で?
      (弥太郎)
 '----------------
 Option Explicit
 Option Base 1
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer, n As Integer, p_data As Date, data, ary, ary08
    Dim t As Integer, ary_data, ary09, x()
    With Target
        If .Address(0, 0) <> "A1" Then Exit Sub
        If .Count > 1 Then Exit Sub
        Application.EnableEvents = False
        ary08 = Array("1/1", "1/14", "2/11", "3/20", "4/29", "5/5", "5/6", "7/21", "9/15", _
                "9/23", "10/13", "11/3", "11/24", "12/23")
        ary09 = Array("1/1", "1/12", "2/11", "3/20", "4/29", "5/4", "5/5", "5/6", "7/20", "9/21", _
                "9/22", "9/23", "10/12", "11/3", "11/23", "12/23")
        data = StrConv(Replace(.Value, "年", "/"), vbNarrow)
        ary = Array(31, IIf(Year(data) Mod 4 = 0, 29, 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        Range("b1").Resize(, 31).ClearContents
        ary_data = IIf(Format(data, "yy") = "08", ary08, ary09)
        For n = 1 To ary(Month(data))
            p_data = Format(data, "yyyy/m") & "/" & n
            If IsError(Application.Match(Format(p_data, "m/d"), ary_data, 0)) And _
                Format(p_data, "aaa") <> "日" Then
                t = t + 1
                ReDim Preserve x(1 To t)
                x(t) = p_data
                If Format(x(t), "aaa") = "土" Then
                    x(t) = "合計"
                    t = IIf(n = 1, t - 1, t)
                End If
            End If
            If n > 1 Then
            If n = ary(Month(data)) And x(t) <> "合計" Then
                t = t + 1
                ReDim Preserve x(1 To t)
                x(t) = "合計"
            End If
            End If
        Next n
        Cells(1, 2).Resize(, t).NumberFormatLocal = "d日"
        Cells(1, 2).Resize(, t) = x
    End With
    Application.EnableEvents = True
 End Sub

 bbq様、何度もお返事ありがとうございます!
 悩んでいるところへの参考は大変助かります!

 弥太郎様、うまく動きました!
 ありがとうございます!

 何度か試してみたところ 土曜が1日の月は
 「インデックスが有効範囲にありません。」とエラーになってしまいますが
  どのように直せばいいでしょうか?

 頂いたお答えにわがままを言ってすいません。

 デバックを押すと
 If n = ary(Month(data)) And x(t) <> "合計" Then
 の部分が黄色くなっています。

 (ca)

 遅くなってすびません。出かけておりました。
 えと、n>1をn>20とでもしておけばエラーは出まへんワ。
     (弥太郎)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.