ここから質問投稿すると、最大4000ポイント当たる!!!! >>

データタブ⇒その他のデータソース⇒Microsoft Query⇒クエリウィザードを使ってデータ抽出を行ないました。同一ブック内に元となるデータシート、抽出データシートを作成しています。こここまではうまくできました。しかし、作成したブックを同一パソコンの別フォルダに移動したところ、エラーが出てデータ接続ができません。具体的には、「実行時エラー'1004' 一般エラー ODBCエラー」がでます。ブックを元の場所に戻すとエラーが出ずきちんと集計できます。作成したブックを移動してもデータ接続を行い、クエリがきちんと実行できるようにするにはどうしたら解決するでしょうか?もう一度ウィザードからやるのは大変です。

データ参照場所を再設定すればできそうなのですが、やり方が分かりません。例えばマイドキュメント⇒デスクトップにブックを移動した場合だとどのようになりますか?自分でも調べて試してみたのですがうまくできません。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

2003互換Bookの場合、


[データ]-[接続]、[プロパティ]、[接続のプロパティ]の[定義]タブの
「コマンド文字列」内の FROM句 にもファイルフルパスがあるようですね。
ここも書き換えてください。
書き換え後、ダイアログを閉じる時にエラーメッセージが出る事もあるかもしれません。
その場合は取り敢えず続行させてください。
改めて[更新]すれば、その後は継続して更新可能になるかと思います。
    • good
    • 0
この回答へのお礼

クエリ編集 ⇒SQLボタン⇒SQLステートメント

の編集項目でFROM句の編集を行ったところ、あっさりできました!

ありがとうございました。

お礼日時:2011/06/30 11:21

『実行時エラー'1004'』ですか?


それはマクロでの実行時エラーのようですが、どのような操作で出ますか?

手作業で[更新]したらどうなりますか?
~~~~~~
通常だと
QueryTable範囲のセルを右クリック[更新]。
「ODBC Excelドライバログインの失敗」メッセージが出て[OK]。
[ブックの選択]ダイアログが出るので自Bookを選び直す。
..この手順で再設定できますが。

または
[データ]-[接続]、[プロパティ]から[接続のプロパティ]を表示させて
その[定義]タブの「接続文字列」のパスを書き換える方法でもできます。

この回答への補足

回答ありがとうございます。

ご指摘の通り、『実行時エラー'1004'』はマクロ実行時に出るので、手動更新で試してみましたが、やはり同じエラーが出ました。エラー内容は、

「[Microsoft][ODBC Excel Driver]オブジェクト'元データ$'(←シート名)が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください。」とポップアップ画面が出ます。

ブックはマイドキュメント⇒デスクトップに移動しただけです。接続文字列の指定が違っているのでしょうか?

また[定義]タブ「接続文字列」には、「DSN=Excel Files;DBQ=C:\Users\admin\Documents\6月1日.xls;DefaultDir=C:\Users\admin\Documents;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;」と書かれていたので、Documentsという2箇所の文字列をDesktopに変更したのですが、今度は「ODBC Excelドライバログインの失敗」メッセージが出ます。[OK]ボタンを押下し、[ブックの選択]ダイアログが出るので自Bookを選び直しました。ところが、やはりパス名が正しくありませんとエラー画面が出ます。

ちなみに元データシートはデータの元となるシートで、クエリを実行して別のシート(sheet1)にデータ抽出しています。元データシートにクエリはないので、接続パスの変更はこのsheet1の接続文字列を変更しています。

将来的にはこのブックをマイネットワーク上に置きたいので、ブックを移動した場合の文字列設定をここで身に付けたいと思ってます。お手数ですがよろしくお願いします。

補足日時:2011/06/29 21:35
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAマクロ実行時エラーの修正について

VBA超初心者です。

CSVファイルをインポートし、データ更新すると、下記エラーが起こります。

実行時エラー '-2147021882 (8007000e)'
データの消失を防ぐため、空白でないセルをワークシートの外にシフトすることはできません。
Ctrl+Endキーを押して最後の空白でないセルに移動し、そのセルとデータの末尾との間にある
すべてのセルを削除またはクリアしてください。その後、セルA1を選択し、ブックを保存して最後の
セルをリセットしてください。

(以下にも文章ありますが、一部しか表示されません)

この時、「デバック」ボタンを押すと、以下のマクロ表示となります。

Sub データ更新()

’データ更新日報出力Macro
’マクロ記録日:○○○ ユーザ名:○○


  ScreenUpdating = False
Worksheets("sheet1")Select
Range("A2").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
  Range("A2").Select
End Sub

Sub ピボットテーブル更新日報印刷()
   Sheets("Sheet2").Select
Range("B14").Select
ActiveSheet.PIvotTables("ピボットテーブル1").RefreshTable
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:True
End Sub


この構文で、Selection.QueryTable.Refresh BackgroundQuery:=False が
 間違っているようなのですが、どうすればいいのか良くわかりません。
 どなたか教えていただけないでしょうか?

VBA超初心者です。

CSVファイルをインポートし、データ更新すると、下記エラーが起こります。

実行時エラー '-2147021882 (8007000e)'
データの消失を防ぐため、空白でないセルをワークシートの外にシフトすることはできません。
Ctrl+Endキーを押して最後の空白でないセルに移動し、そのセルとデータの末尾との間にある
すべてのセルを削除またはクリアしてください。その後、セルA1を選択し、ブックを保存して最後の
セルをリセットしてください。

(以下にも文章ありますが、一部しか表示されません)

こ...続きを読む

Aベストアンサー

>Selection.QueryTable.Refresh BackgroundQuery:=False
この『構文』自体が間違っているわけではありません。
"sheet1"のA2セルに設定されているQueryTable(外部データ取り込み)
を更新する時に、エラーが発生して更新できない、という意味です。

おそらく、エラー原因はエラーメッセージそのままではないでしょうか。
『..空白でないセルをワークシートの外にシフトすることはできません..』

QueryTableの設定によっては、取り込みデータを挿入するようになっています。
例えば、シートの最下行にデータがあって、
取り込みデータを挿入するとデータがはみ出てしまう、という場合は
そういったエラーメッセージが出る事も考えられます。
#こちらの環境では再現できなかったので半分自信なしですが -"-

対策もエラーメッセージに書かれている通りです。
例えば"sheet1"で使用中のデータの最終行が1,000行だと思っていても、
それ以下になんらかの使用領域が残っている可能性があります。
Ctrl+Endキーを押してみてください。
"sheet1"の実際の最終セルに移動します。
その行から1,001行目までを選択して削除してください。
(実際に必要なデータがないかどうかを確認の上で。)
その後ブックを保存してください。

以上で解消すれば良いのですが。

または、QueryTableの設定を変更してみる方法もあります。
"sheet1"のA2セルを選択して右クリック。
[データ範囲のプロパティ]を開きます。
『変更されたレコード(行)のデータ更新時の処理:』

○新しいデータのセルを挿入し、使用されていないセルを削除する
になっていたら、
○既存のセルを新規データで上書きし、使用されていないセルはクリアする
に変更してみてください。

いずれかでも解消できない場合は
現在のシート状態と実際の利用の仕方などの詳細情報があると
他にアドバイスあるかもしれません。
(例えば外部データを取り込んだ後に数式や書式を設定していたりとか、
 何かの図形を配置しているとか)

>Selection.QueryTable.Refresh BackgroundQuery:=False
この『構文』自体が間違っているわけではありません。
"sheet1"のA2セルに設定されているQueryTable(外部データ取り込み)
を更新する時に、エラーが発生して更新できない、という意味です。

おそらく、エラー原因はエラーメッセージそのままではないでしょうか。
『..空白でないセルをワークシートの外にシフトすることはできません..』

QueryTableの設定によっては、取り込みデータを挿入するようになっています。
例えば、シートの最下行にデータがあ...続きを読む

Q一般ODBCエラーについて

オラクルサーバーよりExcelにDataを抽出するマクロを作成しましたが、抽出条件の部分で日付指定を行う部分で変数を使うと「Refresh BackgroundQuery:=False」の部分で以下のエラーが発生します。
『実行時エラー'1004':一般ODBCエラー』
変数を使用しない場合には問題なくDataの抽出が可能なのですが、変数の書き方に問題があるのでしょうか?
お手数をお掛け致しますが、どなたかご教授頂けませんでしょうか?
ちなみに以下が内容です。
※サーバー名やIDやPasswordは任意の文字に変更して載せてます。

Dim i As String
i = Range("A1").Value
With Selection.QueryTable
.Connection = "ODBC;DSN=RRRR;UID=TTTT;PWD=tttt;SERVER=cccc,vvvv;"
.CommandText = Array( _
"SELECT T_ARRIVAL3.ARR_DTXX, T_ARRIVAL3.LOT_NOXX, T_ARRIVAL3.SEQ_NOXX, T_ARRIVAL3.CUST_CDX, T_ARRIVAL3.PROS_NMX, T_ARRIVAL3.NUM_QTYX, T_ARRIVAL3.BI_DTXXX, T_ARRIVAL3.OEM_NOXX, T_ARRIVAL3.REKI_CDX, T_AR" _
, _
"RIVAL3.EMP_CDXX, T_ARRIVAL3.UP_DTXXX, T_ARRIVAL3.UP_TMXXX, T_ARRIVAL3.UP_MACID, T_ARRIVAL3.MARK_LOT, T_ARRIVAL3.DIVI_FLG, T_ARRIVAL3.RETN_FLG" & Chr(13) & "" & Chr(10) & "FROM TAKAKI.T_ARRIVAL3 T_ARRIVAL3" & Chr(13) & "" & Chr(10) & "WHERE (T_ARRIVAL3.UP_D" _
, "TXXX>=i)" & Chr(13) & "" & Chr(10) & "ORDER BY T_ARRIVAL3.UP_DTXXX, T_ARRIVAL3.UP_TMXXX")
.Refresh BackgroundQuery:=False
End With
End Sub

オラクルサーバーよりExcelにDataを抽出するマクロを作成しましたが、抽出条件の部分で日付指定を行う部分で変数を使うと「Refresh BackgroundQuery:=False」の部分で以下のエラーが発生します。
『実行時エラー'1004':一般ODBCエラー』
変数を使用しない場合には問題なくDataの抽出が可能なのですが、変数の書き方に問題があるのでしょうか?
お手数をお掛け致しますが、どなたかご教授頂けませんでしょうか?
ちなみに以下が内容です。
※サーバー名やIDやPasswordは任意の文字に変更して載せてます。

...続きを読む

Aベストアンサー

.CommandText = "SELECT T_ARRIVAL3.ARR_DTXX, T_ARRIVAL3.LOT_NOXX, T_ARRIVAL3.SEQ_NOXX, T_ARRIVAL3.CUST_CDX," & _
           " T_ARRIVAL3.PROS_NMX, T_ARRIVAL3.NUM_QTYX, T_ARRIVAL3.BI_DTXXX, T_ARRIVAL3.OEM_NOXX," & _
           " T_ARRIVAL3.REKI_CDX, T_ARRIVAL3.EMP_CDXX, T_ARRIVAL3.UP_DTXXX, T_ARRIVAL3.UP_TMXXX," & _
           " T_ARRIVAL3.UP_MACID, T_ARRIVAL3.MARK_LOT, T_ARRIVAL3.DIVI_FLG, T_ARRIVAL3.RETN_FLG" & _
        " FROM TAKAKI.T_ARRIVAL3 T_ARRIVAL3" & _
        " WHERE (T_ARRIVAL3.UP_DTXXX>=" & i & ")" & _
        " ORDER BY T_ARRIVAL3.UP_DTXXX, T_ARRIVAL3.UP_TMXXX"

このようにしてみてください。
(上記Command文をそのままコピーペーストして試したほうが良)

Array(...となっているのはマクロ記録のなごりです。長文の場合Arrayで分割して記録されます。
通常は、そのまま文字列で繋いでも差し支えありません。

問題の変数部分ですが、
" WHERE (T_ARRIVAL3.UP_DTXXX>=i)"
という書き方だと『i』という文字列そのものを記述している事になります。
" WHERE (T_ARRIVAL3.UP_DTXXX>=" & i & ")"
というように、"文字列" & 変数 & "文字列" と記述しなければなりません。

Sub try()
  Dim i As String

  i = Range("A1").Value
  MsgBox " WHERE (T_ARRIVAL3.UP_DTXXX>=i)"
  MsgBox " WHERE (T_ARRIVAL3.UP_DTXXX>=" & i & ")"
End Sub

.CommandText = "SELECT T_ARRIVAL3.ARR_DTXX, T_ARRIVAL3.LOT_NOXX, T_ARRIVAL3.SEQ_NOXX, T_ARRIVAL3.CUST_CDX," & _
           " T_ARRIVAL3.PROS_NMX, T_ARRIVAL3.NUM_QTYX, T_ARRIVAL3.BI_DTXXX, T_ARRIVAL3.OEM_NOXX," & _
           " T_ARRIVAL3.REKI_CDX, T_ARRIVAL3.EMP_CDXX, T_ARRIVAL3.UP_DTXXX, T_ARRIVAL3.UP_TMXXX," & _
           " T_ARRIVAL3.UP_MACID, T_ARRIVAL3.MARK_LOT, T_ARRIVAL3.DIVI_FLG, T_ARRIVAL3.RETN_FLG" & _
        " FROM TAKA...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qデータソース名および指定された既定のドライバが見つかりません。

データソース名および指定された既定のドライバが見つかりません。
オラクルに接続したのですが、上記のエラーが出て接続出来ません。
どなたか力を貸してください。

<環境>
WinXP
VS2005 Ver8.0.50727.42
Windowsアプリケーション
VB言語でオラクルに接続したいと思っています。

こちら(http://support.microsoft.com/kb/310985/ja)を参考に
オラクルに接続しようとしています。

Dim cn As OdbcConnection
cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
"Data Source=ORA_TEST;uid=UID_TEST;pwd=PWD_TEST")

Try
cn.Open()
MsgBox("Connected")
Catch ex As Exception
MsgBox("NG")
Debug.Print(ex.Message, "Error") ←(A)
Finally
cn.Close()
End Try

(A)で「ERROR [IM002] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。」

のメッセージが出ます。
VB2005の「ツール」-「サーバの接続」では接続確認が取れているのですが、
コードで書くとエラーになってします。

何か書き忘れているのでしょうか。。。
すみませんがよろしくお願いいたします。

データソース名および指定された既定のドライバが見つかりません。
オラクルに接続したのですが、上記のエラーが出て接続出来ません。
どなたか力を貸してください。

<環境>
WinXP
VS2005 Ver8.0.50727.42
Windowsアプリケーション
VB言語でオラクルに接続したいと思っています。

こちら(http://support.microsoft.com/kb/310985/ja)を参考に
オラクルに接続しようとしています。

Dim cn As OdbcConnection
cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
...続きを読む

Aベストアンサー

>cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
>"Data Source=ORA_TEST;uid=UID_TEST;pwd=PWD_TEST")

自分の環境に合わせないとね?????

これの意味はインポートしているんですよね? スクリプトはVBSの事ですかね。VBA? VBですよね?

Imports System.Data
Imports Microsoft.Data.ODBC


それと見るHPがちょこと違う。
http://msdn.microsoft.com/ja-jp/library/system.data.oracleclient.oraclelob.aspx

Qエクセルで「ODBC Microsoft Access ドライバログインの失敗」

こんにちは。
最近OSをWindows98からWindowsXP PROに変えました。
引越し後、前任者が作成したエクセルのマクロで、あ
るコマンドボタンを押すと「データソースの選択」ダ
イアログボックスが表示されるようになりました。
その際、「コンピュータデータソース」の一覧から「MS Access Database」を選択すると「ログイン」ダイア
ログボックスが表示され、「OK」をクリックすると
-----------------------------------------------
「ODBC Microsoft Access ドライバログインの失敗」
パス’c:\WINDOWS\デスクトップ\~'
-----------------------------------------------
となってしまいます。素人目にもwin98とwinXPのデスク
トップのパスが変わったためだと推測できるのですが、
直し方がわかりません。エクセルのバージョンは2002、
アクセスのバージョンは2000です。
どなたかご教授よろしくお願いいたします。

こんにちは。
最近OSをWindows98からWindowsXP PROに変えました。
引越し後、前任者が作成したエクセルのマクロで、あ
るコマンドボタンを押すと「データソースの選択」ダ
イアログボックスが表示されるようになりました。
その際、「コンピュータデータソース」の一覧から「MS Access Database」を選択すると「ログイン」ダイア
ログボックスが表示され、「OK」をクリックすると
-----------------------------------------------
「ODBC Microsoft Access ドライバログインの失敗」
パス’c:\WINDO...続きを読む

Aベストアンサー

よくわかりませんが、デスクトップの位置はXPの場合、次のようになっています。

C:\Documents and Settings\”ユーザー名”\デスクトップ\

そのマクロはデスクトップの下にあるファイルを参照しているのだと思います。

Qexcel データ更新 VBA

Excel2003外部データの取り込み→データの取り込み→データファイルの選択で
取り込み設定しました。
常にデータ→データの更新をクリックして新しいデータを読み込みます。
このデータ更新をクリックする作業をVBAにしたいのですができますか?
教えてください
※ それ以降の作業はVBAで完了しています。
よろしくお願いします

Aベストアンサー

こんにちは。

  ActiveWorkbook.RefreshAll
とか、
  Range("A1").QueryTable.Refresh
とかで、どうでしょう。
それぞれ、Workbook オブジェクト、または、Range オブジェクト
を適宜指定してください。

もし、エラーが出る場合は、
それぞれのクエリーテーブルのオプション設定を変えてみて下さい。

(#xl2003では確認していませんので、違っていたらスミマセン)

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExcel > ピボットテーブル「(空白)」非表示

Excel 2003 で、ピボットテーブルを利用した際、元データにて未入力のセルは、ピボットテーブルでは「(空白)」と表示されてしまいます。

これを、任意の文字列や、空白のまま表示(「(空白)」を非表示)にする方法はありますか?

空白セルそのものを非表示する方法は、ピボットタイトル行の▼で「(空白)」をチェックオフすれば消えますが、これでは関係する行の他列も非表示になってしまいます。

ただ「(空白)」ではく、空白のまま表示したいだけなのですが、その方法が分かりません。

宜しくお願い致します。

Aベストアンサー

ピボットテーブルの行や列フィールドの「アイテム」(個々の「あ」や「い」,「A」「B」「1・2・3」,「(空白)」も同じ)は,作成したピボットテーブルの中で「(アイテムの)キャッシュ」として保持されています。
実際今回の「(空白)」だけでなく,たとえば列Bフィールドのアイテム「1」1セルを「1個」と書き換えてみると,レポート上のアイテム1が全部1個と表記されます。
レポートで行列アイテムを直接書き換えることで,キャッシュの中で「元データの1 = アイテム表記は1個」というデータを保持し,以後それを使って表示してくれるためです。


#余談ですが,たとえば「四半期」で日付をグループ化すると,エクセルでは1月から3月が第1四半期として集計されます。
これを日本の四月からの会計年度に合わせて「1-3月」は第4四半期に,そして「4-6月」を第1四半期として集計させたいような場合にも,この方法を利用することができます。

Q外部データの更新がうまくできません(Excel VBA)

いつもお世話になってます。
以下のプログラムで外部データの更新を入れたのですがうまく作動しません。

Dim sh As Worksheet
Dim lr As Long
Dim tlr As Long

For Each sh In Worksheets
If sh.Name Like "*D" Then
sh.Select
Selection.QueryTable.Refresh
End If
Next

For Each sh In Worksheets
If sh.Name Like "*D" Then
lr = sh.Cells(Rows.Count, 5).End(xlUp).Row
sh.Rows("1:" & lr).Copy
tlr = Sheets("統合データ").Cells(Rows.Count, 5).End(xlUp).Row
Sheets("統合データ").Range("A" & tlr + 1).PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
End If
Next

プログラムの内容としては
(1)末尾が"D "のシートのデータを更新する(これらのシートは外部データを取込んでいます)
(2)"*D"シートのデータを全て"統合データ"シートに上から順に貼り付ける
ですが、上のプログラムだともとあるデータを貼り付けてからデータを更新しています。更新後のデータを貼り付けるにはどのようにすればよいでしょうか。
よろしくお願いします。

いつもお世話になってます。
以下のプログラムで外部データの更新を入れたのですがうまく作動しません。

Dim sh As Worksheet
Dim lr As Long
Dim tlr As Long

For Each sh In Worksheets
If sh.Name Like "*D" Then
sh.Select
Selection.QueryTable.Refresh
End If
Next

For Each sh In Worksheets
If sh.Name Like "*D" Then
lr = sh.Cells(Rows.Count, 5).End(xlUp).Row
sh.Ro...続きを読む

Aベストアンサー

こんにちは。KenKen_SP です。

QueryTable はディフォルトでは非同期ですからね...更新前にどんどん先へ
コードを実行してしまいます。同期させたいなら、BackgroundQuery プロパティー
を False にしてください。

それから、Worksheets コレクションで同一のものを2度ループさせるさせる
のは冗長なので、一回で済ませましょう。

こんな感じでどうですか?

Sub SampleProc()

  Dim Sh     As Worksheet
  Dim QT     As QueryTable
  Dim lSrcLastRow As Long
  Dim lDstLastRow As Long
  
  For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name Like "*D" Then
      For Each QT In Sh.QueryTables
        ' 更新を待機するためには BackgroundQuery = True にします
        QT.BackgroundQuery = False
        QT.Refresh
      Next
      ' データコピー
      lSrcLastRow = Sh.Cells(Rows.Count, "E").End(xlUp).Row
      Sh.Rows("1:" & CStr(lSrcLastRow)).Copy
      ' データペースト
      With ThisWorkbook.Sheets("統合データ")
        lDstLastRow = .Cells(Rows.Count, "E").End(xlUp).Row
        .Rows(lDstLastRow + 1).PasteSpecial _
        Paste:=xlPasteValuesAndNumberFormats
      End With
    End If
  Next
  Application.CutCopyMode = False

End Sub

こんにちは。KenKen_SP です。

QueryTable はディフォルトでは非同期ですからね...更新前にどんどん先へ
コードを実行してしまいます。同期させたいなら、BackgroundQuery プロパティー
を False にしてください。

それから、Worksheets コレクションで同一のものを2度ループさせるさせる
のは冗長なので、一回で済ませましょう。

こんな感じでどうですか?

Sub SampleProc()

  Dim Sh     As Worksheet
  Dim QT     As QueryTable
  Dim lSrcLastRow As Long
  Dim lDs...続きを読む

QVBAでfor文の中で、continueしたい

お世話になります。
VBAのfor文の中で、ある条件に合致したら、for の先頭に戻りたいのですが、
方法が分かりません。

VB.net 等の「 Continue For」に当たるものは、VBAに
ないのでしょうか?

何卒宜しくお願いします。

Aベストアンサー

Continue For は昔の VB6 までに物には実装されていませんね VB6 使いの私は知らなかった

for の先頭に戻りたいのではなく、 Next の直前に飛びたいのですよね?
幸いにも VBA には Goto ステートメントがありますので

Sub Sample1()
For i = 1 To 10
If 意除外条件 Then GoTo Next_no_mae

通常の総理

Next_no_mae:

Next i

End Sub

じゃダメですか?
これなら For の直後に飛ぶ事も可能ですが

もしくはこれぐらいしか対処方法はないのでは?
Sub Sample2()

For i = 1 To 10
If 除外条件 Then
Else
通常の総理
End If
Next i

End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング