VBAマクロ実行時エラーの修正方法

このQ&Aのポイント
  • VBA超初心者の方がCSVファイルをインポートし、データ更新時に実行時エラーが発生する問題について、解決方法を教えてください。
  • 実行時エラー '-2147021882 (8007000e)' が発生し、空白でないセルをワークシートの外にシフトすることができないためデータが消失してしまいます。解決方法としては、Ctrl+Endキーを押して最後の空白でないセルに移動し、そのセルとデータの末尾との間のすべてのセルを削除またはクリアすることです。その後、セルA1を選択し、ブックを保存して最後のセルをリセットします。
  • マクロの修正箇所としては、以下の構文が間違っています。Selection.QueryTable.Refresh BackgroundQuery:=Falseです。正しい構文はSelection.QueryTable.Refresh BackgroundQuery:=Falseです。この修正を行うことでエラーが解消されます。
回答を見る
  • ベストアンサー

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

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 が  間違っているようなのですが、どうすればいいのか良くわかりません。  どなたか教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>Selection.QueryTable.Refresh BackgroundQuery:=False この『構文』自体が間違っているわけではありません。 "sheet1"のA2セルに設定されているQueryTable(外部データ取り込み) を更新する時に、エラーが発生して更新できない、という意味です。 おそらく、エラー原因はエラーメッセージそのままではないでしょうか。 『..空白でないセルをワークシートの外にシフトすることはできません..』 QueryTableの設定によっては、取り込みデータを挿入するようになっています。 例えば、シートの最下行にデータがあって、 取り込みデータを挿入するとデータがはみ出てしまう、という場合は そういったエラーメッセージが出る事も考えられます。 #こちらの環境では再現できなかったので半分自信なしですが -"- 対策もエラーメッセージに書かれている通りです。 例えば"sheet1"で使用中のデータの最終行が1,000行だと思っていても、 それ以下になんらかの使用領域が残っている可能性があります。 Ctrl+Endキーを押してみてください。 "sheet1"の実際の最終セルに移動します。 その行から1,001行目までを選択して削除してください。 (実際に必要なデータがないかどうかを確認の上で。) その後ブックを保存してください。 以上で解消すれば良いのですが。 または、QueryTableの設定を変更してみる方法もあります。 "sheet1"のA2セルを選択して右クリック。 [データ範囲のプロパティ]を開きます。 『変更されたレコード(行)のデータ更新時の処理:』 が ○新しいデータのセルを挿入し、使用されていないセルを削除する になっていたら、 ○既存のセルを新規データで上書きし、使用されていないセルはクリアする に変更してみてください。 いずれかでも解消できない場合は 現在のシート状態と実際の利用の仕方などの詳細情報があると 他にアドバイスあるかもしれません。 (例えば外部データを取り込んだ後に数式や書式を設定していたりとか、  何かの図形を配置しているとか)

cyucirou
質問者

お礼

>対策もエラーメッセージに書かれている通りです。 例えば"sheet1"で使用中のデータの最終行が1,000行だと思っていても、 それ以下になんらかの使用領域が残っている可能性があります。 Ctrl+Endキーを押してみてください。 "sheet1"の実際の最終セルに移動します。 その行から1,001行目までを選択して削除してください。 (実際に必要なデータがないかどうかを確認の上で。) その後ブックを保存してください。 end-u 様 教えていただいたとおり、やってみた所、正常に動きました。 周りに詳しい者がおらず、大変助かりました。 わかり易く教えていただき、ありがとうございました。

関連するQ&A

  • マクロのなかの一部(日付)を書き換えたい

    マクロのなかの一部(日付)を書き換えたくてその部分を変数で 変更したいのですがうまく行きません少し長くなりますが下記の どの部分を直したら良いのでしょうか御教願えませんでしょうか セル Range("K1") に 20081007 の日付が入っています Sub Tuika1() Dim xxx As String xxx = Range("K1") Range("A6").Select With Selection.QueryTable .Connection = "URL;http://www.?????.com/data/daily.cgi/& xxx &.html" .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "5,6,7,10,11,12,13,14,15,16,17,18,19,20" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With End Sub

  • Excel VBAについて。

    VBAに詳しい方に質問です。 次の2つのプログラムが何をしているのか詳しく教えて下さい。 Sub Macro1() Sheets("Sheet1").Range("A1").QueryTable.Refresh BackgroundQuery:=False End Sub ------------------------- Function LNK(rng As Range) LNK = rng.Hyperlinks(1).Address End Function

  • 外部データの取り込みについて

    1分おきに外部データを下記のように取り込んでいますが、セルを指定する為に画面が1分後とに動いてしまいます。 セルを指定しないと外部データが取り込めません。 画面を動かさずにデータを取り込める方法が無いでしょうか、よろしくお願いします。 Range("AA1").Select Selection.QueryTable.Refresh BackgroundQuery:=False

  • マクロで実行時1004エラーがでます・・

    Application.CommandBars("Picture").Visible = False Range("D3").Select Selection.AutoFilter Range("D6").Select Range("B4:L360").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("D2:E3"), CopyToRange:=Range("B5:L50"), Unique:= _ False Range("N20").Select End Sub どこが悪いのでしょうか? まったく未経験者なので、わかりません。。よろしくお願いします。

  • マクロでシート2~6のデータをシート1に転記したい

    マクロでシート2~6のデータをシート1に転記したいです。 シート2~6のデータを シート1に順番に転記したくてマクロの記録を利用して作成しました。 シート2~6は列は同じですが行数は異なります。 また行数は作業の都度異なります。 同じ記述が繰り返されているので もう少し記述が短くできるのではと思うのですが どうすればいいでしょうか? Sub データ更新() 'シート1の前回データをクリア Sheets("シート1").Select Range("A2:Q2").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A2").Select Sheets("シート1").Select Range("A1").Select Sheets("シート2").Select Range("A1").Select 'ヘッダーも合わせて取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート3").Select Range("A2").Select 'データのみ取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート4").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート5").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート6").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub

  • マクロ実行時にエラーが出てしまいます

    マクロを記録し、それを実行しようとしたのですが、途中で下記のようなエラーが出てしまいます。 実行時エラー '1004': PivotTableクラスのPivotFieldsプロパティを取得できません。 黄色い矢印がとまっているのは下記の箇所です。 →With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("送付先")← 自分なりに調べてみたのですが、選択範囲("E2:E1288"等の箇所)が違うデータでマクロを実行するとエラーになるのだと思っているのですが、選択範囲が毎回変わるのに対応できるコードの変更の仕方が分かりません。 もしよろしければ、アドバイスを頂けませんでしょうか。 コードの全体は下記になります。 Sheets("本体").Select Range("E1").Select ActiveCell.FormulaR1C1 = "品目分け" Range("E2").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-2],1)" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E1288") Range("E2:E1288").Select Sheets("計算結果").Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,SourceData:= _ "本体!C1:C5").CreatePivotTable TableDestination:="[計算用.xls]計算結果!R3C1", _ TableName:="ピボットテーブル", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTables("ピボットテーブル").ColumnGrand = False With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("送付先") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("品目分け") .Orientation = xlColumnField .Position = 1 End With Range("E4").Select ActiveSheet.PivotTables("ピボットテーブル").AddDataField ActiveSheet.PivotTables( _"ピボットテーブル").PivotFields("数量"), "データの個数 / 数量", xlCount ActiveSheet.PivotTables("ピボットテーブル").PivotFields("データの個数/ 数量").Function = _xlSum With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("品目分け") .PivotItems("(空白)").Visible = False End With Range("A1").Select End Sub

  • マクロ実行時にエラーが出てしまいます

    マクロを記録し、それを実行しようとしたのですが、途中で下記のようなエラーが出てしまいます。 実行時エラー '1004': PivotTableクラスのPivotFieldsプロパティを取得できません。 黄色い矢印がとまっているのは下記の箇所です。 →With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("送付先")← 自分なりに調べてみたのですが、選択範囲("E2:E1288"等の箇所)が違うデータでマクロを実行するとエラーになるのだと思っているのですが、選択範囲が毎回変わるのに対応できるコードの変更の仕方が分かりません。 もしよろしければ、アドバイスを頂けませんでしょうか。 コードの全体は下記になります。 Sheets("本体").Select Range("E1").Select ActiveCell.FormulaR1C1 = "品目分け" Range("E2").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-2],1)" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E1288") Range("E2:E1288").Select Sheets("計算結果").Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,SourceData:= _ "本体!C1:C5").CreatePivotTable TableDestination:="[計算用.xls]計算結果!R3C1", _ TableName:="ピボットテーブル", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTables("ピボットテーブル").ColumnGrand = False With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("送付先") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("品目分け") .Orientation = xlColumnField .Position = 1 End With Range("E4").Select ActiveSheet.PivotTables("ピボットテーブル").AddDataField ActiveSheet.PivotTables( _"ピボットテーブル").PivotFields("数量"), "データの個数 / 数量", xlCount ActiveSheet.PivotTables("ピボットテーブル").PivotFields("データの個数/ 数量").Function = _xlSum With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("品目分け") .PivotItems("(空白)").Visible = False End With Range("A1").Select End Sub

  • excel VBAの検索マクロを、OOo CALCで動かしたいのですが

    excel VBAの検索マクロを、OOo CALCで動かしたいのですが、、、 お助けください。VBA素人で、OOo BASICは全くわからない者です。よろしくおねがいします。 シート1を検索データの入力及び検索結果の表示画面として使い、 シート2に検索先のデータが入力されています。 検索先のデータは乱雑に入力されており、探したいデータが複数の列に点在し、 かつ、ひとつのセルにふたつのデータが入っていることもあります。 部分一致検索で、EXCELの検索機能の「次を検索」ボタンと同じ機能を果たすように作ったつもりです。 データが見つかった場合、シート2のデータをシート1にコピーするようになっています。 ソフトウェアのバージョンはcalc2.0と3.0です。 Excelでは動いているのですが、どう変えればcalcで使えるようになりますでしょうか? --------------------------------------------- Sub kensaku() 'sheet1のC4に検索したいデータを入力済 Dim A Set A = Range("sheet1!C4") Dim B As Range 'シート2を選択。 Sheets("sheet2").Select 'A1:S800の範囲をAの値で検索。 Set B = Range("A1:S800").Find(What:=A, _ after:=ActiveCell, SearchDirection:=xlNext, _ LookAt:=xlPart, MatchCase:=False, _ MatchByte:=False, SearchFormat:=False) '分岐 '見つからなかった場合、シート1の関数参照先のセルをクリアしてリセット。 If B Is Nothing Then MsgBox "見つかりません" Sheets("sheet1").Select Range("C2").ClearContents '見つかった場合、処理を続行する。 Else B.Activate 'A列へ移動。場合により空白セルを超える必要があるため10回繰り返す。 Selection.End(xlToLeft).Select Selection.End(xlToLeft).Select Selection.End(xlToLeft).Select Selection.End(xlToLeft).Select Selection.End(xlToLeft).Select Selection.End(xlToLeft).Select Selection.End(xlToLeft).Select Selection.End(xlToLeft).Select Selection.End(xlToLeft).Select Selection.End(xlToLeft).Select 'A列からC列へ移動すると目的のデータが入った列に到達。 Selection.Offset(0, 2).Select 'その値をコピーしてシート1のC2へ貼付(関数の参照先) Selection.Copy Sheets("sheet1").Select Range("C2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False '範囲選択を解除 Application.CutCopyMode = False 'sheet2のアクティブセルを次の検索開始位置(16列右)へ移動 (条件に一致する次のデータを検索するため) Sheets("sheet2").Select Selection.Offset(0, 16).Select 'シート1に戻る Sheets("sheet1").Select End If End Sub

  • マクロ実行後、画面がちかちかしない方法

    こんばんわ! VBAを実行すると、画面がちかちかします。 シートを行ったり来たりしているせいでしょうね? 自分で、色々やってみたのですが、エラーばかりで全然できません。 シートを行ったり来たりしなくてもいいVBAを作るには、どこを直せばいいでしょうか。 教えて頂けませんか? (現在のVBA) (1)「Data!FB63376,FG63376,FI63376」を「拾い出し!K4」にコピー&ペースト 値が入っている場合、下の行に貼付け。 Sub Macro1() Range("FB63376,FG63376,FI63376").Select   Range("FI63376").Activate Selection.Copy Sheets("拾い出し").Select If Range("K4").Value = "" Then Range("K4").Select Else Range("K" & Rows.Count).End(xlUp).Offset(1).Select  End If ActiveSheet.Paste Sheets("Data").Select (2)「Data!FO63367:FQ63372」を「拾い出し!O4」に値のみをコピー&ペースト 値が入っている場合、下の行に貼付け。 Range("FO63367:FQ63372").Select Selection.Copy Sheets("拾い出し").Select If Range("P4").Value = "" Then Range("P4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Else Range("P" & Rows.Count).End(xlUp).Offset(1).Select End If Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Data").Select Application.CutCopyMode = False End Sub 以上です。 お分かりになる方教えて頂けませんか? 宜しくお願いします。

  • Excel 2007 マクロ 複数シートの更新

    Excel 2007 マクロ 複数シートの更新 Sheet1に元データがあり、Sheet2以降に複数シートがあります。 複数シートにはSheet1を元データとしてピボットテーブルを作成しています。 下記はSheet2で行う作業のマクロです。 同様の内容がSheet3以降あります。 どのようにすれば複数シートを一括で更新できるようでしょうか。 Sub Sagyo() 'ピボットテーブル更新 Worksheets("Sheet2").Range("A1").RefreshAll   'A1を含むピボットテーブル表をA15にコピーして値貼り付け Worksheets("Sheet2").Range("A1").CurrentRegion.Copy Range("A15").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub

専門家に質問してみよう