Excel VBA質問箱 IV

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

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


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

【22742】3日以上前か判定し条件分岐 たいくん 05/3/2(水) 0:14 質問[未読]
【22743】Re:3日以上前か判定し条件分岐 ponpon 05/3/2(水) 0:53 回答[未読]
【22744】Re:3日以上前か判定し条件分岐 たいくん 05/3/2(水) 6:21 お礼[未読]
【22774】Re:3日以上前か判定し条件分岐 ponpon 05/3/2(水) 22:13 発言[未読]
【22807】Re:3日以上前か判定し条件分岐 たいくん 05/3/3(木) 22:52 質問[未読]
【22811】Re:3日以上前か判定し条件分岐 かみちゃん 05/3/3(木) 23:37 回答[未読]
【22825】Re:3日以上前か判定し条件分岐 たいくん 05/3/4(金) 15:07 お礼[未読]
【22847】Re:3日以上前か判定し条件分岐 ponpon 05/3/4(金) 19:33 発言[未読]

【22742】3日以上前か判定し条件分岐
質問  たいくん  - 05/3/2(水) 0:14 -

引用なし
パスワード
   こんばんは
下の様なデーターがありD列の日時が現在の日時より3日以上前の場合
その行をコピー(下のデーターの場合C4からH4まで)したいのですが
If〜Then〜Elseステートメントを使って3日以上前かどうかの判定をして
いるのですが上手くいきません。3日以上前か判定し条件分岐するには
どのようにすれば良いかどなたかご教授お願いします。
ちなみにD列には日時のデーターが無い場合があります。

    C     D     E     F     G     H
1 ***  3/1 2:00 ******  ******  ******  ****
2 *** 2/28 2:00 ******  ******  ******  ****
3           
4 *** 2/25 2:00 ******  ******  ******  ****

【22743】Re:3日以上前か判定し条件分岐
回答  ponpon  - 05/3/2(水) 0:53 -

引用なし
パスワード
   ▼たいくん さん:
ponponです。こんばんは。

>If〜Then〜Elseステートメントを使って3日以上前かどうかの判定をして
>いるのですが上手くいきません。3日以上前か判定し条件分岐するには
>どのようにすれば良いかどなたかご教授お願いします。


D列の表示形式が (m/d h:mm)になっているとして、
D列のデータが1行目からあるとして
E列に表示されるので新規ブックか別シートで確かめてください。
Sub test()
  Dim myRng As Range
  Dim r As Range
  
  Set myRng = Range(Cells(1, 4), Cells(65536, 4).End(xlUp))
  
  For Each r In myRng
    If r.Value > Now - 2 Then
      r.Offset(, 1).Value = "二日以内です"
    Else
      r.Offset(, 1).Value = "三日以上前です"
    End If
  Next
  
End Sub

【22744】Re:3日以上前か判定し条件分岐
お礼  たいくん  - 05/3/2(水) 6:21 -

引用なし
パスワード
   ponponさん、ありがとうございました。

判別できました。ただ空白セルの所も3日以上前になるのですが
ここは初めに現在の日時を書き込んでそれから判別するか、他の
セルが空白なら分岐しないようにすればなんとか期待通りの動作
が出来そうです。

本当に助かりました!

【22774】Re:3日以上前か判定し条件分岐
発言  ponpon  - 05/3/2(水) 22:13 -

引用なし
パスワード
   ponponです。こんばんは。
空白行があるのを忘れてました。

Sub test()
  Dim myRng As Range
  Dim r As Range
 
  Set myRng = Range(Cells(1, 4), Cells(65536, 4).End(xlUp))
 
  For Each r In myRng
    If r <> "" Then
    If DateValue(r.Value) > DateValue(Now) - 2 Then
      r.Offset(, 1).Value = "二日以内です"
    Else
      r.Offset(, 1).Value = "三日以上前です"
    End If
    End If
  Next
 
End Sub

【22807】Re:3日以上前か判定し条件分岐
質問  たいくん  - 05/3/3(木) 22:52 -

引用なし
パスワード
   ponponさん、空白行の処理もしていただいてありがとうございます。

ネットワーク上のファイルなのでいろんな人が書き換える為日付の
欄(D列)に日付ではなくスペースが入っている場合があり二つ目の
Ifで[型が一致しません]のエラーがでました。
スペースが入力されていても判別出来ますか?
又はD列には日時しか入力出来ない様に出来るのでしょうか?

>Sub test()
>  Dim myRng As Range
>  Dim r As Range
> 
>  Set myRng = Range(Cells(1, 4), Cells(65536, 4).End(xlUp))
> 
>  For Each r In myRng
>    If r <> "" Then
>    If DateValue(r.Value) > DateValue(Now) - 2 Then ←ここ
>      r.Offset(, 1).Value = "二日以内です"
>    Else
>      r.Offset(, 1).Value = "三日以上前です"
>    End If
>    End If
>  Next
> 
>End Sub

【22811】Re:3日以上前か判定し条件分岐
回答  かみちゃん  - 05/3/3(木) 23:37 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ネットワーク上のファイルなのでいろんな人が書き換える為日付の
>欄(D列)に日付ではなくスペースが入っている場合があり二つ目の
>Ifで[型が一致しません]のエラーがでました。

DateValue関数の引数は、「通常、100 年 1 月 1 日から 9999 年 12 月 31 日ま
での範囲の日付を表す文字列式を指定します」です。
つまり、スペースや日付以外の文字列だと、「型が一致しません」となります。

>スペースが入力されていても判別出来ますか?

ponponさんのコードのうち、

> If r <> "" Then

は、長さ0の文字列以外という意味になり、1文字以上のスペースや、日付以外の
文字列だとそのまま処理しようとしてしまいます。
そこで、この部分を
If IsDate(r) Then
として、変数rが日付に変換できるかどうかを調べて、変換できる場合のみ処理をするようにすればいいと思います。

【22825】Re:3日以上前か判定し条件分岐
お礼  たいくん  - 05/3/4(金) 15:07 -

引用なし
パスワード
   かみちゃんさん 問題解決しました。
本当に有難う御座いました。

【22847】Re:3日以上前か判定し条件分岐
発言  ponpon  - 05/3/4(金) 19:33 -

引用なし
パスワード
   ▼たいくん さん かみちゃん さん 
ponponです。

今帰ってきました。
フォローありがとうございました。

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