2016-06-22 7 views
1

これは基本的には修正されたINDEX/MATCHの式であるが、別のブックの変数やヘッダーに依存するだけでなく、2つのパラメーター。私は間違って行くよどこ作業していないINDEX-MATCHを修正するには

Option Compare Text 
Function DATAFILL(ID_number, source_headerRow) As Variant 
    ID_header_name = Cells.Item(1, ID_number.column).Value 
    Dim wb As String, ws As String 
    Dim ID_src As Range 
'check if source_headerRow is an external workbook 
    If source_headerRow Like "'" Then 
     src = Split(source_headerRow.address(External:=True), "!")(0) 
     wb = Replace(Split(src, "]")(0),"[","") 
     ws = Split(src, "]")(1) 
     id_col = Application.WorksheetFunction.Match(ID_header_name, source, 0) 
     Set ID_src = Workbooks(wb).Worksheets(ws).Range(Cells(1, id_col)) 
    Else 
     Set ID_src = Range(Cells(1, Application.WorksheetFunction.Match(ID_header_name, source_headerRow, 0))) 
    End If 

    headername = "Shift" 'placeholder 
    Set addr = Workbooks(wb).Range("A:Z") 
    DATAFILL = Application.WorksheetFunction.Index(addr, Application.WorksheetFunction.Match(ID_number, ID_src), Application.WorksheetFunction.Match(headername, source_headerRow, 0)) 

End Function 

私はVBAに非常に新しいですので、私は正確に突き止めることができない... はどんなに私は何をすべきか、私は#VALUE!エラーを取得していません。

また、VBA /マクロを使用しないでINDEX/MATCHユーザーを友好的にする方法はありますか?

+0

にする必要があります['OFFSET'](https://support.office.com/en-us/article/OFFSET-function-c8de19ae-dd79-4b9b-a14e-b4d906d11b66)が役立ちます。 –

+0

は、配列=((A:A = criteria1)*(B:B = criteria2)*(C:C))を使用して行うことができます。 –

+1

'source =' src = Split(source.address(External:= True)、 "!")(0) ')がどこにあるのかわかりません。これが問題だろうか? – aucuparia

答えて

0

あなたはVALUEエラーをどの行に伝えているのかを言わないでください。それが助けになるだろう。 または特定のセルにありますか?

あなたは、私が を見ることができますし、「addrが」Variantデータ型であるウィルデフォルトではので、あなたが、一番上にEXPLICIT OPTIONを持っていないことをどこでも「ADDR」変数の型を定義していません。

それは最低でObject、好ましくRange

(以上存在する場合)あなたは(Option Compare Text上記)あなたのモジュールの上部にOption Explicitを追加し、すべてのエラーを修正できるようになるまで、再コンパイルする必要があります

関連する問題