[[20151128020720]] 『指定した列の範囲から最も近い値を探し、その隣ax(ポッキー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定した列の範囲から最も近い値を探し、その隣の列の値を出したい。』(ポッキー)

指定した列の範囲から最も近い値を探し、その隣の列の値を出したいと考えています。

下記のようなファイルがあるとします。
例えば、no.1はセル「I2」にデータ「x」があります。「x」に最も近い値を「B2:10」の検索範囲から探し、隣接する「A2:10」からその対応番号を「J2」にだします。
同様にno.2やno.3も、それぞれの検索範囲で探し対応番号をだしていきたいと考えています。

  A        B        C        D       E        F        G      H     I     J
1no.1の対応番号  no.1の検索範囲  no.2の対応番号 no.2の検索範囲 no.3の対応番号  no.3の検索範囲                         データ  対応番号
2                                                          no.1    x
3                                                          no.2    y
4                                                          no.3    z
5
6
7
8
9
10

当方マクロの知識はありませんが、基本的な関数は使えます。

ご教示いただければ幸いです。

Excel: 2016、OS: Macです。

< 使用 Excel:unknown、使用 OS:unknown >


 近い値が複数あった場合はどうするのか?
(ねむねむ) 2015/11/28(土) 10:15

各検索範囲内で、同じ値はありません。
よって、最も近い値は必ず1つになると思います。
まずいでしょうか。
(ポッキー) 2015/11/28(土) 15:36

 では検索値が10で、表の中に8と12があった場合はどちらとするのか?
 どちらも10との差は2になるが。
(ねむねむ) 2015/11/28(土) 19:02

ご指摘ありがとうございます。
かなり細かな値のため差が同じものはないのですが、ある場合は値の小さい方を出したいと考えています。

(ポッキー) 2015/11/28(土) 19:11


 各検索範囲は昇順に並んでいるものとする。

 J2セルに
 =INDEX(INDEX(A$2:E$100,,(ROW(A1)-1)*2+1),MATCH(1,(ABS(I2-INDEX(B$2:F$100,,(ROW(A1)-1)*2+1))=MIN(ABS(I2-INDEX(B$2:F$100,,(ROW(A1)-1)*2+1))))*1,0))
 と入力してShiftキーとCtrlキーを押しながらEnterキーで式を確定してくれ。
 (確定後、式が{}で囲まれればOK)
 その後、下へフィルコピーしてくれ。

 なお、下記でもよい。

 J2セル:=INDEX(A$2:A$100,MATCH(1,(ABS(I2-B$2:B$100)=MIN(ABS(I2-B$2:B$100)))*1,0))
 J3セル:=INDEX(C$2:C$100,MATCH(1,(ABS(I3-D$2:D$100)=MIN(ABS(I3-D$2:D$100)))*1,0))
 J4セル:=INDEX(E$2:E$100,MATCH(1,(ABS(I4-F$2:F$100)=MIN(ABS(I4-F$2:F$100)))*1,0))
 こちらもShift+Ctrl+Enterで式を確定。

 追記
 もし近い値が必ず一つになる場合であれば検索範囲が昇順である必要はない。
 上記の式では同じ差になる場合、上の方にあるものを持ってくるようになっているため。
(ねむねむ) 2015/11/29(日) 10:13

ありがとうございます。
無事、うまくできました。
(ポッキー) 2015/11/30(月) 20:27

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.