2016-10-25 9 views
-1

2枚あります。 Sheet1にはrange_start_number(A)、range_end_number(B)、およびrange_name(C)の値を持つ3つの列A、B & Cがあります。セル内の値が2つのセルの値の範囲内にあるかどうかを調べるVBAマクロ

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

こんにちは、歓迎、StackOverflow。ヘルプページ、特に[ここではどのトピックについて聞かせていただけますか?](http://stackoverflow.com/help/on-topic)と[質問しないでください。」](http://stackoverflow.com/help/dont-ask)。さらに重要なことは、[Stack Overflow question checklist](http://meta.stackexchange.com/q/156810/204922)をお読みください。また、[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)についても知りたいことがあります。そして、あなたが作業しようとしているコードを含めて...人々が助けることができるようにします。 – Rdster

+0

10がrangeI-6に2回属しているのはなぜですか? -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' then 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

関連する問題