Excel VBA質問箱 IV

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

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


35207 / 76732 ←次へ | 前へ→

【46727】Re:[46540]の件で再質問です
回答  へっぽこ  - 07/2/13(火) 13:02 -

引用なし
パスワード
   こんにちは。

> たとえば"07/05/20"と入力した場合
そしたら…
年月日を入力したらそのまま設定。
日付だけならVBAで処理して設定。

という感じでしょうか。

31以下の数字を入力した場合に処理するように「←追加」の2行を加えてみました。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim 各々のセル As Range

  If Intersect(Target, Range("B20:B350")) Is Nothing Then
    Exit Sub
  End If
 
  Application.EnableEvents = False

  'For Each を使ってIntersect(Target, Range("B20:B350"))の範囲内にあるセルを
  '1つ1つ処理する。
  For Each 各々のセル In Intersect(Target, Range("B20:B350"))
    If IsNumeric(各々のセル.Value2) And 各々のセル.Value2 <> "" Then
      If 各々のセル.Value2 <= 31 Then '←追加
        If Day(Date) >= 23 Then
          各々のセル.Value = DateSerial(Year(Date), Month(Date) + 1, Day(各々のセル.Value2) + 1)
        Else
          各々のセル.Value = DateSerial(Year(Date), Month(Date), Day(各々のセル.Value2) + 1)
        End If
      End If '←追加
    End If
  Next
 
  Application.EnableEvents = True
End Sub

但し、すごく小さい日付(1900/1/1〜1900/1/31)は処理されてしまいます。

1 hits

【46673】[46540]の件で再質問です takashi 07/2/12(月) 2:59 質問
【46727】Re:[46540]の件で再質問です へっぽこ 07/2/13(火) 13:02 回答
【46740】Re:[46540]の件で再質問です takashi 07/2/13(火) 15:17 お礼

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