2016-07-13 7 views
0

VBAを初めて使用しました。これは私の3番目のコードです。次回の生年月日を入力すると、生年月日を入力する必要があります。また、必要な誕生日の準備をする前に、残っている日数を知ることができます。EXCEL VBA:入力列が空でないかどうかを指定しなくても、列は自動的に塗りつぶされます。

私はしようとしますできるだけ多くの情報を提供してください。このテキストの壁に脅かされないでください。これは私のExcelがどのように見えるかです

Sub Next_Birthday() 

Dim Birthdate As Date 
Dim nr As Long 
Dim Today As Date 
Dim Nextbdate As Date 
Dim NoDays As Long 

For nr = 2 To 20000 

Birthdate = ThisWorkbook.Sheets("Sheet1").Cells(nr, "B") 
Today = Date 

Nextbdate = DateSerial(Year(Today), Month(Birthdate), Day(Birthdate)) 

If Nextbdate >= Today Then 
    Nextbdate = DateSerial(Year(Today), Month(Birthdate), Day(Birthdate)) 
Else 
Nextbdate = DateSerial(Year(Today) + 1, Month(Birthdate), Day(Birthdate)) 
End If 

If Cells(nr, "A") = "" Then 
    Cells(nr, "C") = "" & Cells(nr, "D") = "" 
Else 
    Cells(nr, "C").Value = Nextbdate 
    Cells(nr, "D").Value = (Nextbdate - Today) 
End If 

Next 
End Sub 

:私はちょうど学び始めてからも、数日前に私は、これは私が思いついたコードである

oを任意の方法を限られた量のコードを書きましたいったん私はコードを再生: enter image description here 私は、私は希望の結果が得られるが、それはTRUEの値で列Cの残りの部分を自動入力します。私のコードの最後の部分が表示されている場合は、列Aに値が入力されていない場合、特に列に入力しないようExcelに依頼しました。

ありがとうございました。問題。さらに詳しい情報が必要な場合はお気軽にお問い合わせください。

よろしく、 InWoods

答えて

3

変更Cells(nr, "C") = "" & Cells(nr, "D") = ""

それは評価するために、あなたのラインの力で
Cells(nr, "C") = "" 
Cells(nr, "D") = "" 

&=へ。

+0

非常に高速だったこと!ありがとうございました!それは今、完璧に動作します:)私はどのように私の心を滑ったのか分かりません。 – InWoods

+0

あなたの時間をありがとう、ありがとう@cyboashuあなたは素晴らしいです:D – InWoods

+0

あなたを歓迎します。 :)答えとして質問に印を付ける。 – cyboashu

1

これは、C2とD2の次の式でVBAなしで非常に簡単に実行できます。

C2:=IF(DATE(YEAR(TODAY()),MONTH(B2),DAY(B2))>=TODAY(),DATE(YEAR(TODAY()),MONTH(B2),DAY(B2)),DATE(YEAR(TODAY())+1,MONTH(B2),DAY(B2)))

D2:=C2-TODAY()

あなたが本当にVBAが必要な場合は、あなたが好きなように、コードが動作するには、以下にリファクタリングすることができます。

Sub Next_Birthday() 

Dim Birthdate As Date 
Dim nr As Long 
Dim Today As Date 
Dim Nextbdate As Date 
Dim NoDays As Long 
Dim rName As Range 

Today = Date 

With ThisWorkbook.Sheets("Sheet1") 

    For Each rName In .Range(.Range("A2"), .Range("A2").End(xlDown)) 

     Birthdate = rName.Offset(, 1) 
     Nextbdate = DateSerial(Year(Today), Month(Birthdate), Day(Birthdate)) 

     If Nextbdate >= Today Then 
      Nextbdate = DateSerial(Year(Today), Month(Birthdate), Day(Birthdate)) 
     Else 
      Nextbdate = DateSerial(Year(Today) + 1, Month(Birthdate), Day(Birthdate)) 
     End If 

     rName.Offset(, 2) = Nextbdate 
     rName.Offset(, 3) = (Nextbdate - Today) 

    Next 

End With 

End Sub 
+0

ありがとうございました:)私はあなたが私に与えたコードを実験しようとします:Dすべてのものを見るのはいつも面白く、同じ問題を一意に解決します:D ty – InWoods

関連する問題