Page 755 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼基準値から最も離れた数値の検索 siira 03/2/17(月) 10:19 ┗Re:基準値から最も離れた数値の検索 Jカーター 03/2/17(月) 11:07 ┗Re:基準値から最も離れた数値の検索 Jカーター 03/2/17(月) 11:18 ┗Re:基準値から最も離れた数値の検索 Jカーター 03/2/17(月) 11:27 ┗Re:基準値から最も離れた数値の検索 siira 03/2/17(月) 11:52 ┗Re:基準値から最も離れた数値の検索 Jカーター 03/2/17(月) 13:18 ┗Re:基準値から最も離れた数値の検索 siira 03/2/17(月) 14:47 ─────────────────────────────────────── ■題名 : 基準値から最も離れた数値の検索 ■名前 : siira ■日付 : 03/2/17(月) 10:19 -------------------------------------------------------------------------
はじめまして、ここには初めて質問するものですが、よろしくお願いします。 基準値を(A1)、検索範囲を(B1:B8)としたとき、 A1から最も離れた数値を検索範囲から検索し、(A2)に書き込みたいのです。 基準値からの絶対値を、一個ずつ調べる方法[VBA]は考えたのですが、 もっと簡単に調べる方法はあるのでしょうか? Excelの関数には詳しくないので分からないのですが、 もしそういった関数があれば教えてください。 よろしくお願いします。 ============================================== A B 1 -3 -2 -1 0 1 2 3 4 ============================================== '下のマクロを実行すると、(A2)に -3 が書き込まれる。 Sub TheAbsoluteValue() Dim ArrayNum() As Variant ' Dim ArrayAbs() As Variant ' Dim Row As Byte ' Dim Rows As Byte ' Dim Maxim As Byte ' ReDim ArrayAbs(1 To 8, 1 To 1) ReDim ArrayNum(1 To 8, 1 To 1) ArrayNum = Range("B1:B8").Value For Row = 1 To 8 ArrayAbs(Row, 1) = Abs(Cells(1, 1) - ArrayNum(Row, 1)) Next Row Maxim = 0 For Row = 1 To 8 If Maxim < ArrayAbs(Row, 1) Then Rows = Row Maxim = ArrayAbs(Row, 1) End If Next Row Cells(2, 1) = ArrayNum(Rows, 1) End Sub |
こんにちは。 こんな配列数式しか考えつきませんでした。 =SUM((MAX(ABS($B$1:$B$8-$A$1))=ABS($B$1:$B$8-$A$1))*($B$1:$B$8)) 的はずれでしたらすいません。 |
再びこんにちは。 前レスの数式をB列行数可変でVBAでやるなら Sub test() Dim strA As String strA = Range("B1", Range("B65536").End(xlUp)).Address Range("A2").Value = _ Evaluate("SUM((MAX(ABS(" & strA & "-$A$1))=ABS(" _ & strA & "-$A$1))*(" & strA & "))") End Sub 違ったらすみません。 |
ごめんなさい。 同じ数字が複数有る場合を考えてませんでした。 ボツにしてください。 失礼しました。 |
▼Jカーター さん: >ごめんなさい。 >同じ数字が複数有る場合を考えてませんでした。 >ボツにしてください。 > >失礼しました。 早速のレスありがとうございます。 すいませんでした、説明不足で。同じ数値も数個ほどあります。 実際は列数も多いのですが、これは応用で何とかなりますので・・・ しかし、やっぱり数式バーを利用すれば、出来るんですね。 数式バーを利用できれば、マクロを呼び出さなくてもいいので、たすかります。 少し参考にして、やってみます。 |
こんにちは。 とりあえずこんな配列数式でどうでしょう? =INDEX(B1:B8,MATCH(MAX(ABS(B1:B8-A1)),ABS(B1:B8-A1),0),1) ただし、基準値0に対しての-5と5のような場合は 行が小さい方が検索されてしまうので、もう一ひねり必要かもしれません。 違ったらすいません。 |
▼Jカーター さん: >こんにちは。 >とりあえずこんな配列数式でどうでしょう? > >=INDEX(B1:B8,MATCH(MAX(ABS(B1:B8-A1)),ABS(B1:B8-A1),0),1) > >ただし、基準値0に対しての-5と5のような場合は >行が小さい方が検索されてしまうので、もう一ひねり必要かもしれません。 > >違ったらすいません。 ありがとうございます。 これで、数値が変更しても再計算のたびに、マクロを起動しなくてすみます。 数式バーを使うと絵が沢山出てきて苦手なんですが、こんなに簡潔に出るなら もう少し勉強しないといけませんね。 |