2016-10-25 146 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

相關問題