解決済み

エクセルVBAで、「セルの日付からx日経過」の表し方

  • すぐに回答を!
  • 質問No.4170384
  • 閲覧数178
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 66% (76/114)

http://oshiete1.goo.ne.jp/qa4080864.html
で以前質問させていただいたことに似た質問になります。


I3=項目名「登録」 I4以下に登録日
J3=項目名「初回入力」 J4以下に入力日

とした場合、
I列に入力があり(ない場合もあるので一応条件として)、
I列の登録日から20日経過してもJ列に入力がない場合
メッセージボックス「未入力」としたいのですが、

どのように表現したらいいでしょうか?
よろしくお願いします。

質問者が選んだベストアンサー

  • 回答No.3

ベストアンサー率 64% (133/205)

再びNo1です。

IF Cells(i + 3, "J") <> "" AND _ ‥ 空白でない <> ""

IF Cells(i , "J") <> "" AND _ ‥ 空白でない <> ""
の書き間違いです。
失礼しました。
お礼コメント
4k3s4r3

お礼率 66% (76/114)

ありがとうございました。まだすこし理解し切れていないところもありますが、アドバイスをもとにべんきょうしてみます。
投稿日時 - 2008-07-13 10:32:22
感謝経済

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 64% (133/205)

こんにちは no.1です。
コードを拝見しました。
勉強中ということですので、とりあえず、アドバイスさしてもらいます。

まずは、そちらの記載したコード
---------------------------------------------------------
Sub test ()
Dim Sh As Worksheet
Dim i As Integer
Dim s As String

i = 1
Do Until Sh.Cells(i + 3, "A").Value = ""
If Sh.Cells(i + 3, "I") >= DateAdd("d", 8, Sh.Cells(i + 3, "I")) And _
Sh.Cells(i + 3, "J").Value = "" Then

Sh.Cells(i + 3, "A").Resize(,18).Interior.ColorIndex = 38
End Sub
---------------------------------------------------------
(1)Dim Sh As Worksheetで変数を定義した後、シートの名前をセット
 していません。 ※Sh.Cellsで場所がわからない状態です。
 また、シートを選択しましょう。

 Set Sh = Worksheets("Sheet1") ‥ シート名のセット
 Sh.Select           ‥ シート選択

 シートを選択してしまえば、そのシート上のセルがアクティブに
 なるので、cellsだけでもおkです。

 ※参考:シートを選択するだけなら、下記のようなやり方もあります。
1.Sheets("Sheet2").Select
2.Worksheets("Sheet3").Select

(2)"i"は処理行数を指定するために使用すると思いますが、i = 1ではなく、
i = 4(処理の先頭行)として、処理が終わったら i を1づつ増加させていく
ほうがCells(i + 3, "A")‥とするより、すっきりします。

i+3 としておくと、i+4 になったとき、他の箇所を全てメンテナンスする必要があり
非効率だからです。(あくまで私の好みですがw)
 i = 4

 Sh.Cells(i + 3, "A").Value = "" は Cells(i, "A").Value = ""
 のように書き換えできます。

(3)Do Untilに対する"Loop"がありません。

 End Subの前に"Loop"を入れる必要があります。

(4)IF文に対するEnd Ifがありません。

 IF Cells(i + 3, "J") <> "" AND _ ‥ 空白でない <> ""
   DateDiff("d",開始日(登録日)のセル,終了日(入力日)のセル) >=20 then
     真の時の処理
 end If

(5)i を増加させる文がありません。

  Loopの直前にiを増加させましょう。

とまあ、こんな感じですが、少し考えてみてください^^
また、わからなければ補足でお願いします。
では、健闘を祈りますw
  • 回答No.1

ベストアンサー率 64% (133/205)

こんにちは^^
こんなものを作ってみました。

日付間の日数を求めるサンプル

Sub Input_Check()

Dim date_entry
Dim date_input

Range("I4").Select
date_entry = ActiveCell.Value
date_input = ActiveCell.Offset(0, 1).Value

MsgBox ("登録日:" & date_entry)
MsgBox ("初回入力日:" & date_input)
MsgBox ("登録日からの日数:" & DateDiff("d", date_entry, date_input))

End Sub

DateDiff関数というので、日付の間の日数を求めることができます。
>MsgBox ("登録日からの日数:" & DateDiff("d", date_entry, date_input))
最初の引数"d"が日数間、"m"だと月数間など、他にもいろいろ指定
できるようです。 詳細は省きますw

これで求めた日数をIF文を使って処理してみてください。 ^^
以上、ご参考まで
お礼コメント
4k3s4r3

お礼率 66% (76/114)

ご回答ありがとうございました。今、作っている他のコードのひとつは、下のようなものです。今回質問した問題も、下のような感じでできるかなと思っていたのですが、考えると混乱してしまいます。。。
下のようにIf ~ Then の部分ですが、下のコードを基にしてできるでしょうか。


Sub test ()
Dim Sh As Worksheet
Dim i As Integer
Dim s As String


i = 1
Do Until Sh.Cells(i + 3, "A").Value = ""
If Sh.Cells(i + 3, "I") >= DateAdd("d", 8, Sh.Cells(i + 3, "I")) And _
Sh.Cells(i + 3, "J").Value = "" Then

Sh.Cells(i + 3, "A").Resize(,18).Interior.ColorIndex = 38
End Sub
投稿日時 - 2008-07-12 15:14:14
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝指数によるOK-チップ配布スタート!

ピックアップ

ページ先頭へ