VBAのABS機能に範囲を渡す


1

私はこのように見える機能を実行したいと思います

Selection.FormulaArray = "=GEOMEAN(ABS((C646:E646)))"

私の範囲は変化し続けるので、私はこのように見える変数として範囲を渡したいです。

Range1 = Range("C646", Range("C646").Offset(0, 2)).Address(False, False)
Selection.FormulaArray = "=GEOMEAN(ABS(Range1))"

#NAMEとしてエラーが発生しますか。

しかし、私がこれを渡すなら

x = Range("C646").Address(False, False)    
Y = Range("C646").Offset(0, 2).Address(False, False)    
Selection.FormulaArray = "=GEOMEAN(ABS((x:y)))"

#VALUEとしてエラーになります。

誰かが手伝ってくれる?

回答:


1

ラインを交換してください Selection.FormulaArray = "=GEOMEAN(ABS(Range1))" 次のようにコードに記述します。

Selection.FormulaArray = "=GEOMEAN(ABS(" & Range1 & "))"

私はこれをテストしていませんが、これは正しいようです。 (注:あなたの命名規則は、 Range1 実際には範囲ではなく文字列です。


ありがとう私はあなたが言ったように使ってみました。シングルレンジにはよく出ました。私がコピーしようとしたとき、それは私にすべての範囲のために同じ価値を与えます。私のコードは次のようになりますRange1 = Range( "C1467"、Range( "C1467")。Offset(0、2))Address(False、False)Range( "M1467")Selection.FormulaArray = "= GEOMEAN( ABS( "& Range1&")) "Selection.AutoFill保存先:= Range(" M1467:M1667 ")、タイプ:= xlFillDefault Range(" M1467:M1667 ")を選択します。だから私はこの数式を持つ各セルに移動してCtrl + Shift + Enterキーを押す必要がありますそしてそれから私は正しい値を取得します。数式の配列はうまくいかないようです。
NK1

0

ABS 範囲ではなく数値の絶対値を返すだけです。おそらくあなたは欲しい AVEDEV データ点の絶対偏差の平均値からの平均値を返す関数。

GEOMEANの場合は、それぞれの値にABSを適用して関数に渡す新しいRangeを構築するコードで範囲をループする必要があります。

またはこれによると StackOverflow回答 別の式を使う:

EXP(AVERAGE(LN(A1:A171)))

ログ値の平均値(dB)を計算しようとしているので、幾何平均を使用する必要があります。 GEOMEANは負の数には機能しないので、その数を絶対値に変換してからGEOMEAN関数を適用しようとしています。キャッチは式Selection.FormulaArray = "= GEOMEAN(ABS((C646:E646)))"はここで述べた範囲の値に対しては完璧に働きます。しかし、私はn個の範囲を持っているので、この式をループに入れてn個の範囲を計算したいと思います。これは起こっていません!
NK1

@ user216576がgeomeanに関する詳細情報を追加しました
Brad Patton

私は素朴なExcel VBAユーザーです。だからこの問題を克服するために私は回避策を試みています。これは各セルの値を絶対値に変換してからGEOMEANを計算します。いくつかの範囲で負の値があるので、最初のセルの内容に基づいて負の符号を付けます。この方法は、誰かが直接的な解決策を手助けしてくれることを願っています。
NK1

今晩はもっと時間をかけてからVB関数を作成しようと思いました。おそらく、新しい列を作成してすべての値にABSを適用してから、GEOMEANの正の数を取得する必要があります。すみません、私はそれ以上助けになることができませんでした。
Brad Patton
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.