2016-10-25 76 views
-1

我有2个工作表。 Sheet1有3列A,B & C,其值为range_start_number(A),range_end_number(B)和range_name(C)。VBA宏查找单元格中的值是否在两个单元格的值的范围内

Sheet2有1列A和数字列表。

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

请参阅下面的示例数据输入(工作表1 &工作表2)和预期输出(工作表2)。

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 
+2

你好,欢迎来到StackOverflow。请花一些时间阅读帮助页面,尤其是名为[“我可以询问什么主题?”(http://stackoverflow.com/help/on-topic)和[“我应该问什么类型的问题避免问?“](http://stackoverflow.com/help/dont-ask)。更重要的是,请阅读[Stack Overflow问题清单](http://meta.stackexchange.com/q/156810/204922)。您可能还想了解[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。并且包括你正在努力通过的代码...所以人们可以提供帮助。 – Rdster

+0

为什么10属于范围I-6两次? -6是什么意思? – dev1998

+0

我编辑了这个问题。这是一个错误。谢谢。 – user3531676

回答

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为空白。

+0

谢谢。有效。除了一个范围内的数字的'位置'总是从范围开始。如果'range_start'> ='number',那么abs(range_start-number)+1 else(number-range_start)+1 end – user3531676

+0

@ user3531676编辑代码以便这样操作,删除Min函数并更改生成的行操作只是'Position = Abs(Cells(Row,5) - Cells(rRow,1))+ 1'如果这解决了您的答案,请接受它。 – Salvador

+1

一切都很好。只是你的代码第10行中的一个小问题。 '位置'重复。我修好了。 – user3531676

相关问题