VBA宏,用于查找单元格中的值是否在两个单元格的值范围内

时间:2016-10-25 11:05:46

标签: excel vba excel-vba macros

我有2张。 Sheet1有3列A,B和B列。 C的值为range_start_number(A),range_end_number(B)和range_name(C)。

Sheet2有1列A和数字列表。

如何找到sheet2中的哪些数字属于sheet1中的哪个范围?此外,数字在相应范围内的位置也是如此。输出应该是:  '范围名称' - '范围内的位置'

请参阅下面的示例数据输入(sheet1& sheet2)和预期输出(在sheet2中)。

    Sheet1  (input) 
A   B   C
10  17  rangeA
17  15  rangeB
30  12  rangeC
8   9   rangeD
11  9   rangeE
36  50  rangeF
40  45  rangeG
31  32  rangeH
5   25  rangeI
25  26  rangeJ

Sheet2 (input)
A
10
11
12
13
14
15
16
17
18
19
22
23
24
25



 Sheet2 (output)            
A   B   C   D   E
10  rangeA-1    rangeI-6      rangeE-2
11  rangeA-2    rangeI-7      rangeE-1
12  rangeA-3    rangeC-19   rangeI-8    
13  rangeA-4    rangeC-18   rangeI-9    
14  rangeA-5    rangeC-17   rangeI-10   
15  rangeA-6    rangeB-3    rangeC-16   rangeI-11
16  rangeA-7    rangeB-2    rangeC-15   rangeI-12
17  rangeA-8    rangeB-1    rangeC-14   rangeI-13
18  rangeC-13   rangeI-14       
19  rangeC-12   rangeI-15       
22  rangeC-9    rangeI-18       
23  rangeC-8    rangeI-19       
24  rangeC-7    rangeI-20       
25  rangeC-6    rangeI-21   rangeJ-1

1 个答案:

答案 0 :(得分:0)

计算范围内的数字位置从输入值中减去范围数字中较小的数字

Sub RangeSub()
  Row = 1
  Do While True
    Column = 6
    If Not IsEmpty(Cells(Row, 5)) Then
      rRow = 1
      Do While True
        If Not IsEmpty(Cells(rRow, 1)) And Not IsEmpty(Cells(rRow, 2)) And Not IsEmpty(Cells(rRow, 3)) Then
          If (Cells(rRow, 1).Value <= Cells(Row, 5).Value And Cells(Row, 5).Value <= Cells(rRow, 2).Value) Or (Cells(rRow, 1).Value >= Cells(Row, 5).Value And Cells(Row, 5).Value >= Cells(rRow, 2).Value) Then
            Position = Abs(Cells(Row, 5) - Cells(rRow, 1)) + 1
            Cells(Row, Column).Value = Cells(rRow, 3).Value + "-" + Str(Position)
            Column = Column + 1
          End If
        Else
          Exit Do
        End If
        rRow = rRow + 1
      Loop
      Row = Row + 1
    Else
      Exit Do
    End If
  Loop
End Sub

代码使用同一工作表中的范围和输入,您可以将其更改为在不同工作表中工作。

A   B   C      D    E
10  17  rangeA      10
17  15  rangeB      11
30  12  rangeC      12
8   9   rangeD      13
11  9   rangeE      14
36  50  rangeF      15
40  45  rangeG      16
31  32  rangeH      17
5   25  rangeI      18
25  26  rangeJ      19
                    22
                    23
                    24
                    25

D为空白。