2016-07-14 4 views
1

열 A, B 열 및 D 열의 값과 일치하는 열 E의 값을 반환해야하는 매크로가 있습니다.수식이 올바르게 작동하면 VBA가 "형식 불일치"를 반환합니다.

=SUMPRODUCT(--(A1:A180="Category Name"),--(B1:B180="Specific Type"),--(D1:D180=2015),(E1:E180))

을하지만 다음 VBA 프로그램은 "형식 불일치 오류"를 반환 : 엑셀 잘 작동합니다. 프로그램은 특정 시트 아래가 아닌 모듈로 있습니다. '시트 이름'범위도 존재하는지 확인했습니다. 누구든지 실수가 무엇인지 알 수 있습니까?

레코드의 경우 열 a와 b는 텍스트이고 열 d와 e는 숫자입니다.

Function LocateFirstCell() 
Dim FirstCell 

Dim ColA 
Dim ColB 
Dim ColD 
Dim ColE 

Dim Name As String 
Dim BOD As String 
Dim Year As Integer 

Set ColA = Worksheets("Sheet Name").Range("A1:A180") 
Set ColB = Worksheets("Sheet Name").Range("B1:B180") 
Set ColD = Worksheets("Sheet Name").Range("D1:D180") 
Set ColE = Worksheets("Sheet Name").Range("E1:E180") 


Name = "Category Name" 
BOD = "Specific Type" 
Year = 2015 


FirstCell = [SUMPRODUCT(--(ColA=Name),--(ColB=BOD),--(ColD=Year),(ColE))] 
'=SUMPRODUCT(--(A1:A180="Category Name"),--(B1:B180="Specific Type"),--(D1:D180=2015),(E1:E180)) 

MsgBox ("FirstCell is " & FirstCell) 
End Function 
+1

모두 [.NAME (다음 [] 짧은 ActiveSheet.Evaluate

에 대한 손 당신은 그것을 쓰는 하나의 문자열로 변수를 연결할 있어야합니다 library/office/aa175750 (v = office.11) .aspx) 및 [Year] (https://msdn.microsoft.com/en-us/library/88k2aec8.aspx)는 ** 예약어 **입니다. 특별한 이유가없는 한 예약어를 다른 용도로 사용하는 것은 결코 좋은 생각이 아닙니다. – Jeeped

답변

5

vba 변수는 Evaluate의 약자로 사용할 수 없습니다. https://msdn.microsoft.com/en-us/

FirstCell = Worksheets("Sheet Name").Evaluate("SUMPRODUCT(--(" & ColA.Address & "=""" & Name & """),--(" & ColB.Address & "=""" & BOD & """),--(" & ColD.Address & "=" & Year & "),(" & ColE.Address & "))") 
+0

선생님, 훌륭하고 감사드립니다! 작성된 수식은 여전히 ​​"형식 불일치 오류"가 발생했지만 이름 및 BOD 변수 주위에 Chr (34)을 사용하여 따옴표를 추가 했으므로 이제 수식이 작동합니다. 다시 감사합니다! – chimPANz

+0

아 예 그들은 필요할 것입니다. 나는 변화를 만들 것이다. 답변 옆의 체크 표시를 클릭하여 올바른 것으로 표시 할 수 있습니까? –

관련 문제