tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルExcelのセル定義名の取得方法
記事No6358
投稿日: 2007/09/27(Thu) 15:16
投稿者ジーク
いつもお世話になっております
VB6時代からよく拝見させて頂いており
誠に助かっております。

現在、VB2005において
Excelのワークシート内に存在するセルの定義名を
取得する方法を探しています。

理由としは、特定のセル定義が存在する場合
そのセルに対して出力を行いたいからです。

セル定義名が存在しない場合、エラー処理が発生してしまう為
エラーが起こらないようにする為の確認処理として
使用したいと思っております


もしご存知の方、または上記のような処理を
別の方法で回避する方法をご存知の方
ご教授をお願い致します

[ツリー表示へ]
タイトルRe: Excelのセル定義名の取得方法
記事No6359
投稿日: 2007/09/27(Thu) 15:36
投稿者魔界の仮面弁士
> Excelのワークシート内に存在するセルの定義名を
> 取得する方法を探しています。

ワークブックまたはワークシートの Names を列挙するとか。

[ツリー表示へ]
タイトルRe^2: Excelのセル定義名の取得方法
記事No6360
投稿日: 2007/09/27(Thu) 17:20
投稿者ジーク
ご返答ありがとうございます

> ワークブックまたはワークシートの Names を列挙するとか。

Excel.Worksheet型のNamesでよろしいんでしょうか?

現在
 Dim xlsApp    As New Excel.Application
 Dim xlsBooks  As Excel.Workbooks = xlsApp.Workbooks
 Dim xlsBook   As Excel.Workbook  = xlsBooks.Open("XLSファイル名")
 Dim xlsSheets As Excel.Sheets    = xlsBook.Worksheets
 Dim xlsSheet  As Excel.Worksheet = xlsSheets.Item(1)

この様に記述してるんですが

Names を列挙とはxlsSheet.Namesを使用するという意味でしょうか?
Countが0なので取得出来ていないだけなのでしょうか?

[ツリー表示へ]
タイトルRe^3: Excelのセル定義名の取得方法
記事No6361
投稿日: 2007/09/27(Thu) 18:20
投稿者魔界の仮面弁士
> > ワークブックまたはワークシートの Names を列挙するとか。
> Excel.Worksheet型のNamesでよろしいんでしょうか?
または、Workbook 型の Names です。

> Names を列挙とはxlsSheet.Namesを使用するという意味でしょうか?
すべての定義の列挙が目的なら、xlsBook.Names の方が良いですよ。
xlsSheet 上の定義に限るなら、xlsSheet.Names でも良いですけど。

なお、上記の「xlsSheet 上の定義」というのは、
xlsSheet 上のセルを参照している名前、という意味ではなくて、
xlsSheet に対して定義された名前、という意味です。(わかりにくい表現…)

> Countが0なので取得出来ていないだけなのでしょうか?
0 ならば、そのシート/ブック上に定義されていない、ということだと思います。

[ツリー表示へ]
タイトルRe^4: Excelのセル定義名の取得方法
記事No6362
投稿日: 2007/09/27(Thu) 19:10
投稿者ジーク
ご返答ありがとうございます


> すべての定義の列挙が目的なら、xlsBook.Names の方が良いですよ。
> xlsSheet 上の定義に限るなら、xlsSheet.Names でも良いですけど。
ワークシートは1枚だけなのでxlsSheet.Names でやっていたのですが
xlsBook.Names を試しに使用したところCountが4と表示されました
ワークシート内には4つのセルに対して名前を指定してありますので
取得出来ているという認識をしました(xlsSheet.Names では依然、取得できません)
しかし、定義文字自体の取得をItem プロパティを使用したところ
indexエラーが起こりました(indexには0を指定しました)



> なお、上記の「xlsSheet 上の定義」というのは、
> xlsSheet 上のセルを参照している名前、という意味ではなくて、
> xlsSheet に対して定義された名前、という意味です。(わかりにくい表現…)
Range("TEST_CELL") を使用し印字はされるのを確認したんですがRange で使用している
"TEST_CELL" が「xlsSheet 上の定義」でよろしいのでしょうか?


申し訳ありませんがもう少しだけお付き合い頂けますでしょうか?
よろしくお願いします

[ツリー表示へ]
タイトルRe^5: Excelのセル定義名の取得方法
記事No6363
投稿日: 2007/09/27(Thu) 20:28
投稿者魔界の仮面弁士
> ワークシートは1枚だけなのでxlsSheet.Names でやっていたのですが
> xlsBook.Names を試しに使用したところCountが4と表示されました

『Excel 2007』の場合は、[数式]リボンの[名前の管理]をクリックしてください。
[範囲]が 'Sheet1' になっているなら、xlsSheet.Names でも xlsBook.Names でも
取得できますが、[範囲]が 'ブック' になっているなら、xlsBook.Names が必要です。

『Excel 2003 以下』の場合は、[挿入]メニューの[定義]を開いてください。
[名前]欄の右端に 'Sheet1' と書かれていれば、xlsSheet.Names でも xlsBook.Names でも
取得できますが、[名前]欄にシート名が無いなら、xlsBook.Names が必要です。


> しかし、定義文字自体の取得をItem プロパティを使用したところ
> indexエラーが起こりました(indexには0を指定しました)
Excel 系のオブジェクトは、0 ベースではなく、1 ベースで始まる事に注意してください。

番号が 1 から始まるのは、For ループの処理を
 For n = 0 To obj.Count - 1
ではなく、
 For n = 1 To obj.Count
のように、より単純に書けるようにするための仕様らしいです。



> Range("TEST_CELL") を使用し印字はされるのを確認したんですがRange で使用している
> "TEST_CELL" が「xlsSheet 上の定義」でよろしいのでしょうか?
いいえ。おそらく、その "TEST_CELL" は「xlsBook 上の定義」だと思いますよ。
(なぜならば、xlsSheet.Names の Count は 0 だったのですから)


なお定義名(Name オブジェクト)は、「セル参照」であるとは限りません。
「数式」や「定数」を保持している事もあります。
また、「セル参照」であったとしても、別のシート上のセルを参照している事もあります。

[ツリー表示へ]
タイトルRe^6: Excelのセル定義名の取得方法
記事No6364
投稿日: 2007/09/28(Fri) 08:40
投稿者ジーク
ご返答ありがとうございます

xlsBookの方で取得が出来ていたので
For Each を使用し xlsBook.Names を定義に格納し
そこからNameを取得し、配列へ格納することで
一旦すべての定義名を保持し
印字する場合はその配列を参照することで
有無を調べる方法を実現することが出来ました

長々とお付き合い頂きありがとうございました!

[ツリー表示へ]