Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3609 / 13644 ツリー ←次へ | 前へ→

【60881】UserFormで対象日が日曜であればその日を赤色にする Porta 09/3/19(木) 20:52 質問[未読]
【60882】Re:UserFormで対象日が日曜であればその日... kanabun 09/3/19(木) 22:48 発言[未読]
【60889】Re:UserFormで対象日が日曜であればその日... Porta 09/3/20(金) 21:20 質問[未読]
【60892】Re:UserFormで対象日が日曜であればその日... kanabun 09/3/20(金) 22:34 発言[未読]
【60898】Re:UserFormで対象日が日曜であればその日... Porta 09/3/22(日) 13:54 お礼[未読]
【61166】Re:UserFormで対象日が日曜であればその日... Porta 09/4/14(火) 6:58 質問[未読]
【61167】Re:UserFormで対象日が日曜であればその日... kanabun 09/4/14(火) 8:35 発言[未読]

【60881】UserFormで対象日が日曜であればその日を...
質問  Porta  - 09/3/19(木) 20:52 -

引用なし
パスワード
   今晩は…
日にちの検索を、以前に聞かせていただき貴重な回答をいただきました。
その後その検索をUserFormのスピンボタンで、また作成しています。
つまりスピンボタンで年・月・日を指定して、その対象日にジャンプさせる
という方法です。
年月日はA列の6行目(2009.03.01)から向こう8年分まで検索させています。
このような状態で、日にちが日曜日であればその日にちの数字を赤にしたいのですが、weekday関数を使って色替えを考えたのですが、日曜日がずれてしまいます。
対応方法をよろしくお願いします。コードは次の通りです。

Private Sub CommandButton1_Click()
 Dim dt As Date
 Dim r As Range
 Dim c As Range
 Dim ch
  ch = DateSerial(Label1, Label2, Label3)
 Set r = Range("A1", Cells(Rows.Count, "A").End(xlUp))
 Set c = r.Find(ch, Range("a1"), _
     xlFormulas, xlWhole, , xlPrevious)
 If Not c Is Nothing Then
  c.Activate
  MsgBox ch & " 日へジャンプしました", , "セル位置は" & c.Address(0, 0)
 Else
  MsgBox "その年月日はありません", vbExclamation
 End If
End Sub

Private Sub UserForm_Initialize()
Dim sund As Integer
With Me
  With .SpinButton1   '年
   .Max = Year(Date) + 8
   .Min = Year(Date)
  Label1 = Year(Date)
  End With
  With .SpinButton2   '月
   .Max = 12
   .Min = 1
  Label2 = Month(Date)
  End With
  With .SpinButton3   '日
   .Min = 1
   .Max = Day(DateSerial(Year(Date), Month(Date) + 1, 1 - 1))
  Label3 = Day(Date)  
  End With
    .Label4.Caption = "年"
    .Label5.Caption = "月"
    .Label6.Caption = "日"
End With
End Sub

Private Sub SpinButton1_Change()  
  Me.Label1 = Me.SpinButton1.Value
End Sub

Private Sub SpinButton2_Change()  
  Me.Label2 = Me.SpinButton2.Value
  Me.Label3 = Day(DateSerial(Label1, Label2 + 1, 1 - 1))
End Sub

Private Sub SpinButton3_Change()  
  Dim n As Integer
  Me.Label3 = Me.SpinButton3.Value
  With Me
   With .SpinButton3
    .Max = Day(DateSerial(Label1, Label2 + 1, 1 - 1))
   End With
  End With
   n = Weekday(DateSerial(Year(Label1), Month(Label2), Day(Label3)))
    If n <> 1 Then
     Me.Label3.ForeColor = RGB(0, 0, 0)
    Else
     Me.Label3.ForeColor = RGB(255, 0, 0)
    End If    
End Sub

'nの変数が当月ですと木曜日ですが4になり1ずれます、それだけでなく
'2年後の日にちでは更にずれるのですが、何故でしょうか。
'理由がわかりません。アドバイスお願いします。

【60882】Re:UserFormで対象日が日曜であればその...
発言  kanabun  - 09/3/19(木) 22:48 -

引用なし
パスワード
   ▼Porta さん:
>が、weekday関数を使って色替えを考えたのですが、日曜日がずれてしまいます。

>'nの変数が当月ですと木曜日ですが4になり1ずれます、それだけでなく
>'2年後の日にちでは更にずれるのですが、何故でしょうか。
>'理由がわかりません。

>   n = Weekday(DateSerial(Year(Label1), Month(Label2), Day(Label3)))

↑ここだけ 日付の求め方が おかしいです。

  他でやってるように、DateSerial(Label1, Label2, Label3)
 で求めた日付に対し、Weekday関数を適用してください。

【60889】Re:UserFormで対象日が日曜であればその...
質問  Porta  - 09/3/20(金) 21:20 -

引用なし
パスワード
   ▼kanabun さん:

いつも有難うございます。
お陰さまで正しく、動作して、自動的に日曜日が赤文字に変更できました。

あと、また疑問だが出てきたのですが・・・…、
最初に表示される日にちは今日の年月日ですが、

例えば月のスピンを▽で1にしたくても出来ず、先ず△を使い2に
変更して▽で1にスピンしなくてはなりませんが…

▽を押せば減数、△は増数という単純な動きは
今のコードの一部変更では出来ないものでしょうか。

もし、時間がございましたらご指導・アドバイスお願いします。

【60892】Re:UserFormで対象日が日曜であればその...
発言  kanabun  - 09/3/20(金) 22:34 -

引用なし
パスワード
   ▼Porta さん:

>最初に表示される日にちは今日の年月日ですが、
>
>例えば月のスピンを▽で1にしたくても出来ず、先ず△を使い2に
>変更して▽で1にスピンしなくてはなりませんが…
>
>▽を押せば減数、△は増数という単純な動きは
>今のコードの一部変更では出来ないものでしょうか。

思いっきり方法を変更してみました。

SpinButtonのイベントは Changeイベントでなく、
SpinUp, SpinDown イベントを使います。

モジュールレベルの変数 myDateに変更後の日付を格納して、
 年用 SpinButtonが押されたら、 myDate = DateAdd("yyyy",±1, myDate)
 月用 SpinButtonが押されたら、 myDate = DateAdd("m", ±1, myDate)
 日用 SpinButtonが押されたら、 myDate = DateAdd("d", ±1, myDate)
という方式で、日付を変更しています。

'----------------------------------------  UserForm2
Option Explicit

Private MaxDate As Date
Private myDate As Date

Private Sub UserForm_Initialize()
 myDate = Date
 MaxDate = DateAdd("yyyy", 8, myDate)
 SetDate
 Label4.Caption = "年"
 Label5.Caption = "月"
 Label6.Caption = "日"
End Sub

Private Sub SetDate()
 Dim n As Integer
 Dim colr As Long
  If myDate > MaxDate Then Beep: myDate = MaxDate
  Label1.Caption = Year(myDate)
  Label2.Caption = Month(myDate)
  Label3.Caption = Day(myDate)
  
  n = Weekday(myDate)
  If n = 1 Then colr = vbRed Else colr = vbBlack
  Label3.ForeColor = colr
End Sub


Private Sub SpinButton1_SpinDown()
 myDate = DateAdd("yyyy", 1, myDate)
 SetDate
End Sub

Private Sub SpinButton1_SpinUp()
 myDate = DateAdd("yyyy", -1, myDate)
 SetDate
End Sub

Private Sub SpinButton2_SpinDown()
 myDate = DateAdd("m", 1, myDate)
 SetDate
End Sub

Private Sub SpinButton2_SpinUp()
 myDate = DateAdd("m", -1, myDate)
 SetDate
End Sub

Private Sub SpinButton3_SpinDown()
 myDate = DateAdd("d", 1, myDate)
 SetDate
End Sub

Private Sub SpinButton3_SpinUp()
 myDate = DateAdd("d", -1, myDate)
 SetDate
End Sub

Private Sub CommandButton1_Click()
 Dim r As Range
 Dim c As Range
 Dim m
 
 '      [A6]セルに先頭日付
 Set r = Range("A6", Cells(Rows.Count, "A").End(xlUp))
 m = Application.Match(CLng(myDate), r, 1)
 Set c = r.Item(m, 1)
 If c.Value = myDate Then
  c.Activate
  MsgBox myDate & " 日へジャンプしました", , "セル位置は" & c.Address(0, 0)
 Else
  MsgBox "その年月日はありません", vbExclamation
 End If
End Sub

【60898】Re:UserFormで対象日が日曜であればその...
お礼  Porta  - 09/3/22(日) 13:54 -

引用なし
パスワード
   ▼kanabun さん:

有難うございました。

気分が晴れました。大事に活用させていただきます。
コードも非常に鮮明という感じで、非常に勉強になりました。
スピンボタンの使い方をこれからも認識を深めたいと思います。

今後ともよろしくお願いします。

【61166】Re:UserFormで対象日が日曜であればその...
質問  Porta  - 09/4/14(火) 6:58 -

引用なし
パスワード
   ▼kanabun さん:
今頃になって、また質問が出てきました。
XPProfetional
で問題なく動作していましたが
それ以下のバージョンでは

Private Sub UserForm_Initialize()
 UserForm1.Caption = "年月日検索"
 myDate = Date
 MaxDate = DateAdd("yyyy", 10, myDate)
 MinDate = DateSerial(2009, 3, 1)
 SetDate
 Label4.Caption = "年"
 Label5.Caption = "月"
 Label6.Caption = "日"
のmyDate=Dateのところでエラーが発生します。

Private myDate As Date
の宣言と絡んでしまうのか?っと思ったりしていますが
如何でしょう?アドバイスお願いします。

【61167】Re:UserFormで対象日が日曜であればその...
発言  kanabun  - 09/4/14(火) 8:35 -

引用なし
パスワード
   ▼Porta さん:

>今頃になって、また質問が出てきました。
>XPProfetional
>で問題なく動作していましたが
>それ以下のバージョンでは

>のmyDate=Dateのところでエラーが発生します。
>
>Private myDate As Date
>の宣言と絡んでしまうのか?っと思ったりしていますが

こちらでは XL2000でも、XL2002でも、何のエラーも出ません。
エラーの内容は?

それと、バージョンや環境のちがいによってアプリケーションの定義エラーや
VBA組み込み関数でエラーが出る場合は、一般的に、
VBEの[ツール]-[参照設定]のリストの中に、
参照不可 になっている項目がないかをチェックしてください。

関連して、
Excelのメニュー[ヘルプ]-[バージョン情報]のなかに[使用できないアイテム...]
というボタンがあれば、そのボタンをクリックして「使用できないアイテム」
がないか? も確認しておいてください。

3609 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free