1

Excel でこの配列数式に少し問題があります。

関連のない関数に適用される乗数を含む全体的な配列の行番号と列番号に対応する 2 つの範囲 (データの列) があります。列/行参照から見つかった最小乗数を見つけたいです。

列番号の範囲A1:A10を 、行番号の範囲A15:A24を 、乗数配列を としK4:M23ます。これを行う非効率的な方法は次のとおりです。

=MIN(INDEX(K4:M23,A15,A1),INDEX(K4:M23,A16,A2),etc...)

...しかし、特にエラーをチェックする場合など、これは面倒になります。この関数が数千回呼び出された場合のメモリ使用量は言うまでもありません (たまたまです)。

そこで、配列関数について考えました:

{=MIN(INDEX(K4:M23,A15:A24,A1:A10))}

...しかし、これは配列の最初の要素のみを返します。この関数がマルチセル配列数式として入力された場合、正しく処理されますが、MIN各特異要素にそのまま適用され、関数は最小値の単一値ではなく、元の配列サイズを返します。

これを回避する方法はありますか?

4

3 に答える 3

1

私があなたの質問を正しく理解していれば、次の VBA 関数はあなたが望むものを生成するはずです。

この関数は 3 つの引数を取ります。配列範囲への参照です。行番号範囲への参照。および列番号範囲への参照。行番号と列番号に対応するセルの値の最小値を返します。

  Function ArrayMin(MatrixRange As Range, RowRange As Range, ColRange As Range) As Double
      Application.Volatile
      Dim colNum As Long
      Dim rowNum As Long
      Dim cellVal As Double
      Dim MinVal As Double
      Dim i As Long
      MinVal = 1000000                               'a number >= than max array range value
      For i = 0 To ColRange.Rows.Count - 1
          rowNum = RowRange(1, 1).Offset(i, 0).Value
          colNum = ColRange(1, 1).Offset(i, 0).Value
          cellVal = MatrixRange(rowNum, colNum).Value
          If cellVal < MinVal Then
              MinVal = cellVal
          End If
      Next
      ArrayMin = MinVal
  End Function

ワークブックに新しい標準 VBA モジュールを挿入し、コードを貼り付けることで、標準的な方法でインストールできます。

于 2013-03-12T06:38:33.497 に答える