|
- Sub Test()
- Dim shSource As Worksheet, shResult As Worksheet
- Dim arrSource As Variant, lngFind As Long
- Dim arrMiddle As Variant, arrResult As Variant
- Dim lngRow As Long, lngCol As Long, lngIndex As Long
- Dim lngRowID As Long, lngColID As Long
- Dim lngMax As Long, lngMaxRows As Long
-
- Set shSource = Sheets("Sheet1")
- Set shResult = Sheets("Sheet1")
-
- arrSource = shSource.Range("C13:AI206")
- lngMax = Application.WorksheetFunction.Max(arrSource) '区域中最大的数,以便确认上一位可能出现的最大值
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- '记录符合条件的情况
- lngCol = UBound(arrSource, 2) * 3
- lngMaxRows = UBound(arrSource)
- ReDim arrMiddle(1 To lngMaxRows, 1 To lngCol) '中间过程
- lngFind = 0
- For lngCol = 1 To UBound(arrSource, 2)
- lngIndex = 1
- For lngRow = 1 To UBound(arrSource)
- If arrSource(lngRow, lngCol) = lngFind Then
- arrMiddle(lngIndex, (lngCol - 1) * 3 + 1) = lngRow
- If lngRow > 1 Then arrMiddle(lngIndex, (lngCol - 1) * 3 + 2) = arrSource(lngRow - 1, lngCol)
- lngIndex = lngIndex + 1
- End If
- Next
- Next
-
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- '计算下一位距离
- lngMaxRows = 0
- For lngCol = 3 To UBound(arrMiddle, 2) Step 3
- For lngRow = 1 To UBound(arrMiddle)
- If arrMiddle(lngRow + 1, lngCol - 2) = "" Then Exit For
- arrMiddle(lngRow, lngCol) = arrMiddle(lngRow + 1, lngCol - 2) - arrMiddle(lngRow, lngCol - 2)
- If lngMaxRows < arrMiddle(lngRow, lngCol) Then lngMaxRows = arrMiddle(lngRow, lngCol)
- Next
- Next
-
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- '初始化结果集
- ReDim arrResult(0 To lngMax + 1, 0 To lngMaxRows) As Long '最终结果架构
- For lngCol = 1 To lngMaxRows
- arrResult(0, lngCol) = lngCol
- Next
- For lngRow = 1 To lngMax + 1
- arrResult(lngRow, 0) = lngRow - 1
- Next
-
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- '规整结果数据
- For lngCol = 1 To UBound(arrMiddle, 2) - 1 Step 3
- For lngRow = 1 To UBound(arrMiddle)
- If arrMiddle(lngRow, lngCol + 1) <> "" And arrMiddle(lngRow, lngCol + 2) <> "" Then
- lngRowID = arrMiddle(lngRow, lngCol + 1) + 1
- lngColID = arrMiddle(lngRow, lngCol + 2)
- arrResult(lngRowID, lngColID) = arrResult(lngRowID, lngColID) + 1
- End If
- Next
- Next
-
- shResult.Range("C208:AI" & Rows.Count).ClearContents
- shResult.Range("C208").Resize(UBound(arrResult) + 1, UBound(arrResult, 2) + 1) = arrResult
- End Sub
复制代码 |
评分
-
1
查看全部评分
-
|