|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
不是太明白楼主的需求,按照给定的条件,好象没有符合条件的记录,于是我就在下面模拟了几条记录,不知是不是能达成楼主的目的。
- Sub Query()
- Dim arrDetail()
- Dim arrA(), arrB(), arrC()
- Dim iRow As Integer
- Dim iName As String
- Dim CompareType As String '1=正差,2=负差,3=正负差,4=总差
- Dim strPrompt As String
- strPrompt = "1=正差,2=负差,3=正负差,4=总差"
- CompareType = InputBox(strPrompt, "请输入查询类型", 4)
- If CompareType = "" Then Exit Sub
- If InStr("/1/2/3/4/", CompareType) = 0 Then
- MsgBox ("输入错误!")
- Exit Sub
- End If
- m = 0
- Sheet1.Activate
- With ActiveSheet
- iRow = .UsedRange.Rows.Count
- .Range("R4:AA" & iRow).ClearContents
- iName = .Range("I2")
- arrDetail = .Range("A7:J" & iRow).Value
- arrA = .Range("K2:O2").Value
- arrB = .Range("K4:O4").Value
- Select Case CompareType
- Case Is = "1"
- For i = 1 To UBound(arrDetail, 1)
- For j = 1 To 4
- If Round(arrA(1, j) - arrDetail(i, j + 5), 2) <> Round(arrB(1, j), 2) Then
- Exit For
- End If
- If j = 4 Then
- For p = 1 To 10
- .Cells(4 + m, 17 + p) = arrDetail(i, p)
- Next
- m = m + 1
- End If
- Next
- Next
- Case Is = "2"
- For i = 1 To UBound(arrDetail, 1)
- For j = 1 To 4
- If Round(arrDetail(i, j + 5) - arrA(1, j), 2) <> Round(arrB(1, j), 2) Then
- Exit For
- End If
- If j = 4 Then
- For p = 1 To 10
- .Cells(4 + m, 17 + p) = arrDetail(i, p)
- Next
- m = m + 1
- End If
- Next
- Next
- Case Is = "3"
- For i = 1 To UBound(arrDetail, 1)
- For j = 1 To 4
- If Abs(Round(arrA(1, j) - arrDetail(i, j + 5), 2)) <> Round(arrB(1, j), 2) Then
- Exit For
- End If
- If j = 4 Then
- For p = 1 To 10
- .Cells(4 + m, 17 + p) = arrDetail(i, p)
- Next
- m = m + 1
- End If
- Next
- Next
- Case Is = "4"
- For i = 1 To UBound(arrDetail, 1)
- If Round(Abs(arrA(1, 5) - arrDetail(i, 10)), 2) = Round(arrB(1, 5), 2) Then
- For p = 1 To 10
- .Cells(4 + m, 17 + p) = arrDetail(i, p)
- Next
- m = m + 1
- End If
- Next
- End Select
- End With
- End Sub
复制代码
|
|