1

関数を変更しました。

4500 行以上を含むシートを含む多くのワークブックがあり、関数を使用して 2 つの指定された値を (境界として) 検索します。次に、行を範囲として選択します。最後に、その範囲で何でもします。関数:

Function GeoM(A, B)

Application.Volatile    
Dim x As Integer
Dim y As Integer
Dim rng As Range

x = Application.WorksheetFunction.Match(A, Range("B:B"), 0) ' looking in col B
y = Application.WorksheetFunction.Match(B, Range("B:B"), 0) ' looking in col B

Set rng = Range(Cells(x, 18), Cells(y, 18)) 'Im working on col 18
GeoM = Application.WorksheetFunction.GeoMean(rng)
End Function

問題は、このコードはGeoMeann を除いて問題なく動作することです。データの範囲が比較的小さい場合 (データ セルの数)、値が返されることに気付きました。ただし、範囲が約よりも大きい場合。126 セルの場合、 が返されます#value!

私は立ち往生しており、この問題の解決に取り組んでいます。関数はGeoMean特定の数のデータに制限されていますか?

ありがとう

4

2 に答える 2

2

このMr Excelスレッドで検証された、以前のExcelバージョン(xl03でテスト)のテストには170文字の制限があるようです

(XL10 はより長いデータセットで正常に動作しました)

私も試しました:

  • 使用するEvaluate
  • 1D 配列の使用

失敗したサンプル

Dim X
Set rng1 = Range("A1:A171")
MsgBox Evaluate("GeoMean(A1:A171)")
X = Application.Transpose(rng1)
MsgBox Application.WorksheetFunction.GeoMean(X)

無駄に。

だから私はあなたの2つの回避策は次のいずれかだと思います:

  1. VBA 経由で数式を Excel に挿入し、この結果を使用する
  2. MrExcel スレッドに従って、 の派生を使用しますGeoMean=EXP(AVERAGE(LN(Range)))

推奨されるアプローチ

MsgBox Evaluate("EXP(AVERAGE(LN(A1:A171)))")
于 2013-02-10T02:03:01.367 に答える
1

のおかげでbrettdj、私は機能を修正し、現在は動作しています:

Function GeoM(A, B)

Application.Volatile
Dim x As Integer
Dim y As Integer
Dim rng As Range
Dim LnValue As Double
Dim count As Integer

x = Application.WorksheetFunction.Match(A, Range("B:B"), 0) 'look in col. B
y = Application.WorksheetFunction.Match(B, Range("B:B"), 0) 'look in col. B

Set rng = Range(Cells(x, 18), Cells(y, 18)) 'set range of rows on col# 18

Do
  LnValue = LnValue + Math.Log(Cells(x, 18)) 'calculates sum of ln(value)
  x = x + 1
  count = count + 1   'calculates the total number of values
Loop Until x > y      'stop when x (upper row#) is greater than y (lower row#)

GeoM = Math.Exp((1 / count) * LnValue) 'GeoMean formula

End Function

この関数は、指定された列で上限と下限として 2 つの値を検索します (注: その列で値を繰り返してはならないことを意味します。つまり、列には一意の値が必要です)。GeoMean次に、値が同じ範囲の行にある他の列の値を見つけます。

于 2013-02-10T13:38:47.343 に答える