質問: エクセルで外部データの取り込みの際の「名前の定義」について。 エクセルで外部データの取り込みの際の「名前の定義」について。 エクセルのテキストファイルウィザードでcsvファイル等の外部データを取り込むと、その範囲に「名前の定義」が自動的にできますが、この名前が"externaldata_1"となる場合と、外部データのファイルになる場合があるようです。 この違いは何でしょうか? 数日前にエクセル2003でcsvファイルを取り込んだときは"externaldata_1"でした。 昨日エクセル2000で別のcsvファイルでやってみても"externaldata_1"だったと思います。 しかし、今日、数日前と同じ2003で、数日前と同じcsvファイルで取り込んだら、"csv10000"というファイル名で名前が定義されてしまいました。 非常に不思議です。 原因を思い当たる方、いらっしゃいましたらご教示ください。 取り込み範囲の名前の定義を、取り込み後のvbaコードで使用するため、名前がつき方が不定だとまずいのです。
回答: 取り敢えず。 マクロでquerytableのnameプロパティを指定せずに実行すると、 『externaldata_#』という名前が自動付加されますね。 手作業では[外部データ範囲のプロパティ]ダイアログの 「名前」ボックスは未入力状態では受け付けてくれません。 何も弄らないと、デフォルトでセットされたファイル名、 あるいはクエリ名などが付けられる事になります。 >..今日、数日前と同じ2003で、数日前と同じcsvファイルで取り込んだら、 >"csv10000"というファイル名で名前が定義されてしまいました。 今日もマクロから取り込んだのですか? >取り込み範囲の名前の定義を、取り込み後のvbaコードで使用するため、 >名前がつき方が不定だとまずいのです。 取り込み時に任意の名前をつければ良いかと思います。 自動記録で with activesheet.querytables.add(...) .name = "csv10000" : などと記録されますよね。ここでnameを付ければ良いです。 あるいは、名前定義に頼らず、取り込み後はquerytableの resultrangeプロパティを使用しても良いかと思います。 with activesheet.querytables if .count > 0 then msgbox .item(1).resultrange.address '名前そのものが必要なら、querytableからの取得も可能です。 'msgbox .item(1).name end if end with