Excel VBA質問箱 IV

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

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


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

【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 お礼[未読]

【46673】[46540]の件で再質問です
質問  takashi  - 07/2/12(月) 2:59 -

引用なし
パスワード
   下記コードの範囲では通常の日付入力
たとえば"07/05/20"と入力した場合
現時点では"07/02/21"と表示されてしまうのですが
普通に手入力を実行した場合にその日付にすることは
可能でしょうか?よろしくお願いします。

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 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
  Next
  
  Application.EnableEvents = True
End Sub

【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)は処理されてしまいます。

【46740】Re:[46540]の件で再質問です
お礼  takashi  - 07/2/13(火) 15:17 -

引用なし
パスワード
   ▼へっぽこさん
ありがとうございます。
レスが付かないのでいろいろ考えましたが
31以下ですか発想がそこまでいきませんでした。
勉強たりませんね。
別の意味で収穫がありましたが・・・

>但し、すごく小さい日付(1900/1/1〜1900/1/31)は処理されてしまいます。
こんな日付は使いませんので問題ありません。
またまた、お世話になりありがとうございました。

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