2016-07-12 6 views
1

日付のカウンタが変更されたときにインデックスと一致関数にエラーが発生しました。私は間違いに直面したときにコメントを書いた。必要に応じてデータのサンプルをアップロードしました。 サンプル:http://s000.tinyupload.com/?file_id=00243748825638974221Excel VBA:インデックスとマッチの関数型の不一致エラーを解決する方法

ここではコードです:

Sub regionalAverage() 

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

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

'create WorkSheet 

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

date_ini = #1/1/2008# 
date_fin = #1/2/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) 
        'error appeas here 
        aname(i) = .Index(Worksheets(i).Range("H2:H23393"), col, rw) 



       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(" & aname(1) & "," & aname(2) & "))/" & area & "" 

    Next conteo 
Next j 

End Sub 

私はエラーに直面している2008年1月2日に日付が変わるが、どのように私はそれを解決できますか?!

あなたはApplication.MatchVariantデータ型を使用しているので、値がない場合は、エラーが.Matchの呼び出し中に発生しませんが、colrwのようなこれらの変数はErrorタイプが含まれていますあなたの

答えて

2

ありがとうございました検索範囲/配列にあります。

このErrorの値はStringアレイに割り当てようとするとTypeMismatchエラーが発生します。aname()

だから、あなたは途中でそこにいる、あなただけのエラー処理が必要です。また

col = .Match(j, Worksheets(i).Range("F2:F23393"), 0) 
rw = .Match(CLng(conteo), Worksheets(i).Range("D2:D23393"), 0) 

If Not IsError(col) and Not IsError(rw) Then 
    aname(i) = .Index(Worksheets(i).Range("H2:H23393"), col, rw) 
Else 
    ' Do something else if there was an error 

End If 

Dim aName() as Variantを、しかし、あなたはおそらくエラー値を処理するために、エラーがさらに/他の場所で、あなたのコード内で取り扱う必要があるだろうあなたは配列に入れている。

私も、Indexがエラーの原因であると思われることを観察とするので、それは完全に、ここが必要とされていません。

Index(range_object, row_num, col_num)は、文字通りので、代わりにrange_object.Cells(row_num, col_num)

と同じです私がやった:

aname(i) = CStr(Worksheets(i).Range("H2:H23393").Cells(rw, col).Value) 

注:私はまた、あなたがもともとIndex機能のための間違った位置にrwcolを持っていることを想定し、rwことROW数であり、colCOLUMN数です。

+0

ファイルがアップロードされていますか?私はあなたが言ったことをしましたが、改善はありません。この問題を解決する方法はありますか?私は本当に急いでいる。ありがとう –

+0

同じエラー? aname(i)= CStr(.Index(Worksheets(i).Range( "H2:H23393")、col、rw)) 'もしあなたが、それがうまくいかない場合、 'col'、' rw'の値と 'Range(" H2:H23393 ")によって与えられたセル座標にどのような値が存在するかを示してください。 。 –

+0

私はCstr()を使用しましたが、動作しません。ファイルのサンプルがそこにアップロードされたというリンクがありました。ダウンロードして自分で確認していただければ幸いです。この問題はありがたいです。 –