質問

エクセルで外部データの取り込みの際の「名前の定義」について。
エクセルのテキストファイルウィザードでCSVファイル等の外部データを取り込むと、その範囲に「名前の定義」が自動的にできますが、この名前が"ExternalData_1"となる場合と、外部データのファイルになる場合があるようです。
この違いは何でしょうか?
数日前にエクセル2003でCSVファイルを取り込んだときは"ExternalData_1"でした。
昨日エクセル2000で別のCSVファイルでやってみても"ExternalData_1"だったと思います。
しかし、今日、数日前と同じ2003で、数日前と同じCSVファイルで取り込んだら、"CSV10000"というファイル名で名前が定義されてしまいました。
非常に不思議です。
原因を思い当たる方、いらっしゃいましたらご教示ください。

取り込み範囲の名前の定義を、取り込み後のVBAコードで使用するため、名前がつき方が不定だとまずいのです。

通報する

回答 (1件)

取り敢えず。
マクロで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

この回答へのお礼

end-u さん、いつもありがとうございます。

> 今日もマクロから取り込んだのですか?

違いはこれでした!!
前回はすべてマクロで取り込んでいました。
そして今回は手作業・・・・。
ResultRangeプロパティも初めて知った呪文です。

今回も大変おせわになりました。
ありがとうございます。

このQ&Aは役に立ちましたか?1 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集