知識、知恵のカタマリ

[PR]コレがGoogleの検索ストーリー

解決済

clip!clip!
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の質問
Excel  for  VBA  Dateadd  Next  Cells  Sub  
Excel
「Microsoft Office Excel」のホームページです
office.microsoft.com/ja-jp/excel/
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。

回答(2)

2.

2008-06-14 11:25:38ベスト
Option Explicit

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 Sub

Function 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 Function

Function 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列に注射の文字が入力されているかどうか調べる。
回答レベル : アドバイス
Ads By Google

コメント(2)

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列に返したいのです あくまでも例であってその日だけでないので難しいです

トラックバック(2)

トラックバックURL: