- PR -

Excelの名前の定義の参照の範囲が””で囲まれてしまう

投稿者投稿内容
らら
常連さん
会議室デビュー日: 2005/01/21
投稿数: 28
お住まい・勤務地: 埼玉県
投稿日時: 2007-01-19 13:33
VB.NETでExcelオブジェクトを使用して「名前の定義」を行おうとしています。

1、範囲の参照先をStringで以下のように作成し、
Dim sRefer As String = "$S$7,$S$10,$S$25"

2、名前の定義時に作成したStringをセットしてます。
Dim xlName As Excel.Name = xlNames.Add(Name:="rankin", RefersToR1C1:=sRefer)

すると、作成されたエクセルファイルを開いて名前の定義を確認してみると
参照範囲="$S$7,$S$10,$S$25" とダブルクオーテーションで括られた形で設定されており
この名前の定義を使用して計算(実際にはRANK(S7,rankin))するとエラーになってしまいます。
正しい設定の形は
参照範囲=$S$7,$S$10,$S$25 とならなくては正常に計算できないことはわかっているのですがコーディング上どのように記述してよいかわかりません。

回避方法、対応方法ご存知の方、ぜひともご教授お願いいたします。


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-19 17:45
引用:

ららさんの書き込み (2007-01-19 13:33) より:

2、名前の定義時に作成したStringをセットしてます。
Dim xlName As Excel.Name = xlNames.Add(Name:="rankin", RefersToR1C1:=sRefer)


RefersToR1C1 パラメータは、Excel.Range のインスタンスで指定します。
文字列型で指定してはなりません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
らら
常連さん
会議室デビュー日: 2005/01/21
投稿数: 28
お住まい・勤務地: 埼玉県
投稿日時: 2007-01-19 18:28
じゃんぬねっとさん いつもご回答ありがとうございます。

文字列型では指定してはならないのですね。

Excel.Rangeインスタンスを指定するとのヒントを元に"$C$7,$C$10"といった
複数セルをRangeにセットする方法を調べてみます。

また、状況報告いたしますのでまた御教授お願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-19 18:42
引用:

ららさんの書き込み (2007-01-19 18:28) より:

Excel.Rangeインスタンスを指定するとのヒントを元に"$C$7,$C$10"といった複数セルをRangeにセットする方法を調べてみます。


Excel.Worksheet クラスに Range プロパティというものがあります。
こちらを利用するのが、最も簡単な方法です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
らら
常連さん
会議室デビュー日: 2005/01/21
投稿数: 28
お住まい・勤務地: 埼玉県
投稿日時: 2007-01-23 16:38
じゃんぬねっとさん

おかげさまで複数セルの指定の方法がわかりました。ありがとうございます。

xlRange1とxlSheet2はあらかじめ上位で宣言しておき
xlRange1 = xlSheet2.Range("$C$7,$C$10,$C$12")
と複数セルを指定して、
Dim xlName As Excel.Name = xlNames2.Add(Name:="rankin", RefersToR1C1:=xlRange1)
で無事に定義されていることが確認できました。

あと、ひとつ教えていただきたいのですが、

名前の定義で指定したい参照先が複数あるのですが、参照先指定可能数があるらしく
全部のセルを1つの名前の定義では指定できないので複数に分割して名前の定義を行い、
最終的に複数の名前の定義を参照する名前の定義を作成しようと思いました。

定義1:名前_rankin1 参照先_$C$7,$C$10,,,,,,
定義2:名前_rankin2 参照先_$D$7,$D$10,,,,,,
定義3:名前_rankin3 参照先_$E$7,$E$10,,,,,,
定義4:名前_rankin 参照先_rankin1,rankin2,rankin3

定義4を行おうと、
xlRange1 = xlSheet2.Range("rankin1,rankin2,rankin3")
と設定してAddし定義1.2.3の名前だけを参照先として渡したかったのですが
定義1.2.3の参照先の羅列がそのまま渡されてしまい指定可能数オーバーのためか途中で切れてしまいます。
名前の定義を参照する名前の定義をするにはどのように指定してあげればよいのでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-23 19:47
引用:

ららさんの書き込み (2007-01-23 16:38) より:

名前の定義で指定したい参照先が複数あるのですが、参照先指定可能数があるらしく全部のセルを1つの名前の定義では指定できないので複数に分割して名前の定義を行い、最終的に複数の名前の定義を参照する名前の定義を作成しようと思いました。


指定の数に上限があるのですか?
それは存じませんでした。

引用:

xlRange1 = xlSheet2.Range("rankin1,rankin2,rankin3")
と設定してAddし定義1.2.3の名前だけを参照先として渡したかったのですが
定義1.2.3の参照先の羅列がそのまま渡されてしまい指定可能数オーバーのためか途中で切れてしまいます。


Excel の方では実際にどこまで設定できるか確認されたのでしょうか?
Excel 側の限界なのか、Office PIA 側の限界なのかが知りたいです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
らら
常連さん
会議室デビュー日: 2005/01/21
投稿数: 28
お住まい・勤務地: 埼玉県
投稿日時: 2007-01-24 13:32
じゃんぬねっとさん

確認してみました。
Excelを起動して「挿入」から名前の定義の操作を行い「参照の範囲」を様々入力して確認してみましたが、入力文字数が390バイトが限界でそれ以上入力するとクリアされてしまいました。
Excelの制限のようです。(文献ではみつけることはできませんでしたが)

複数のセルがばらばらに位置しているから参照の範囲が長くなってしまっているので、
連続するようにセルを再配置させて(セル1:セル2)で指定するように
軌道修正しようかと思っています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-24 13:47
引用:

ららさんの書き込み (2007-01-24 13:32) より:

Excelを起動して「挿入」から名前の定義の操作を行い「参照の範囲」を様々入力して確認してみましたが、入力文字数が390バイトが限界でそれ以上入力するとクリアされてしまいました。
Excelの制限のようです。(文献ではみつけることはできませんでしたが)


はい、Excel アプリケーション自体の制限であれば、致し方ないですね。

引用:

複数のセルがばらばらに位置しているから参照の範囲が長くなってしまっているので、
連続するようにセルを再配置させて(セル1:セル2)で指定するように
軌道修正しようかと思っています。


その前に、名前定義はあまり複雑な Range に使用しない方が良いです。
何に利用されるかわかりませんが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)