我一直在研究如何开发一个处理两列的宏 - 一个包含婚姻状态代码和另一个关系状态。例如:
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条件。
答案 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!"