de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
Andy F
Andy F
質問

Excel評価関数は、間接使用時に#REFを返します

私は特定のセルの値に応じて、テキストとして数式を返す検索を持っています。

返される式(テキスト)は次のようになります。

SUM(INDIRECT("AF"&row()),INDIRECT("AG"&row()))

次に、式を評価するために EVALUATE()関数を使用しますが、 INDIRECT()を使用するため#REFエラーが発生します。

This Microsoft Support Page was the only reference that I could find to this particular problem, and it doesn't seem to offer an appropriate workaround.

a)間接の使用を避けるために数式を再構成するか、b)素敵な演奏のために EVALUATE()を取得するにはどうすればよいですか?

編集

ルックアップテーブルは次のようになります。

Type A                    SUM(INDIRECT("AF"&row()),INDIRECT("AG"&row()))
Type B                    SUM(INDIRECT("AF"&row()),INDIRECT("AG"&row()), INDIRECT("AH"&Row()))

別のシートでは、セルB1:200の内容はタイプAまたはタイプBのいずれかです。ルックアップはセルの値に基づいて数式文字列を返し、Bxに配置します。私は結果を与えるために文字列を評価します。


0 2011-10-27T21:17:01+00:00 4
Andy F
Andy F
編集された質問 28日 10月 2011 в 8:02
プログラミング
vba
excel
Charles Williams
28日 10月 2011 в 4:20
2011-10-28T16:20:03+00:00
さらに
ソース
編集
#56793240

OK 3回目の回答:

例のおかげで:これは、あなたが名前付き数式を評価するためにINDIRECTを使用しようとしており、INDIRECTが数式ではなく参照のみを処理しようとしているために失敗します。

You need to use EVALUATE instead, but there is no built-in EVALUATE worksheet function (the EVALUATE you are using in the defined name is an ancient XLM Macro function).
I suggest you use my EVAL VBA UDF instead

Public Function EVAL(theInput As Variant) As Variant
'
' if UDF evaluate the input string as though it was on this sheet
' else evaluate for activesheet
'
Dim vEval As Variant
Application.Volatile
On Error GoTo funcfail
If not IsEmpty(theInput) then
If TypeOf Application.Caller.Parent Is Worksheet Then
vEval = Application.Caller.Parent.Evaluate(Cstr(theInput))
Else
vEval = Application.Evaluate(cstr(theInput))
End If
If IsError(vEval) Then
EVAL = CVErr(xlErrValue)
Else
EVAL = vEval
End If
End If
Exit Function
funcfail:
EVAL = CVErr(xlErrNA)
End Function

typeA = SUM(Sheet3!RC1、Sheet3RC2)のような相対参照で定義された名前を使用します。

There are some "quirks" of EVALUATE that you should be aware of: see
http://www.decisionmodels.com/calcsecretsh.htm

2
0
Charles Williams
27日 10月 2011 в 9:58
2011-10-27T21:58:33+00:00
さらに
ソース
編集
#56793238

If I understand what you are trying to do correctly, why not get the resukt directly from the cell ..
I don't think you need indirect because you just need the text of the formula
(altho I am not sure what the ROW() is supposed to be doing)
SUM("AF"&row(),"AG"&row())

0
0
Charles Williams
28日 10月 2011 в 8:23
2011-10-28T08:23:14+00:00
さらに
ソース
編集
#56793239

If you just want to use a Defined Name to add column AF and AG on the current row then just use relative references (easier to define in R1C1 mode, then switch back to A1) Defined Name AndySum has Refersto formula of =SUM(RC32,RC33)
Then wherever you use AndySum in a formula it will add the contents of columns AF and AG on that row.

0
0
Tim Williams
28日 10月 2011 в 5:47
2011-10-28T17:47:46+00:00
さらに
ソース
編集
#56793241

Charlesの答えを拡張するには:この関数は検索を行い、行番号を評価します。私は数式(あなたの例では)最終的な結果を返すセルと同じ行から特定の値を合計することを意図していると仮定しています。

私のルックアップテーブルは次のようになります:

TypeA   SUM(B ,D) 
TypeB   SUM(C,D)

UDF:

Public Function GetAndRunCalc(CalcType As String)
Application.Volatile
    Dim ac As Object, rw, f

    On Error GoTo haveError

    If TypeOf Application.Caller.Parent Is Worksheet Then
        Set ac = Application.Caller
        rw = ac.Parent.Range(ac.Address).Row
        'adjust for your lookup table...
        f = Application.VLookup(CalcType, Sheet1.Range("B4:C5"), 2, False)
        If Not IsError(f) Then
            f = Replace(f, "", rw)
            GetAndRunCalc = ac.Parent.Evaluate(f)
        Else
            GetAndRunCalc = "Type??"
        End If
    Else
        GetAndRunCalc = "Must be called from worksheet cell"
    End If

    Exit Function

haveError:
    GetAndRunCalc = CVErr(xlErrValue)

End Function 
0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Денис Анненский
登録済み 1日前
2
365
登録済み 5日前
3
True Image
登録済み 6日前
4
archana agarwal
登録済み 1週間前
5
Maxim Zhilyaev
登録済み 1週間前
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属