|
Sub lqxs()
Dim Arr, i&, j&, s$
Sheet1.Activate
Arr = [h4:an65536]
For i = 1 To UBound(Arr) - 2
For j = 1 To UBound(Arr, 2) - 2
If Arr(i, j) > 0 And Arr(i + 1, j + 1) > 0 And Arr(i + 2, j + 2) > 0 Then
s = s & Cells(i + 3, j + 7).Address(0, 0) & "|" & Cells(i + 4, j + 8).Address(0, 0) & "|" & Cells(i + 5, j + 9).Address(0, 0) & vbCrLf
End If
Next
Next
MsgBox s
End Sub
这是一位老师提供的代码,求帮忙给个注释帮助理解,非常感谢!
还有如果s=s那行,如何改写成if条件成立赋值1else赋值0到一列单元格
本帖最后由 大灰狼1976 于 2017-7-5 13:00 编辑
加注释方便理解。
- Sub lqxs()
- Dim Arr, brr, i&, j&, s$
- Arr = Range("h4:an" & [an65536].End(3).Row) '将数据区域装入数组Arr
- ReDim brr(1 To UBound(Arr), 1 To 1) '将数组brr调整至跟Arr数据行数一样,但仅有1列,不用一维数组的理由是不用转置
- For i = 1 To UBound(Arr) - 2 '从数组Arr第一行循环遍历至倒数第三行,不到最后一行的理由是确认倒数第三行时会同时判断下面两行
- For j = 1 To UBound(Arr, 2) - 2 '从数组Arr第一列循环遍历至倒数第三列,不到最后一列的理由是确认倒数第三列时会同时判断后面两列
- If Arr(i, j) > 0 And Arr(i + 1, j + 1) > 0 And Arr(i + 2, j + 2) > 0 Then brr(i + 2, 1) = 1: Exit For
- '如果斜线排列的三个元素都大于0的话,就在brr数组相应行标记1,出现标记1之后,后面就没有判断的必要了,退出循环
- Next
- If brr(i + 2, 1) = "" Then brr(i + 2, 1) = 0 '如果一行循环结束后没有找到符合上述条件的组合,则在brr数组相应行填写0
- Next
- [ao4].Resize(UBound(brr)) = brr '将brr数组输出至AO4为首的单元格区域(1列)
- End Sub
复制代码
|
|