2016-07-12 7 views
0

日付のカウンタが変更された場合、インデックス関数とマッチ関数にエラーが発生しました。私は間違いに直面したときにコメントを書いた。ここにコードです:Excel VBA:インデックスとマッチ関数を使用する際にmisMatchエラーを入力してください

Sub regionalAverage() 

Application.ScreenUpdating = False 

Application.DisplayStatusBar = False 

Application.EnableEvents = False 

ActiveSheet.DisplayPageBreaks = False 

Dim address(2) As String 
Dim rw As Variant 
Dim col As Variant 
Dim date_ini As Date 
Dim date_fin As Date 

    'create WorkSheet 

date_ini = #1/1/2008# 
date_fin = #1/4/2008# 
For j = 1 To 3 
    For conteo = date_ini To date_fin 
     For i = 1 To 2 
      With Sheets(i) 
       With Application 
       col = .Match(j, Worksheets(i).Range("F2:F23393"), 0) 
       rw = .Match(CLng(conteo), Worksheets(i).Range("D2:D23393"), 0) 
       address(i) = .Index(Worksheets(i).Range("H2:H23393"), col, rw) 
       ' the error appear here 
       End With 

      End With 
     Next i 
    ' computation 
     area = 6.429571 
     Sheets("Output").Activate 
     Range("A1").Select 
     ActiveCell.Offset(0, j).Select 
     colname = Split(ActiveCell(1).address(1, 0), "$")(0) 
     Columns("" & colname & ":" & colname & "").Select 
     Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
      MatchCase:=False, SearchFormat:=False).Select 

     ActiveCell.Value = "=(SUM(" & address(1) & "," & address(2) & "))/" & area & "" 

    Next conteo 
Next j 

End Sub 

日付が1/2/2008に変更されると、エラーが発生しますが、どうすれば解決できますか?

ありがとう

+0

を作ったのですか?またはそれの後、 'End With'の行? –

+0

'address(i)= .Index'の行を意味します。 –

+0

あなたは' Dim address(2)As String'を宣言しました。ここでi = 2の場合、配列メンバー3を探しています。 (address()配列は0から1で始まります)。 –

答えて

0

あなたは `アドレス(I)とライン= .Index`を意味しています(以下のコードに 'が付く)以下のように変更

Sub regionalAverage() 

Application.ScreenUpdating = False 
Application.DisplayStatusBar = False 
Application.EnableEvents = False 
ActiveSheet.DisplayPageBreaks = False 

' *** change the declaration here *** 
Dim address() As String 
Dim rw As Variant 
Dim col As Variant 
Dim date_ini As Date 
Dim date_fin As Date 

' *** add Redim here, so the index of the array will start from 1 *** 
ReDim address(1 To 2) 

date_ini = #1/1/2008# 
date_fin = #1/4/2008# 
For j = 1 To 3 
    For conteo = date_ini To date_fin 
     For i = 1 To 2 
      With Sheets(i) 
       With Application 
        col = .Match(j, Worksheets(i).Range("F2:F23393"), 0) 
        rw = .Match(CLng(conteo), Worksheets(i).Range("D2:D23393"), 0) 

        On Error Resume Next 
        address(i) = .Index(Worksheets(i).Range("H2:H23393"), rw, col) ' switched between rw (i think it's your row reference) and col 

        ' to help debug the error you get 
        If Err.Number <> 0 Then 
         MsgBox "Error number " & Err.Number & " in row " & rw & " Col " & col 
        End If 

        On Error GoTo 0 

       End With 

      End With 
     Next i 

    ' computation 
     area = 6.429571 
     Sheets("Output").Activate 
     Range("A1").Select 
     ActiveCell.Offset(0, j).Select 
     colname = Split(ActiveCell(1).address(1, 0), "$")(0) 
     Columns("" & colname & ":" & colname & "").Select 
     Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
      MatchCase:=False, SearchFormat:=False).Select 

     ActiveCell.Value = "=(SUM(" & address(1) & "," & address(2) & "))/" & area & "" 

    Next conteo 
Next j 

End Sub 
+0

今何のエラーが表示されますか?元のメッセージにエラーのスクリーンショットを添付できますか? –

+0

あなたはそれを解決する方法を手に入れましたか?ありがとう –

+0

@MajidJavanmard上記の私のメッセージを準備して、あなたが得るエラーmessgaeのスクリーンショットを追加してください。 'col'、' rw'の値は何ですか? –

関連する問題