使用WorksheetFunction在嵌套循环中键入Mismatch

时间:2015-12-30 15:57:20

标签: excel vba excel-vba vlookup

Sub checkMe()
Dim lastRow As Long
Dim cell As Range



lastRow = Range("A" & Rows.Count).End(xlUp).Row

For Each cell In Range("B1:B" & lastRow) 'dynamically go through each row in the range 
        For a_counter = 2001 To 2015 ' for each row, cycle through each year until 2015 
        j = a_counter
        b = cell.offset(0, 6).Value 'value for vlookup
        a = Application.VLookup(b, Sheet2.Range("A2:N42"), (j - 2000 + 2), False) ' look up each value in offset(0,6) in another sheet 
        If cell.Value = "DUB" And cell.offset(0, 1).Value <= "2001" And cell.offset(0, 2).Value = "OSLR" Then cell.offset(0, j + 12 - 2000).Value = cell.offset(0, 7).Value * a 'only apply when the conditions are met 


        Next a_counter


Next

End Sub

顺序应该改变一点,所以条件在内循环之前有助于提高速度,但我认为这应该有效。 cell.offset(0,6)的值是我需要为vlookup查找每一行的值。如果我输入的值是&#39; b&#39;但是,我需要值来查找每行的变化。目前它只适用于第1行并停止。现在我得到一个不匹配的错误。

1 个答案:

答案 0 :(得分:1)

让我们做一些数学。

For a_counter = 2001 To 2015

a_counter 将按15个值排序;例如2001年•2015年包容性。

Sheet2.Range("A2:N42")

共14列;例如A栏►列N包含。

j = a_counter
..., (j - 2000 + 2), ...

您要求从3个月的17个不同列返回。

然而A:N有14列,所以当 a_counter = 2013时你会出错(类型不匹配),因为没有15 th 列。