Ads By Google
VBAでDateaddの日付計算で困っていることがあるので助けていただけないでしょうか。よろしくお願いします。
シート: A列には”注射”という文字を入れるようにします。
B列には1月1日から12月31日まで入っています。
C列はB列の90日後を入れるようにします。
D列はC列の3日前を入れます。・・・としたいのですがその3日の間A列に”注射”が入っていたらその日を入れずに3日前にしたいのです。 稼働日みたいな感じでしょうか・・・・
どうしたらよいでしょうか?お願いします。
例えば、B列の「1月1日」の90日後はC列「3月31日」でD列は通常「3月28日」が入っていますがB列「3月30日」の左のA列に”注射”があったらそこを無視して「3月27日」と入れたいのです。
Sub count()
Dim i As Long
Dim lastrow As Long
lastrow = Range("B1").End(xlDown).Row
For i = 1 To lastrow
Cells(i, 3).Value = DateAdd("d", 90, Cells(i, 2).Value)
Next
For i = 1 To lastrow
Cells(i, 4).Value = DateAdd("d", -3, Cells(i, 3).Value)
Next
End Sub
説明が下手なのでもしよかったら実際作ったものを見ていただいた方が分かるかもしれません。
2008-06-10 23:25の質問
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。
回答(2)
2.
2008-06-14 11:25:38

Option Explicit
Sub count()
Function F_SearchRow(d As Date) As Long
Function F_3kkamae(FoundRow As Long) As Variant
Sub count()
Dim r As Long, LastRow As Long, FoundRow As Long Dim d As Date
LastRow = Range("B1").End(xlDown).Row
For r = 1 To LastRow
Cells(r, 3).Value = DateAdd("d", 90, Cells(r, 2).Value)
Next
For r = 1 To LastRow
d = Cells(r, 3).Value
FoundRow = F_SearchRow(d)
If FoundRow = 0 Then
'見つからなかっら場合の処理を記述。
'常に見つかるように日付は余裕を持って記述した方が良いでしょう。
'本当は行の切れ目の日付判定が必要なのですが、単純に3日前を入れておきます。
Cells(r, 4).Value = DateAdd("d", -3, d)
Stop '←とりあえず、Stopをかけときます。
Else
Cells(r, 4).Value = F_3kkamae(FoundRow)
End If
Next
End SubFunction F_SearchRow(d As Date) As Long
Dim r As Long
For r = 1 To Range("B1").End(xlDown).Row
If Cells(r, 2).Value = d Then
F_SearchRow = r
Exit Function
End If
Next
F_SearchRow = 0 '見つからなかったら0
End FunctionFunction F_3kkamae(FoundRow As Long) As Variant
Dim r As Long, ct As Integer
ct = 0
For r = (FoundRow - 1) To 1 Step -1
If Cells(r, 1).Value <> "注射" Then
ct = ct + 1
If ct = 3 Then
F_3kkamae = Cells(r, 2).Value
Exit Function
End If
End If
Next
F_3kkamae = "???"
End Function大変助かりました!ありがとうございます
1.
2008-06-11 02:43:53
>Cells(i, 4).Value = DateAdd("d", -3, Cells(i, 3).Value)
の部分をIF を使って条件分岐するようにする。
現在の注目セルからOffset で、A列に注射の文字が入力されているかどうか調べる。
の部分をIF を使って条件分岐するようにする。
現在の注目セルからOffset で、A列に注射の文字が入力されているかどうか調べる。
回答レベル : アドバイス
Ads By Google
コメント(2)
#1. Lode_Runner
2008-06-11 05:21:24
>>B列「3月30日」の左のA列に”注射”があったらそこを無視して「3月27日」と入れたい
B列の「3月30日」???
「3月27日」と入れたいのは、何列???
#2. mr-r00
2008-06-11 07:14:45
すみません D列に返したいのです あくまでも例であってその日だけでないので難しいです



