過去ログ

                                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
 ───────────────────────────────────────  ■題名 : Re:基準値から最も離れた数値の検索  ■名前 : Jカーター  ■日付 : 03/2/17(月) 11:07  -------------------------------------------------------------------------
   こんにちは。
こんな配列数式しか考えつきませんでした。

=SUM((MAX(ABS($B$1:$B$8-$A$1))=ABS($B$1:$B$8-$A$1))*($B$1:$B$8))

的はずれでしたらすいません。
 ───────────────────────────────────────  ■題名 : Re:基準値から最も離れた数値の検索  ■名前 : Jカーター  ■日付 : 03/2/17(月) 11:18  -------------------------------------------------------------------------
   再びこんにちは。
前レスの数式を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

違ったらすみません。
 ───────────────────────────────────────  ■題名 : Re:基準値から最も離れた数値の検索  ■名前 : Jカーター  ■日付 : 03/2/17(月) 11:27  -------------------------------------------------------------------------
   ごめんなさい。
同じ数字が複数有る場合を考えてませんでした。
ボツにしてください。

失礼しました。
 ───────────────────────────────────────  ■題名 : Re:基準値から最も離れた数値の検索  ■名前 : siira  ■日付 : 03/2/17(月) 11:52  -------------------------------------------------------------------------
   ▼Jカーター さん:
>ごめんなさい。
>同じ数字が複数有る場合を考えてませんでした。
>ボツにしてください。
>
>失礼しました。

早速のレスありがとうございます。
すいませんでした、説明不足で。同じ数値も数個ほどあります。
実際は列数も多いのですが、これは応用で何とかなりますので・・・

しかし、やっぱり数式バーを利用すれば、出来るんですね。
数式バーを利用できれば、マクロを呼び出さなくてもいいので、たすかります。
少し参考にして、やってみます。
 ───────────────────────────────────────  ■題名 : Re:基準値から最も離れた数値の検索  ■名前 : Jカーター  ■日付 : 03/2/17(月) 13:18  -------------------------------------------------------------------------
   こんにちは。
とりあえずこんな配列数式でどうでしょう?

=INDEX(B1:B8,MATCH(MAX(ABS(B1:B8-A1)),ABS(B1:B8-A1),0),1)

ただし、基準値0に対しての-5と5のような場合は
行が小さい方が検索されてしまうので、もう一ひねり必要かもしれません。

違ったらすいません。
 ───────────────────────────────────────  ■題名 : Re:基準値から最も離れた数値の検索  ■名前 : siira  ■日付 : 03/2/17(月) 14:47  -------------------------------------------------------------------------
   ▼Jカーター さん:
>こんにちは。
>とりあえずこんな配列数式でどうでしょう?
>
>=INDEX(B1:B8,MATCH(MAX(ABS(B1:B8-A1)),ABS(B1:B8-A1),0),1)
>
>ただし、基準値0に対しての-5と5のような場合は
>行が小さい方が検索されてしまうので、もう一ひねり必要かもしれません。
>
>違ったらすいません。

ありがとうございます。
これで、数値が変更しても再計算のたびに、マクロを起動しなくてすみます。
数式バーを使うと絵が沢山出てきて苦手なんですが、こんなに簡潔に出るなら
もう少し勉強しないといけませんね。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 755