2012-03-13 5 views
1

こんにちは、XML/SoapでExcel(Version 2003)に到着し、操作されるデータ範囲の設定が少し複雑です主なデータシートは "shData"というコードネームで、シート名は "Data"(これまでのところ、hm?)であり、約200の異なるデータ範囲を含んでいます。表示ページのセットアップやshSetupと呼ばれているデータで Aデータ範囲は、次のようになります。Excel VBA:ダイナミックレンジ割り当てのエラー制御

ID Last First Group   
1  Dwyer Barb  A 
2  King Fu  A 
3  Rea  Di A. C 

は、の範囲は、「!データDay0_Users」としてローカルに命名されたとしましょう

別の範囲、(データがない場合)、「データDay1_Usersは!」ちょうどヘッダかもしれないと言う:

ID Last First Group 

これらの範囲はに挿入またはから削除され、VBAの中からサイズを変更したので、私は柔軟な参照を必要とします機構。 ListBoxはListFillRangeとして名前付き範囲を使用できます。そのためには、データ内のものを参照するが、ヘッダー行を除外するためにローカル名を定義する。shSetup name "lbSomeListbox"、OFFSET(Data!Day0_Users、1、、ROWS(Data!Day0_Users) -1) これまでのところ、とても良いです。明らかに、私の例で "Data!Day1_Users"のようにDataの範囲が空の場合、そのような参照はエラーを生成します。このような場合は、参照を空の配列( "Setup!EmptyRange5Col"として定義されています)に置き換えたい場合は、再び " - "部分だけを返すData!EmptyRange5Colへのオフセット参照です。

Empty Empty Empty Empty 
-  -  -  - 
は、私は今、優れ誤り制御メカニズムを使用して名前と私の地元の範囲を定義しようとしましたが、それは動作しません - offset'edデータを使用するか、私の空の配列に置き換える必要があり、次の

=IF(ISERROR(OFFSET(Data!Day0_Users, 1, , ROWS(Data!Day0_Users)-1)), Setup!EmptyRange5Col, OFFSET(Data!Day0_Users, 1, , ROWS(Data!Day0_Users)-1)) 

= ISREF(IF(IsError .....)を使用してワークシート自体に同じ数式を使用した場合、それは常に真と評価され、ISER RORだけでも常に期待通りの偽りを評価します。 しかし、私が名前の定義に入れるとすぐに参照が機能せず、shSetup.Names(...)を呼び出します。RefersToRangeは実行時エラーなどを生成します。

Excelには使用に関する文書化されていない制限がありますか?名前のための公式か私は愚かなのですか?私はこれを約2時間見ていて、光を見ることはできません。あなたが私を正しい方向に押し込めるのであれば、本当に感謝しています。

事前のおかげで、 ステファン

+0

2つの所見。 (1) 'OFFSET(データ!Day0_Users、1、、ROWS(データ!Day0_Users)-1)'。欠けているパラメータ、 'cols'が必要です。 (2)IFの構文はIF(logical_test、[value_if_true]、[value_if_false])です。私はRangeを返すためにそれを使用しようとしたことはありません。あなたはあなたが望むようにこの作品を手に入れましたか?私の実験によれば、 '= OFFSET(参照、行、列、[高さ]、[幅])'で、高さと幅はあなたが提供する値を1つに評価します。 –

+0

ありがとう、トニー。欠落しているパラメータは厳密には正しいと言えますが、Excelはあまり気にしないようですが、両方のバージョンが機能します。私はISERROR()が常にTRUEと評価されることを発見しました。しかし、ISREF()は、ISERRORには#REFも通常は含まれていると思っていましたが、まさに私が望むものです。とにかく、自分の疑問に答えるつもりです。 – ExternalUse

答えて

1

申し訳ありませんが、私は私の質問を撤回したいのですが... でもOFFSETから無効な参照(ただし)は、(ISERRORとチェックに含まれている#REFを返します)、そうすることは機能しません。これは、ここに私の名前の範囲のReferToパートの期待どおりに動作:質問の

=IF(ISREF(OFFSET(Data!Day0_Users, 1, 0, ROWS(Data!Day0_Users)-1)), OFFSET(Data!Day0_Users, 1, 0, ROWS(Data!Day0_Users)-1), Setup!EmptyRange5Col) 

申し訳ありません - 私はいくつかの睡眠を必要とし、私は思います。

関連する問題