• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セル空白時に月を変更した時の累計使用日数VBA)

セル空白時に月を変更した時の累計使用日数VBA

このQ&Aのポイント
  • Excel VBA初心者の質問です。B9~B39のセルに数字を入力すると、連続データが表示されるVBAを作成していますが、C1セルの年月を変更した際に連続データが表示されない問題が発生しています。どこが間違っているのでしょうか?
  • エクセルのVBA初心者の質問です。B9~B39に数字を入力すると、連続データが表示されるVBAを作成しましたが、C1セルの年月を変更しても連続データが表示されない問題が起きています。どうすれば正しく動作するようになるでしょうか?
  • Excel VBAの初心者です。B9~B39のセルに数字を入力すると、連続データが表示されるVBAを作成していますが、C1セルの年月を変更しても連続データが表示されない問題が発生しています。どのように修正すれば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No,1です。 具体的に何がしたいのかまだ見えてきませんが・・・ とりあえずA・B列とC1セルだけのChangeイベントにしています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, myNum As Long, myMax As Long Dim myFlg As Boolean '←追加 If Intersect(Target, Range("C1,B9:B39")) Is Nothing Or Target.Count > 1 Then Exit Sub '最初にA列とB列の最終行の違いを取得しておく If Cells(Rows.Count, "A").End(xlUp).Row > Cells(Rows.Count, "B").End(xlUp).Row Then myFlg = True '←「TRUE」の場合はB列消去あり End If Application.EnableEvents = False If IsDate(Range("C1")) Then myMax = Day(DateSerial(Year(Range("C1")), Month(Range("C1")) + 1, 1) - 1) End If With Target If .Column = 3 Then Range("A9:A39").ClearContents For i = 1 To myMax Cells(i + 8, "A") = i Next i If myFlg = False Then '←「FALSE」(B列消去なし)の場合は・・・ myNum = Cells(40, "B").End(xlUp) Range("B9:B39").ClearContents For i = 1 To myMax Cells(i + 8, "B") = myNum + i Next i Else '「TRUE」(B列消去あり)の場合は・・・ Range("B9:B39").ClearContents End If Else k = .Row If .Value = "" Then Range(Cells(k, "B"), Cells(39, "B")).ClearContents ElseIf .Value = 0 Then Range(Cells(k + 1, "B"), Cells(myMax + 8, "B")) = 0 Else For i = k + 1 To myMax + 8 Cells(i, "B") = Cells(i - 1, "B") + 1 Next i End If End If End With Application.EnableEvents = True End Sub こんな感じをご希望だったのでしょうか?m(_ _)m

noname#247334
質問者

お礼

これです!!この形です。 感動しました、そして非常に参考になりました。 これからも勉強し、色々なパターンのVBAが組める様に精進します。 この度はありがとうございました。

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! http://okwave.jp/qa/q8375703.html ↑に関連した質問ですかね? お示しのコードを詳しくみていませんが、おそらくA列にC1セルの月の日付を1~月末まで表示させたいものだと解釈して・・・ 上記URLのコードに少し手を加えているだけです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, myNum As Long, myMax As Long If Intersect(Target, Range("C1,B9:B39,R9:R39")) Is Nothing Or Target.Count > 1 Then Exit Sub Application.EnableEvents = False If IsDate(Range("C1")) Then myMax = Day(DateSerial(Year(Range("C1")), Month(Range("C1")) + 1, 1) - 1) End If With Target Select Case .Column Case 3 Range("A9:A39").ClearContents For i = 1 To myMax Cells(i + 8, "A") = i Next i myNum = Cells(40, "B").End(xlUp) Range("B9:B39").ClearContents For i = 1 To myMax Cells(i + 8, "B") = myNum + i Next i Case 2 k = .Row If .Value = "" Then Range(Cells(k, "B"), Cells(39, "B")).ClearContents ElseIf .Value = 0 Then Range(Cells(k + 1, "B"), Cells(myMax + 8, "B")) = 0 Else For i = k + 1 To myMax + 8 Cells(i, "B") = Cells(i - 1, "B") + 1 Next i End If Case Else k = .Row Range(Cells(k + 1, "R"), Cells(39, "R")).ClearContents Range(Cells(k + 1, "R"), Cells(myMax + 8, "R")) = .Value End Select End With Application.EnableEvents = True End Sub こういった感じをご希望だったのでしょうか?m(_ _)m

noname#247334
質問者

お礼

これからも勉強し、色々なパターンのVBAが組める様に精進します。 この度はありがとうございました。 感謝申し上げます。

noname#247334
質問者

補足

お久しぶりでございます。先日はお世話になりました。 今回、私がやりたいと考えているVBAは (1)A列にC1セルの月の日付を1~月末まで自動表示させます。 (2)C1セル変更で通常の状態ならB9~B39は連続データが自動入力されます。 ここでフェイントを加え、例えばB15を空白にするとB16~B39は空白状態になる様にVBAは仕事します。 その状態のままC1セルの年月を変更したらB9~B39の連続データ表示をやめて(累計使用日数がキャンセルされると解釈して頂くと良いです。)常に空白を表示させるVBAを考えています。 それを組んでいますが、思うように出来ないですね・・・。

関連するQ&A

専門家に質問してみよう