在锁步中移动行并返回错误?

时间:2016-05-19 16:17:23

标签: vba excel-vba excel

我一直在研究如何开发一个处理两列的宏 - 一个包含婚姻状态代码和另一个关系状态。例如:

  1. SI女儿
  2. M妻子
  3. M丈夫
  4. SI son
  5. D mother
  6. 父亲
  7. M son
  8. M妻子
  9. SI女儿
  10. SI丈夫
  11. SI代表单身,D代表离婚,M代表已婚,W代表丧偶,等等。

    宏的目的是测试错误,其中一个女儿或儿子不能单独使用,并且大约1000行执行此操作,并通过评估每行中的两个相邻单元格并返回行来执行此操作。符合错误的标准。上面的错误是SI不能成为丈夫而M不能成为儿子。

    对于单行,以下内容将完成此任务:

    Sub attempt9()
    
    Dim i As Integer
    
    Dim cell As Range
    Dim cell2 As Range
    Dim y As Range
    Dim z As Range
    
    Set y = Range("A1:A10")
    Set z = Range("B1:B10")
    
    For i = 1 To 10
    
        For Each cell In y
            cell.Offset(i, 0).Select
            For Each cell2 In z
                cell2.Offset(i, 0).Select
                If cell.Offset(i, 0).Value = "M" And cell2.Offset(i, 0).Value = "husband" Then
                    Range("D1") = cell.Address & ", " & cell2.Address
                End If
            Next cell2
        Next cell
        Exit For
    Next i
    
    
    End Sub
    

    对1000行执行上述操作是不切实际的,因此为了评估它们,我提出了以下内容,但它对规范不起作用:

    identity

    我面临的主要问题是如何让循环以锁步方式逐行移动两个相邻的单元格,并返回错误单元格的行或地址。我已经将选择编程为在每个循环周期中在两列中的相同迭代中移动,并且到目前为止,它将返回具有值" M"在第一列中,以及值为#34;丈夫"的单元格的值在第二列中,但行不匹配 - 并且为此目的存在严格的IF AND条件。

1 个答案:

答案 0 :(得分:0)

尝试以下操作,您只需使用循环变量来引用行号,您可以使用Select Case块来测试所有错误情况:

Dim error As Boolean

For i = 1 To 10
    Select Case True
        Case Cells(i, 1).Value = "M" And Cells(i, 2).Value = "son": error = True
        Case Cells(i, 1).Value = "M" And Cells(i, 2).Value = "daughter": error = True
        Case Cells(i, 1).Value = "SI" And Cells(i, 2).Value = "husband": error = True
        '// repeat above for all error cases
        Case Else: error = False
    End Select

    If error Then
        MsgBox "You've found a mistake at row " & i
        Exit For '// To stop the code and fix the error
    End If
Next

MsgBox "Checking complete!"