Excel2011 VBAのエラーについて

このQ&Aのポイント
  • Excel2011にて発生したEXC_BAD_ACCESSエラーについて説明します。
  • 問題の処理のデバッグ実行結果や実行環境についても記載しています。
  • エラーの原因を特定するために試した対策や、アップデートの影響についても言及しています。
回答を見る
  • ベストアンサー

Excel2011 VBAのエラーについて

Excel2011にて、以下のようなEXC_BAD_ACCESSが発生し、 Excelそのものが落ちてしまいました。 今までは何事もなく、動作していたのですが、 最近は必ず落ちるようになってしまい困っています。 ■EXC_BAD_ACCESS内容 Microsoft Error Reporting log version: 2.0 Error Signature: Exception: EXC_BAD_ACCESS Date/Time: 2013-01-31 15:14:55 +0000 Application Name: Microsoft Excel Application Bundle ID: com.microsoft.Excel Application Signature: XCEL Application Version: 14.3.0.121105 Crashed Module Name: Microsoft Excel Crashed Module Version: 14.3.0.121105 Crashed Module Offset: 0x0106e1a0 Blame Module Name: Microsoft Excel Blame Module Version: 14.3.0.121105 Blame Module Offset: 0x0106e1a0 Application LCID: 1041 Extra app info: Reg=en Loc=0x0411 Crashed thread: 0 落ちる場所を特定しようと、デバッグ実行をすると、 以下のソート処理内で落ちていました。 (正確には、この処理の手前で止めるとデバッグ可能状態となり、 ステップ実行でこの処理を抜けたあと、処理を流すと正常終了し、 この処理の直後で止めようとすると、上記エラーで落ちてしまいます。) ■問題の処理(ソートしているだけ...のはずです) Sub InputSheetSort() Worksheets("入力データ").Select '*** 並べ替え1 Range("A1").Sort key1:=Range("E2"), order1:=xlAscending, _ key2:=Range("F2"), order2:=xlAscending, _ key3:=Range("G2"), order3:=xlAscending, Header:=xlYes '*** 並べ替え2 Range("A1").Sort key1:=Range("A2"), order1:=xlAscending, _ key2:=Range("C2"), order2:=xlDescending, _ key3:=Range("E2"), order3:=xlAscending, Header:=xlYes End Sub ソートしようとしているデータ量は1000行もなく、 使用している列も13列(A~M)です。 (このエラーが発生し始めたのは950行辺りを超えてからです。) 実行環境は以下の通りです。 iMac(2011発売モデル) OS X 10.8.2 CPU 2.7GHz Intel Core i5 メモリ 4G 最後に、、、エラーが発生し始めたのは950行超えた辺りというよりは、 最近のOfficeのアップデート実行直後というのもあり、 そっちが問題なのでは…とも思っていたりもします。 ネットで調べて ログイン項目やらライブラリ内の一時ファイル削除やら セーフモードでの実行も試したのですが、改善しなかったため ソースが問題なのではと思い、質問させて頂きました。 宜しくお願い致します。

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

  • ベストアンサー
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.1

その後、何か進展はありましたか? #Mac版は知らないですが Excel側のバグかと。負荷とかで、同期異常っぽい問題はちょくちょく発生します。 理想は、Excelに頼らず「データ読込み→配列をソート@自作関数→シートに書出し」。 あるいは、回避方法さがすか・・・発生条件特定できるならイイんですが、ステップ実行で挙動変わるよーなのは厄介そうです。 ちなみに、ソースの問題なら「オブジェクトがありません」系のエラーになるので、異常終了はないかと。 セーフモードは他アプリケーションの干渉抑止、アップデートは今時セキュリティパッチとかでしょうから、どちらもだいたい起動時の問題です。VBAの処理がトリガー引くような問題は、半ば「仕様」。修正を期待できないので、作り手側でがんばるしか。。

RockMoon
質問者

お礼

丁寧な回答有り難うございます! その後も原因と思われるソートの手前で sleepやらwaitで止めてみたりと無駄な抵抗を試みましたが無駄でした。。。 さらには当初からあるコメント文が構文エラーになったり 挙動がおかしくなってしまったので、ExcelのBook自体が壊れてしまったと思われます。 とはいえ、Bookを開くことはできるので、今のうちにデータを退避して 新しいBookでマクロを作り直すことにします。 ※個人で使用している家計簿でやる気が削がれていましたが  回答をいただけたことで次の行動をするよう背中を押されました!  有り難うございました!

関連するQ&A

  • VBA エラーと対策

    実行時エラー '1004' RangeクラスのSortメソッドが失敗しました。 と出ます。 With Worksheets("データ") .Range("A2:N" & .Cells(.Rows.Count, 1).End(xlUp).Row).sort _ Key1:=Range("E3"), Order1:=xlAscending, Key2:=Range("C3"), _ Order2:=xlAscending, Key3:=Range("A3"), Order3:=xlAscending End With E列、C列、A列で昇順で並び替えしようと思っております。 前まで使えていたのですが、ソートできなくなり、何が原因かわからないため、質問しました。 また、もう一つエラーがあります。 実行時エラー'-2147417848(80010108)' オートメーションエラーです。 起動されたオブジェクトはクライアントから切断されました。 と表示されます。 http://okwave.jp/qa/q8452163.html range("A1").resize(ubound(a),1) = application.transpose(a) 上記部分でエラーがでます。 上記内容で、どういった原因が考えられますか? どちらか片方でも分かる方いらっしゃいましたら、回答よろしくお願い致します。

  • Excel2010 VBA sortについて

    現在Excel2010VBAを使って、化学のデータからスペクトルを出すようなプログラムを考えております。 データは以下のような形です。 温度 1500 1500 1500 1400 1400 1400 時間 5 10 20 5  10  20 電流 1 3 7 11  12 13 このようなデータをまず、1行のデータの順番に並べてから、2行のデータ順に並べ替えたいと思っています。 しかし、Sortを用いたところ、実行時エラー1004RangeクラスのSortエラーが検出されてしまいます。 そこで、SortSpecialにすると、このエラーは検出されず、マクロは回るものの思った通りに整列されません。 Sheets("Rawdata").Activate Columns("A:BE").Sort Key1 = Range("A7") Order1 = xlAscending Key2 = Range("A10") Order2 = xlAscending Header = xlGuess Orientation = xlLeftToRight Excelの整列を使えばできてしまうことなのですが、VBAを用いてはできないのでしょうか? ExcelVBAを用いて、「行のデータ」基準にして「列を並べ替える」ことは可能なのでしょうか? どなたかご教授ください。 よろしくお願いいたします。

  • EXCEL VBAのソートについて

    4つ以上のキーでソートしたい場合の書き方を教えていただけますでしょうか。 宜しくお願いします。 order3の次にorder4をキーとしてソートしたいのですが、 書き方が分かりません。 Worksheets("明細").Activate Worksheets("明細").Range("B3:CX" & Totalnum + 2) _ .Sort Key1:=Range("N3"), order1:=xlAscending, _  Key2:=Range("Q3"), order2:=xlAscending, _ Key3:=Range("G3"), order3:=xlAscending, _ Key4:=Range("AT3"), order4:=xlAscending 別の質問ですが、order4を別のシートから(?)ということはできるのでしょうか?

  • EXCEL VBA ソートにおいて

    EXCEL 2003 のVBAのsortにおいて、解決できなくて困って おります。 名前,色,産地,品質,味,値段,重さ, りんご,赤,青森,10,10,500,100 みかん,黄,和歌山,10,10,300,50 すいか,緑,群馬,10,8,2000,1000 メロン,黄緑,青森,10,8,2500,500 いちじく,赤,鹿児島,8,8,200,100 名前、品質、値段の順に並びかえたいと思い、 excelのVBAの記録でオートフィルタ後に 並び替えを行ったところ下記のコードが記録されました。 Sub Macro28() Cells.Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, _ DataOption3:=xlSortNormal end sub ところが、これをオブジェクトのマクロに使用して(2,3行目を自分の使い たいように訂正)みると作動しません。 Private Sub CommandButton1_Click() worksheets(1).Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal End Sub watch 式では 3行目までは worksheets(1).Select = TRUE ですし Selection.AutoFilter = TRUE となっているのですが、 sortの反応が分からない状況です。 Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal この部分が問題なのかと考えております。 ネットで調べて worksheets(1).RANGE("A1:G6").Select Selection.sort…… とか worksheets(1).RANGE("A1:G6").sort とかも試してみたのですが、だめでした。 sort を使用するときにselectionとの相性や、 rangeとの兼ね合いで決まり等があるのでしょうか。 色々なサイトを回ってはいるのですが、ちょっと解決 にいたることができません。 どなたか、ご教授いただけると幸いです。

  • Excel2000のSORTマクロの質問

    ワークシート内にSortキー指定セルを3つ設定し、これをマクロで読み取って、最大3個までの sortを実行しています。 Selection.Sort Key1:=Range(strKey1), Order1:=xlAscending, Key2:=Range(strKey2), _ Order2:=xlAscending, Key3:=Range(strKey3), Order3:=xlAscending, _ Header:=xlGuess, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin 注)strKey1,strKey2,strKey3にはSortキーを行うセル番号(E11など)が入ります。 これですと、strKey2 と strKey3 に値が入っていないと「1004 アプリケーション定義またはオブジェクト定義のエラーです」と出るので、IF文を使って Sort命令自体を3つに分けて処理しています。 そこで質問なのですが、Selection.Sort 命令以降を『文字列変数』で記述して、strKey1,strKey2,strKey3の入力内容によって命令文を操作して、1つのsort命令で処理したいのですが、可能なのでしょうか? つまり、strKey2 と strKey3 が未入力ならば、 Selection.Sort Key1:=Range(strKey1), Order1:=xlAscending, _ Header:=xlGuess, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin …のようになるように、文字列として書きたいのですが、strKey1だけ指定する場合、 strSortString = "Key1:=Range(""" & strKey1 & """), Order1:=xlAscending, " & _ "Header:=xlGuess, MatchCase:=False, Orientation:=xlTopToBottom, " & _ "SortMethod:=xlPinYin" Selection.Sort strSortString と書きたいのです。 実際に上のようにやってみますと 「1004 入力した文字列は参照名または定義名として正しくありません。」と出ます。 基本的にsort命令はこのような使い方はできないのでしょうか? 分かりにくい説明ですみませんが、よろしくお願いします。

  • VBAでのエラー(新しいマクロの記録)

    新しいマクロの記録で、work1にてソート等を行って、 新しいマクロ(ソート等)を作成しました。 このマクロは単体で正常に動作するのですが、 sheet1の別のマクロにカット&ペーストで追加し、 動作させたところエラーになってしまいました。 パス的な問題だと思いますが、いまいち理解できません。 以下、ソートの中身 Sheets("work1").Select Columns("A:H").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _ , Order2:=xlAscending, Key3:=Range("F2"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal

  • エクセルVBA

    よろしくお願いいたします。 エクセルのVBAですが、下記のコードを実行すると処理が遅いです。処理が早くなるコード教えてください。 よろしくお願いいたします。 Sub Macro3() Dim aa As Variant Dim i As Variant Application.ScreenUpdating = False Range("A14:i46").Select aa = ActiveSheet.Name ActiveWorkbook.Worksheets(aa).Sort.SortFields.Clear ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("B15:B46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("C15:C46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(aa).Sort .SetRange Range("A14:i46") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With For i = 0 To 31 Cells(15 + i, 7).Select If Selection.Value = 0 Then Selection.EntireRow.Hidden = True End If Next i Range("A1").Select Application.ScreenUpdating = True End Sub

  • EXCEL2000 複数行のソート方法について

    EXCEL2000 複数行のソート方法について教えて下さい。 EXCELのVBA(マクロ)にて、シート上の複数行をソートしたいと考えています。 エクセル上では、3つの行に対してソートができるのは知っています。 その操作をマクロに記録して、そのVBAを変更して5つの行に対して ソートを一括で行おうとしたのですが、エラーとなってしまいました。。。 以下が記録したVBAです =================================================================== Selection.Sort Key1:=Range("C15"), order1:=xlAscending, _ key2:=Range("G15"), order2:=xlAscending, key3:=Range("h15"), order3:=xlAscending, _ header:=xlGuess, ordercustom:=1, MatchCase:=False, Orientation:= _ xlTopToBottom, sortmethod:=xlPinYin =================================================================== このVBAを変更して3つ以上の行に対して一括でソートは出来るでしょうか? この方法ではやはり無理でしょうか? VBAを2つに分けてやる方法は最後の策だと考えています。 それ以前に2つに分けて出来るのか分からないのですが。。。 知恵をかして下さい。宜しくお願い致します。

  • VBA ファイルを読み込む際のSortメソッドの使い方

    tabで区切られたテキストファイルを読み込み、日時の列を昇順で並び替える処理をしようとしました。 sortメソッドを使って並び変えようとしましたが、上手くいきません。。 既に開いているエクセル上では簡単なsortメソッドを使って並び替えはできました。↓のようなマクロ記録を使って。 Range("A1:A11").Select Range("A1:C11").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin,DataOption1:=xlSortNormal ファイルを読み込んで、sortメソッドを使うには何か特別な方法があるのでしょうか?どなたか教えて下さい。よろしくお願いします。

  • Word2000のVBAでエラーが出ます

    VBA初心者です。Word2000上でExcel2000並べ替え用VBAを作成しまが、「名前付き引数が見つかりません」のエラーが出ます。 Sub Sort() Dim objExcel As Excel.Application Dim tmpBook As Excel.Workbook Set objExcel = CreateObject("Excel.Application") Set tmpBook = Workbooks.Open("C:\Dic1.xls") Range("A1:B100").Select Selection.Sort Key1:=Range("A1"), _ Order1:=xlAscending, _ Header:=xlGuess, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin tmpBook.Close True objExcel.Quit End Sub Excel2000上で同様のマクロを作成すると、正常に動作します。初歩的な質問で申し訳ありませんが、どなたか御教授をお願い致します。

専門家に質問してみよう