VBA(excel 2010)如果错误(如#N / A),然后移动到下一行

专家!

我正试图自动化一个手动过程,并且正在运行(我敢肯定)一个简单的修复。 大约有8列可能包含需要复制到列B中的索引/匹配公式的结果。例如,列“A”是IP地址,而列“B”需要有一个值“C”到“K”列。 逻辑需要首先查看'K',然后下降到'C',检查值是否是第一个错误(如#N / A或0)。 如果不存在错误,则将该值复制到汇总表中。 我认为我的真正障碍是我无法获得检查错误的逻辑权限。 它或者什么都不做(我怀疑我只是退出循环),或者只是复制一切。 援助非常感谢!

Sub MakeSummary() Dim oRng1 As Range, oRng2 As Range Dim oWS1 As Worksheet, oWS2 As Worksheet, i As Long ' Initial cell to check Set oWS1 = ThisWorkbook.Worksheets("Master") Set oRng1 = oWS1.Range("A1") ' Initial cell to store Set oWS2 = ThisWorkbook.Worksheets("Summary") Set oRng2 = oWS2.Range("A1") ' Clear original data on Summary i = 0 Do Until IsEmpty(oRng2.Offset(i, 0)) oRng2.Offset(i, 0).EntireRow.ClearContents i = i + 1 Loop ' Look for IPs on "Master", then put in to "Summary" ' If value in cell is #N/A or 0, then skip to next cell Do Until IsEmpty(oRng1) If oRng1.Value = Application.WorksheetFunction.IsNA(oRng1.Formula) Then Set oRng2 = oRng2.Offset(0, 1) Else oRng2.Value = oRng1.Offset(0, 1).Value ' IPs oRng2.Offset(0, 1).Value = oRng1.Offset(0, 2).Value ' 1st Match oRng2.Offset(0, 2).Value = oRng1.Offset(0, 3).Value ' 2nd Match Set oRng2 = oRng2.Offset(1, 0) ' Move to next row to store Set oRng1 = oRng1.Offset(1, 0) ' Move to next row to check Loop ' Clean up Set oRng1 = Nothing Set oWS1 = Nothing Set oRng2 = Nothing Set oWS2 = Nothing End Sub 

您可以使用Application.WorksheetFunction.IsError来检查公式结果以查看它是否是错误。 在这种情况下,您的代码将如下所示(编辑以使用注释中提到的IsError()函数

  Sub MakeSummary2() Dim oRng1 As Range Dim oRng2 As Range Dim oWS1 As Worksheet Dim oWS2 As Worksheet Dim X As Integer ' Initial cell to check Set oWS1 = ThisWorkbook.Worksheets("Master") Set oRng1 = oWS1.Range("A2") ' Initial cell to store Set oWS2 = ThisWorkbook.Worksheets("Summary") Set oRng2 = oWS2.Range("A2") ' Clear original data on Summary oWS2.Cells.Clear ' Look for IPs on "Master", then put in to "Summary" ' If value in cell is #N/A or 0, then skip to next cell Do Until IsEmpty(oRng1) If IsError(oRng1.Offset(0, 1).Value) Then For X = 10 To 2 Step -1 If Not IsError(oRng1.Offset(0, X).Value) Then If oRng1.Offset(0, X).Value <> "" Or oRng1.Offset(0, X).Value <> 0 Then oRng2.Value = oRng1.Value oRng2.Offset(0, 1).Value = oRng1.Offset(0, X).Value Set oRng2 = oRng2.Offset(1, 0) Exit For End If End If Next X If X = 1 And oRng2.Value = "" Then oRng2.Value = oRng1.Value oRng2.Offset(0, 1).Value = "No Data" Set oRng2 = oRng2.Offset(1, 0) End If Else oRng2.Value = oRng1.Value oRng2.Offset(0, 1).Value = oRng1.Offset(0, X).Value Set oRng2 = oRng2.Offset(1, 0) End If Set oRng1 = oRng1.Offset(1, 0) ' Move to next row to check Loop End Sub 

如果列C:K中的所有数据都是错误,空或零,则将在列B中放置“无数据”的值