[リストへもどる]
一括表示

投稿時間:2003/04/10(Thu) 09:15
投稿者名:ヨッシー
Eメール:
URL :
タイトル:
名前定義したセルの存在確認?
複数のシートに名前定義(例:定義1〜5)されたセルの範囲が存在します。
その名前定義されたセルにVBでデータベースから受け取った名前定義のセルの所にVBからデータを挿
入することはできたのですがその名前定義されたセルが存在するのかまたどのシートに存在しているの
か調べたいのですが方法が分かりません。教えて下さい。

投稿時間:2003/04/10(Thu) 09:57
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: 名前定義したセルの存在確認?
> 名前定義されたセルが存在するのかまたどのシートに存在しているのか
WorkbookオブジェクトのNamesコレクション、および
WorksheetオブジェクトのNamesコレクションが使えるかも。

投稿時間:2003/04/10(Thu) 11:50
投稿者名:ヨッシー
Eメール:
URL :
タイトル:
Re^2: 名前定義したセルの存在確認?
> > 名前定義されたセルが存在するのかまたどのシートに存在しているのか
> WorkbookオブジェクトのNamesコレクション、および
> WorksheetオブジェクトのNamesコレクションが使えるかも。

ありがとうございます。
なんとか以下のようにしてシート名を抽出することができました。
なにか他にいい方法がありましたら教えて下さい。

    Dim strCource   As String
    Dim xlsSheet    As Excel.Worksheet
    Dim kk As Integer
    Dim strSheet As String        'シート名
    Dim intPos As Integer

    Set xlsSheet = xlsBook.Worksheets(wwExcel.SheetName)

    strCource = "定義1"
    
    'BOOK全体での名前定義確認
    kk = xlsBook.Names.Count            'BOOK全体の名前定義数
    For ii = 1 To kk
        If xlsBook.Names.Item(ii).Name = strCource Then
            'セルの範囲からシート名抽出
            intPos = InStr(1, xlsBook.Names.Item(ii).Value, "!")
            strtt = Mid(xlsBook.Names.Item(ii).Value, 1, intPos - 1)
            'セルの範囲に"'"があるばあいがあるので"'"をなくす
            strtt = Replace(strtt, "'", "", 1)
            strSheet = Mid(strtt, 2, Len(strtt) - 1)
            Exit For
        End If
    Next ii

投稿時間:2003/04/10(Thu) 12:41
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: 名前定義したセルの存在確認?
> なにか他にいい方法がありましたら教えて下さい。

名前定義って、シート単位の物とワークブック単位の物がありますよね。

という事は、Worksheets.Countが 3のブックの場合、同じ名前が
合計4つ存在する可能性がありますが…その場合はどうされたいのでしょうか?


たとえば、ワークブック上の名前定義が、
  objWorkbook.Names.Add "あああ", "=Sheet3!$A$1+Sheet1!$A$1"
  objSheet1.Names.Add "あああ", Sheet1.Range("$A$1")
  objSheet2.Names.Add "あああ", Sheet3.Range("$A$1")
のようになっている場合です。

特に最後の
  objSheet2.Names("あああ")  '…あるいは、objWorkbook.Names("Sheet2!あああ")
などは、定義はSheet2上にありますが、参照先はSheet3上のセルだったりしますし。(^_^;)

投稿時間:2003/04/10(Thu) 13:28
投稿者名:ヨッシー
Eメール:
URL :
タイトル:
Re^4: 名前定義したセルの存在確認?
> > なにか他にいい方法がありましたら教えて下さい。
>
> 名前定義って、シート単位の物とワークブック単位の物がありますよね。
>
> という事は、Worksheets.Countが 3のブックの場合、同じ名前が
> 合計4つ存在する可能性がありますが…その場合はどうされたいのでしょうか?
>
>
> たとえば、ワークブック上の名前定義が、
>   objWorkbook.Names.Add "あああ", "=Sheet3!$A$1+Sheet1!$A$1"
>   objSheet1.Names.Add "あああ", Sheet1.Range("$A$1")
>   objSheet2.Names.Add "あああ", Sheet3.Range("$A$1")
> のようになっている場合です。
>
> 特に最後の
>   objSheet2.Names("あああ")  '…あるいは、objWorkbook.Names("Sheet2!ああ
あ")
> などは、定義はSheet2上にありますが、参照先はSheet3上のセルだったりしますし。(^_^;)

それは名前定義の参照範囲でシートの確認をしているのでいいと思いますが・・・

投稿時間:2003/04/10(Thu) 15:39
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: 名前定義したセルの存在確認?
> それは名前定義の参照範囲でシートの確認をしているのでいいと思いますが・・・

そうですか…それは失礼しました。m(_ _)m

先の私の投稿(3520)は、質問の仕様上で不明な点があったので、
どうされたいのかをお聞きした次第です。
仕様上、先のコードで問題はないという事であれば、それで良いと思いますよ。(^-^

ただ、名前定義というのは、先の
》  objWorkbook.Names.Add "あああ", "=Sheet3!$A$1+Sheet1!$A$1"
に書いた例のように、「セル参照」ではなく「数式」が書かれる場合もありますよね。

ということは例えば、objWorkbook.Names("定義1").Value が "=NOW()" という値を
返してくる可能性もありえるわけです。
その場合、"!" という文字列は含まれていませんから、先のコードだとエラーになりますよね。
念のため、この点も考慮されたコードにした方が良いかもしれません。



-- 以下蛇足 --

私が疑問だった点の1つは、最初の『どのシートに存在しているのか』という質問に関してです。
これが、「参照先」と「名前定義」のどちらの事を指しているのか、よくわからなかったので…。

例えば、
   Sheet2.Names("定義1").Value = "=Sheet1!$A$1"
という定義があった時に、それが
   (セル参照先は) 『Sheet1』に存在している
という事にするのか、
   (名前定義は) 『Sheet2』に存在している
という事にしたいのかがわからなかったので、先の逆質問になったわけです。

投稿時間:2003/04/10(Thu) 16:53
投稿者名:ヨッシー
Eメール:
URL :
タイトル:
Re^6: 名前定義したセルの存在確認?
> > それは名前定義の参照範囲でシートの確認をしているのでいいと思いますが・・・
>
> そうですか…それは失礼しました。m(_ _)m
>
> 先の私の投稿(3520)は、質問の仕様上で不明な点があったので、
> どうされたいのかをお聞きした次第です。
> 仕様上、先のコードで問題はないという事であれば、それで良いと思いますよ。(^-^
>
> ただ、名前定義というのは、先の
> 》  objWorkbook.Names.Add "あああ", "=Sheet3!$A$1+Sheet1!$A$1"
> に書いた例のように、「セル参照」ではなく「数式」が書かれる場合もありますよね。
>
> ということは例えば、objWorkbook.Names("定義1").Value が "=NOW()" と
いう値を
> 返してくる可能性もありえるわけです。
> その場合、"!" という文字列は含まれていませんから、先のコードだとエラーになりま
すよね。
> 念のため、この点も考慮されたコードにした方が良いかもしれません。
>
>
>
> -- 以下蛇足 --
>
> 私が疑問だった点の1つは、最初の『どのシートに存在しているのか』という質問に関してです。
> これが、「参照先」と「名前定義」のどちらの事を指しているのか、よくわからなかったので…。
>
> 例えば、
>    Sheet2.Names("定義1").Value = "=Sheet1!$A$1"
> という定義があった時に、それが
>    (セル参照先は) 『Sheet1』に存在している
> という事にするのか、
>    (名前定義は) 『Sheet2』に存在している
> という事にしたいのかがわからなかったので、先の逆質問になったわけです。

すいませんm(_ _)m。自分の質問もきちんと書けばよかったですね。
上記の事を含め作成したいと思います。
ありがとうございました。