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

VBA宏以查找单元格中的值是否在两个单元格的值范围内,vba,excel,macros,Vba,Excel,Macros,我有两张床单。表1有3列A、B和C,其值为范围开始编号(A)、范围结束编号(B)和范围名称(C) 表2有1列A和编号列表 如何查找表2中的哪些数字属于表1中的哪些范围?此外,数字的位置也在相应的范围内。输出应为: “范围名称”-“范围中的位置” 数据输入(表1和表2)和预期输出(表2中)示例见下文 数值在范围内的位置通过从输入值中减去范围数值中较小的数值来计算 Sub RangeSub() Row = 1 Do While True Column = 6 If Not I

我有两张床单。表1有3列A、B和C,其值为范围开始编号(A)、范围结束编号(B)和范围名称(C)

表2有1列A和编号列表

如何查找表2中的哪些数字属于表1中的哪些范围?此外,数字的位置也在相应的范围内。输出应为: “范围名称”-“范围中的位置”

数据输入(表1和表2)和预期输出(表2中)示例见下文


数值在范围内的位置通过从输入值中减去范围数值中较小的数值来计算

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

D为空。

您好,欢迎来到StackOverflow。请花些时间阅读帮助页面,特别是命名和的部分。更重要的是,请阅读。您可能还想了解。并包含您试图通过的代码…以便人们能够提供帮助。为什么10属于rangeI-6两次?-6是什么意思?我已经编辑了这个问题。那是个错误。谢谢。谢谢。成功了。除了一个数字在一个范围内的“位置”总是从范围开始。如果'range\u start'>='number',则abs(range\u start-number)+1,否则(number-range\u-start)+1end@user3531676编辑代码使操作如此,删除最小函数,并将使操作的行更改为仅
Position=Abs(单元格(第5行)-单元格(箭头,1))+1
如果这解决了您的答案,请接受。一切正常。只是代码第10行中的一个小问题。“位置”重复出现。我已经修好了。
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