|
本帖最后由 qy1219no2 于 2013-7-23 12:53 编辑
你看是否这样。如果数据多,可能运算有点慢,需要耐心等待。
与户主关系仅限于:户主、夫、妻、子、女。如果出现:丈夫、妻子、儿、子女、二儿子等,将无法正确匹配。如果存在其他情况,请先规范!未列入的关系,不匹配,手工自行匹配。
- Sub test()
- nR = [a65536].End(xlUp).Row
- If nR < 2 Then Exit Sub
- For i = 2 To nR
- cGX = Right(Cells(i, 5), 1) '本人关系:只取关系的右边第一个字
- ID = Cells(i, 2) '本人身份证号
- cXB = (IIf(Len(ID) = 15, Right(ID, 1), Mid(ID, 17, 1)) Mod 2 = 1) '本人性别TRUE-男;FALSE-女
- Set Rng = [c:c].Find(Cells(i, 3), , , 1) '查找相同户口号
- If Not Rng Is Nothing Then '如果找到了
- cAdd = Rng.Address '将找到的单元格地址记录下来,避免重复查找
- Do
- If Right(Cells(Rng.Row, 5), 1) Like "[主夫妻]" Then '如果找到的关系为户主、夫、妻之一
- ID1 = Cells(Rng.Row, 2) '找到的身份证号
- cXB1 = (IIf(Len(ID1) = 15, Right(ID1, 1), Mid(ID1, 17, 1)) Mod 2 = 1) '计算找到的性别
- nCol = 0
- arr = Cells(Rng.Row, 1).Resize(1, 2) '将找到的姓名、身份证号存入arr临时数组
- If cGX Like "[主夫妻]" And cXB1 = Not cXB Then nCol = 10 '如果本人与户主的关系为户主、夫、妻之一,且找到的性别与本人性别相反(未考虑同性婚姻哈)
- If cGX Like "[子女]" Then nCol = 6 + IIf(cXB1, 0, 2) '如果本人的关系为子或女
- If nCol > 0 Then Cells(i, nCol).Resize(1, 2) = arr '将arr数组信息写入相应单元格
- End If
- Set Rng = [c:c].FindNext(Rng) '继续查找
- Loop While Not Rng Is Nothing And Rng.Address <> cAdd
- End If
- Next
- End Sub
复制代码 |
|