[[20091224142043]] 『カレンダー作成…休みの日の表示を変えたい』(かね) ページの最後に飛ぶ

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

 

『カレンダー作成…休みの日の表示を変えたい』(かね)
 職場の年間カレンダーを作成しています。
 A1セルに月を手入力し、2行目に日〜土曜日を表示して日付は
 「=IF(MONTH($A$1)<>MONTH($A$1-WEEKDAY($A$1)+COLUMN(A1)+7*(ROW(A1)-1)),"",
 $A$1-WEEKDAY($A$1)+COLUMN(A1)+7*(ROW(A1)-1))」という式を使っています。

 質問ですが、仕事が休みの日を「○で囲む」ことはできないでしょうか。
 休日は基本的に土日祝日で、祝日は別シートに一覧を作成しました。
 条件付書式で色付けはできるのですが、○で囲むように指示されたもので(^_^;)
 オートシェイプで1つずつ…はちょっとどうかな〜と思い、知恵をお貸しいただければ幸いです。


 こちらが参考になるかもしれません。
[[20091208144739]] 『図の簡単挿入の方法』(F)
 
しかし、
>A1セルに月を手入力し、
は書き間違いでは?
(みやほりん)(-_∂)b


 (みやほりん)(-_∂)bさんへ

 ご回答ありがとうございます。 
 上記の式を少し直しました。
 よろしくお願いします。

 ご提示いただいた質問を参考にしてみました。
 ですが、マクロを扱えないのでコピペで試したところ、○が囲むのは
 「日」「土」と記載されたの曜日欄(2行目)で、数字は変化なく…という結果になりました。
 日付部分を○で囲むには他にどちらを変更すればよいのかわからず…すみません。

 入力規則を使ったやり方は、日付に条件書式で使用した関数を入れたのですが、
 エラーになってしまいました↓
   入力値の種類「日付」
   データ「次の値に等しい」
   日付「=OR(WEEKDAY(A3)=1,WEEKDAY(A3)=7,ISNUMBER(MATCH(A3,祝日,0)))」

 マクロはそのままコピペしました↓

 Private Sub Workbook_Open()
     With Worksheets("Sheet1")
         .ClearCircles
         .CircleInvalid
     End With
 End Sub

 間違っている部分がどこかもわかりません。。。
 ご指導よろしくお願いします。

 (かね)


 [[20071114041820]] のダブルクリックでの方法は「セルの値が」土日祝日等
の文字列でないとうまくいきません。細かく凝り出すときりがないので、
避けて通ることをお許しください。
 
入力規則での方法を解説します。
A3の数式を次のようにしフィルコピー。
=IF(MONTH($A$1)<>MONTH($A$1-WEEKDAY($A$1)+COLUMN(A1)+7*(ROW(A1)-1)),0,
 $A$1-WEEKDAY($A$1)+COLUMN(A1)+7*(ROW(A1)-1))
 
次に、ツール>オプションの表示設定でゼロ値非表示にするか、日付表示セルで
表示形式の書式設定のユーザー定義で「m/d;;;」のようにして、0が表示されな
いようにします。
 
さらに、入力規則ですが、次のようにします。
データの種類[ユーザー定義]
数式    [=OR(AND(WEEKDAY(A3)<>1,WEEKDAY(A3)<>7,COUNTIF(祝日,A3)=0),LEN(A3)=0,A3=0)]
 
最後にツール>ワークシート分析>ワークシート分析ツールバーを表示する
で、分析ツールバーを出して、[無効データのマーク]ボタンを押します。
 
この方法、発案者の性格に似て非常に天邪鬼的な設定でして、
入力規則で「土日祝日以外の日付を入力可能に設定」し、入力規則に
反するデータ、すなわち、「土日祝日以外でない=土日祝日である」日付に
マークするものです。
 
[かね]さんが行った設定では、
A3の「日付(または"")」と、数式「=OR(WEEKDAY(A3)=1,WEEKDAY(A3)=7,ISNUMBER(MATCH(A3,祝日,0)))」
を比較するものとなってしまうので、意図したとおりにはなりません。
この数式はTRUE、FALSE、エラーが返り、これらと同じ「日付」のみ入力できる、
という設定となっていますね。
 
入力規則や条件付書式に設定する数式は、いきなりダイアログに入力してしまうと
結果がわかりにくいので、一時的に作業範囲に数式を入力してみて、
TRUEやFALSEの結果が思い通りに返るか試験してみるのがコツです。
(今回の場合だと、入力規則に設定する数式をA11あたりから入力して計算結果を見る)
 
(みやほりん)(-_∂)b

 みやほりん さんへ

 ご提示いただいた方法を試したところ、赤○で囲むことができました!
 ありがとうございます。

 調子に乗って…
 ○の大きさ・色を変更するなど、少し手を加えたい場合はどのようにしたらよいでしょうか。

 また、印刷プレビューで見ると○が表示されないのですが、印刷できるようにする方法も教えていただければと思います。

 よろしくお願いしますm(_ _)m

 (かね)


 私が紹介したログには次のように書いてあるはずですよね?
 
>・○をつける判断材料が入力規則で判断できるものである
>・入力内容にかかわらず、セル枠いっぱいの円を描く
>・印刷されなくてもよい
>という制限を甘受できるなら
 
好みのものを自由に作りたいのなら、オートシェイプを自動的に
配置、移動、削除するようなマクロを作る必要がありますが、
私はパスさせていただきます。
選択肢はいくつかありますが、
1.このまま誰かがマクロを作ってくれるまで待つ。
2.「今の私には無理です」と勇気を持って言う。
 2-1「ですが1年間マクロを勉強させてくださればできます」と言う。
 2-2 外注するよう、進言する。
 2-3 妥協して条件付書式のままでおく。
 2-4 妥協して試した方法までにしておく。
(みやほりん)(-_∂)b

 なんとなく気が向いたので
>1.このまま誰かがマクロを作ってくれるまで待つ。
叩き台として以下のようなものを置いておきます。
 
使い方:
カレンダーの日が表示されているセルを範囲選択した上で実行すると、
文字色が赤、青のセルに丸の図形を配置します。
選択範囲内に含まれるShapeはザックリ消してしまうので注意。
 
Option Explicit
Sub 選択範囲の土日セルに丸を配置()
    Dim r As Range
    Dim s As Shape
    Dim TargetSheet As Worksheet
    Dim markLeft As Single
    Dim markTop As Single
    Dim markSize As Single
    Set TargetSheet = Selection.Parent
    For Each s In TargetSheet.Shapes
        If Not Application.Intersect(s.TopLeftCell, Selection) Is Nothing Then
            s.Delete
        End If
    Next
    For Each r In Selection
        If r.Value = "" Then
            GoTo NEXT_RANGE
        End If
        Select Case r.Characters.Font.ColorIndex
            Case 3, 5 '赤、青の場合
                If r.Width > r.Height Then
                    markSize = r.Height
                    'markLeft = r.Left '左寄せ
                    'markLeft = r.Left + (r.Width / 2) - (markSize / 2) '中央寄せ
                    markLeft = r.Left + r.Width - markSize '右寄せ
                    markTop = r.Top
                Else
                    markSize = r.Width
                    markLeft = r.Left
                    'markTop = r.Top '上寄せ
                    markTop = r.Top + (r.Height / 2) - (markSize / 2) '中央寄せ
                    markTop = r.Top + r.Height - markSize '下寄せ
                End If
                With TargetSheet.Shapes.AddShape(msoShapeOval, markLeft, markTop, markSize, markSize)
                    .Fill.Visible = msoFalse
                End With
            Case Else
        End Select
NEXT_RANGE:
    Next
End Sub
 
微調整とか面倒そうだからこれ以上は手を入れないかも。
使う人が適当にいじって調整が必要かな?と。なので叩き台。
 
2010/01/19 15:48 変数の意味と中身が違ってたので修正。
(ご近所PG)

コメント返信:

[ 一覧(最新更新順) ]


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