エクセル VBA 実行時エラー ” 取り込み先の範囲は、クエリテーブルが作成された同じワークシートにありません。を解決

【本日のミッション】

Excel VBA QueryTables.Addメソッドで「実行時エラー ‘-2147024809(80070057)’
取り込み先の範囲は、クエリテーブルが作成された同じワークシートにありません。」が出た原因をつきとめよ。

ミッションの概要

Excel VBA QueryTables.Addメソッドで「実行時エラー ‘-2147024809(80070057)’
取り込み先の範囲は、クエリテーブルが作成された同じワークシートにありません。」が出た原因をつきとめよ、というのが今回のミッションです。

下記参照ページのコードを使用します。コードの詳細は、下記ページをご参照ください。

参照:Excel VBAダイアログボックスで選択したcsvをQueryTablesで取込(「,」「”」ゼロ落ち・日付変換対応)

エクセル VBA 実行時エラー '' 取り込み先の範囲は、クエリテーブルが作成された同じワークシートにありません。を解決

■■■スポンサーリンク■■■

プロシージャ

赤字でコメントブロックしている部分が、エラーになった箇所です。
その上の青字部分が、エラーを出ないようにしたコードです。

 Sub CSV取込4()

    '【変数】
    Dim fn As Variant       '取込ファイル名
    Dim ws As Worksheet     'データ取込用シート(このブックのsheet1)
    Dim qt As QueryTable    'QueryTableオブジェクト
    
    '■変数セット
    Set ws = ThisWorkbook.Worksheets("Sheet1")  'データ取込用シート(このブックのsheet1)
    '■ファイルの選択
    fn = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv")
    
    '■ファイル選択の確認
    If fn = False Then
        Exit Sub           'ファイル選択されていなかったら終了
    End If
    
    '■QueryTableオブジェクトを追加
    Set qt = ws.QueryTables.Add(Connection:="text;" & fn, Destination:=ws.Range("A1"))            '←エラーの出ないコード
    ’Set qt = ws.QueryTables.Add(Connection:="text;" & fn, Destination:=Activesheet.Range("A1"))  ’←エラーの出るコード
    
    '■プロパティを指定→csv取込→接続解除
    With qt
        .TextFilePlatform = 932                             '文字コードを指定 Shift_Jis
        .TextFileCommaDelimiter = True                      'カンマ区切り
        .TextFileColumnDataTypes = Array(2, 1, 1, 2, 1, 1)  'データ型
        .Refresh BackgroundQuery:=False                     'CSVデータをワークシートに取込
        .Delete                                             'CSVファイルとの接続を解除
    End With
End Sub

QueryTables.Addメソッド クエリテーブルを作るシート=取込先シート でないとエラーが出る

「QueryTables」は、ワークシートにQueryTableオブジェクトを追加するメソッドです。

取込先のワークシート.QueryTables.Add(Connection, Destination[, Sql])
引数名説明省略
Connection

取り込むデータベースの種類と、取り込むデータのバスを指定します。CSVを取り込む場合は必ず「text;」から指定し、その後にデータのパスを指定します。

×
Destination

QueryTablesに取り込んだcsvを、どのワークシートのどのセル番地に取込ませるか指定します。取込先ワークシートは、クエリテーブルを作るシートと同じでないとエラーが出ます。

「実行時エラー ‘-2147024809(80070057)’
取り込み先の範囲は、クエリテーブルが作成された同じワークシーにありません。」
エクセル VBA 実行時エラー '' 取り込み先の範囲は、クエリテーブルが作成された同じワークシートにありません。を解決

×
SqlODBC データ ソースで実行される SQL クエリ文字列。

実行時エラー「取り込み先の範囲は、クエリテーブルが作成された同じワークシートありません。」とは、QueryTablesが作られるシートと、csvを取込ませるシートが異なる場合に表示されるエラーです。

エクセル VBA 実行時エラー '' 取り込み先の範囲は、クエリテーブルが作成された同じワークシートにありません。を解決

QueryTablesが作られるシートと、csvを取込ませるシートが同じであれば、エラーは出ません。

ws.QueryTables.Add(Connection:="text;" & fn, Destination:=ws.Range("A1"))
■■■スポンサーリンク■■■

【参考】

指定したフォルダ内のファイル名全てを取得(Excel VBA)
変数でよく使われる「buf」「tmp」の意味
Dir関数が取得するファイルの順番
指定したフォルダ内のフォルダ名全てをGetAttrを使って「エラー53 ファイルが見つかりません。」を出さずに取得(Excel VBA)
GetAttrとは?「= vbDirectory」ではなく「And vbDirectory」となるビット演算の疑問
フォルダ名だけを取得したい時に出てくる 「.」 と 「..」 とは?
指定したフォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
CreateObject(“Scripting.FileSystemObject”) を使ってサブフォルダを取得
再帰処理とは?フォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
指定したフォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
再帰処理とは?フォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
参照渡し「ByRef」と値渡し「ByVal」の違い(Excel VBA)
ファイルのフルパスからファイル名のみを取得 InStrRev関数(Excel VBA)
指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
FileSystemObjectとは?CreateObject 関数 FolderExists・GetFolderの使い方
FileSystemObject CreateObject関数を使う方法・ 参照設定を使う方法 違いを理解してエラー防止
再帰処理とは?指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
ファイルのフルパスからファイル名のみを取得 Split関数(Excel VBA)
Callステートメントとは 引数 括弧()の使い方(Excel VBA)
指定したフォルダ内から「特定の文字を含まないファイル名」を取得(Excel VBA)
ワイルドカードとは。使い方いろいろ。(Excel)
Dir関数の使い方。ファイル名やフォルダ名の取得方法。(Excel VBA)
指定したフォルダのファイル名を取得し、そのファイル名を一括で変換(Excel VBA)
Excel起動時に「コンパイルエラー」。64ビット システムで Declareステートメントに、PtrSafe属性を設定(Excel VBA )
「ファイルを開く」ダイアログボックス から ファイル名を取得(Excel VBA)
「ファイルを開く」ダイアログボックス から 複数 ファイル名を取得(Excel VBA)
指定フォルダ内のサブフォルダ全てをフォルダ構成のみ(空フォルダ)を別フォルダにコピー(Excel VBA)
再帰処理とは?指定フォルダ内のサブフォルダ全てをフォルダ構成のみ(空フォルダ)を別フォルダにコピー(Excel VBA)
エクセル ファイルのフルパスから拡張子のみを取得 Split関数(Excel VBA)
エクセル ファイルのフルパスから拡張子のみを取得 InStr関数(Excel VBA)
Excel VBAダイアログボックスで選択したcsvファイルをエクセルブックとして開いて取込(「,」「”」非対応)
Excel VBAダイアログボックスで選択したcsvファイルをテキストファイルとして取込(ゼロ落ち・日付変換対応)
Excel VBAダイアログボックスで選択したcsvをテキストファイルとして取込(「,」「”」ゼロ落ち・日付変換対応)
Excel VBAダイアログボックスで選択したcsvをQueryTablesで取込(「,」「”」ゼロ落ち・日付変換対応)
エクセル ダイアログボックスからフォルダ選択してフォルダ内のファイル全てを取得(Excel VBA)
エクセル VBA 実行時エラー ” 取り込み先の範囲は、クエリテーブルが作成された同じワークシートにありません。を解決

■■■スポンサーリンク■■■