2017-02-24 13 views
1

列A、D、およびEは日付と時刻です。以下のコードでエラーが表示されます。変数が定義されていません

列Aの日付が開始日と終了日の間にある回数を調べようとしています。

列Aは、開始日と終了日が何千にもなる間、30〜60日の間で変化します。

つの質問:

  1. は、なぜ私は以下のコードで定義されていないエラー変数を受けるのですか?
  2. セルA2が日付と時刻24Feb17 12H00の場合、セルA3にはどのような数式を入れて25Feb17 12H00などと読み替えるのですか?

コード:あなたはあまりにもijを宣言する必要があるので、あなたは、すべての変数を宣言する

Option Explicit 
Sub DaysCount() 
    Dim endRow As Long 
    Dim LastRow As Long 
    Dim ICount As Long 
    Dim Day() As Variant 
    Dim StartDate() As Variant 
    Dim EndDate() As Variant 
    ICount = 0 
    With ThisWorkbook.Worksheets("sheet1") 
     LastRow = .Range("A" & .Rows.count).End(xlUp).Row 
     endRow = .Range("D" & .Rows.count).End(xlUp).Row 
     Day = Sheet1.Range("A2:A" & LastRow) 
     StartDate = Sheet1.Range("D2:D" & endRow) 
     EndDate = Sheet1.Range("E2:E" & endRow) 

     For i = LBound(StartDate) To UBound(StartDate) 
      For J = LBound(Day) To UBound(Day) 
       If Day(J, 1) >= StartDate(i, 1) And Day(J, 1) <= EndDate(i, 1) Then 
        ICount = ICount + 1 
       Else 

       End If 
       Sheet1.Range("B" & J).Value = ICount 
      Next i 
      ICount = 0 
     Next J 
    End With 
End Sub 
+0

'オプションExplicit'は、コードの先頭にあなたが例えば、コードで使用されるすべての変数を宣言する必要があることを意味します'Dim i as integer'はインクルードされておらず、変数' j'もありません – MiguelH

+0

どの行が 'ERROR'を作成していますか? – harun24hr

+0

Option Explicitを設定していて、変数iとjが定義されていないためです。しかし、次のjの文の前に 'next i'ステートメントなどのコードに関する問題があります – FunThomas

答えて

2
  1. Option Explicit力。
    Next iNext jは順調ではありませんでした。

  2. VBA:DateAdd("d",.Range("A3"),1)

修正したコードは:

Option Explicit 

Sub DaysCount() 
Dim i As Long 
Dim j As Long 
Dim endRow As Long 
Dim LastRow As Long 
Dim ICount As Long 
Dim Day() As Variant 
Dim StartDate() As Variant 
Dim EndDate() As Variant 
ICount = 0 
With ThisWorkbook.Worksheets("sheet1") 
    LastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
    endRow = .Range("D" & .Rows.Count).End(xlUp).Row 
    Day = Sheet1.Range("A2:A" & LastRow) 
    StartDate = Sheet1.Range("D2:D" & endRow) 
    EndDate = Sheet1.Range("E2:E" & endRow) 

    For i = LBound(Day) To UBound(Day) 
     For j = LBound(StartDate) To UBound(StartDate) 
      If Day(j, 1) >= StartDate(i, 1) And Day(j, 1) <= EndDate(i, 1) Then 
       ICount = ICount + 1 
      Else 
      End If 
     Next j 
     .Range("B" & i).Value = ICount 
     ICount = 0 
    Next i 
End With 
End Sub 
+0

ルーキーを助けるために費やした時間を感謝します。本当にありがとう! – Anthony

+0

@Anthony:ようこそ! ;) お役に立てて嬉しいです! – R3uK

関連する問題