• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA エラーと対策)

VBA実行時エラーの対策と原因について

このQ&Aのポイント
  • VBAを使用してエクセルのデータを並び替えようとした際に、実行時エラーが発生しました。エラーコードは'1004'で、RangeクラスのSortメソッドが失敗したことを示しています。また、別のエラーコード'-2147417848(80010108)'も発生し、オートメーションエラーが発生しました。このエラーは、起動されたオブジェクトがクライアントから切断されたことを示しています。具体的な原因は分かっていないため、質問しました。
  • エラーの原因については特定されていませんが、VBAを使用してデータを並び替える際に発生する実行時エラーとオートメーションエラーの対処法があります。実行時エラーの場合、Sortメソッドの引数の範囲指定が正しいか確認すると良いでしょう。オートメーションエラーの場合、オブジェクトの起動や切断に関連する問題が起きている可能性があります。具体的な原因を特定するためには、詳細な情報が必要です。他の環境で同じコードを実行してエラーが発生するかどうかを確認し、問題が特定できない場合は、VBAのバージョンや使用しているアプリケーションの環境などを確認することをおすすめします。
  • VBAを使用してエクセルのデータを昇順で並び替えようとした際に、実行時エラーやオートメーションエラーが発生しました。具体的な原因は不明ですが、エラーの解決策としては、Sortメソッドの引数の範囲指定を確認することや、他の環境で同じコードを実行してエラーが発生するかどうかを確認することが有効です。また、VBAのバージョンや使用しているアプリケーションの環境も確認することをおすすめします。

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

  • ベストアンサー
回答No.3

こんにちは。 >セルに書き込んで、結果を読み込むようにすれば上手くいきますか? 10+32,767(字) * 2(byte) / 1,024 だから、約64kb 文字列はすべて2バイト扱いされます。 それに反して、String型の変数は、2Gまでです。 もちろん、Variant型でも、量的には減りますが、それでも、扱うことができると思います。 ところで、TextBoxの容量はいくつだったか、調べてみると、以下のような話が見つかりました。 まず、間違いないと思います。 --- http://www5b.biglobe.ne.jp/~yone-ken/VB/TextBox.html TextBoxにまつわるFAQ [テキストボックスって容量の制限はあるんですか? ] [64Kbyteです。それ以上のテキストを扱う場合はRichTextBoxを使います。ちなみに、文字列変数は固定長でも可変長でも最大約2Gbyteまでです。] ----- 私は、RichTextBox という手があることをすっかり忘れていました。 もちろん、Excel2003では、フルインストールしていれば、VB6Runtimeに入っているはずです。 なければ、MSからダウンロードすればよいです。試してみる価値は十分にあると思います。

satoron666
質問者

お礼

回答ありがとうございます! RichTextbox、標準で入っていませんでした… なので、探してみようと思います^^

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

ところで、SPLITに関しての質問というのは、何だったのでしょうか? 削除されてしまっていたのですが、これとは関係あるのでしょうか? もし、うまく行かないというなら、なかなか厄介な問題があるような気がします。 なぜなら、SPLITで分けられる配列は、おそらく、Variant で受けなくてはならないからです。 もし、明示的なデータ型なら、もう少し余裕が取れるからです。

satoron666
質問者

お礼

回答ありがとうございます。 見て頂いていたようですが、 この質問と同じような内容でした。 少し対策を考えて見ます^^

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

こんばんは。 >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 上記マクロに関しては、他人が書いたもののようですから、それは、今のところ触れないことにしますが、Key1:=Range("E3")などのKeyは、アクティブシートという意味ですから、シートを限定した使い方だと思います。 本題はこちらになります。 >実行時エラー'-2147417848(80010108)' >オートメーションエラーです。 >起動されたオブジェクトはクライアントから切断されました。 >と表示されます [ マクロ ] エラーになったりならなかったりする http://okwave.jp/qa/q8484198.html こちらに書きましたが、未だ、解決する見通しは立っておりません。 確か、ご質問者さんは、Excel2003ですから、今、何に対して、オートメーション・エラーを起こしているのか分かりません。 エラーの意味は、オブジェクトが生成されていたものが死んでしまって、そのオートメーションの残骸にアクセスしようとしているということなのですから、今、その範囲は限られるはずです。 VBA上のエラーですが、その戻り値は、Cのエラーです。 >フォーム上のテキストボックスにデータが記入されています。 これは、文章として、ユーザーフォームのことでしょうか。 もし、そうですと、実務上は、意外に気をつけなくてはならない部分があります。 もしかして、1つのTextBoxに対して、取得したテキスト・データが大きすぎるのかもしれません。 それで、TextBoxが死んでしまうかもしれません。 もし、そうなら、設計の根本から変えたほうがよいでしょう。 Range("A1").Resize(Ubound(a),1) = Application.Transpose(a) として、セルに張り付けすること自体は、エラーが発生する要素はありませんが、Excel 2003の配列のデータ量は、公開はされていないのですが、およそ5~6,000個(セル数)の間ぐらいだったと思います。

satoron666
質問者

お礼

回答ありがとうございます。 ご指摘通り、Textboxが死んでいるのかもしれません。 データは多いときに数十万という文字列が記入されます。 http://okwave.jp/qa/q8452163.html VBA フォーム上textbox指定範囲の抜き出し 上記方法を採用しております。 しかし、テキストボックス上には全ての文字データが入っておらず、途中で終わっているような状態でした。 セルに書き込んで、結果を読み込むようにすれば 上手くいきますか? 回答ありがとうございました^^

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

前半 データは何行ありますか?

satoron666
質問者

お礼

回答ありがとうございます! データは2130行ありました。 前半の質問は、なぜかExcelを再起動したら直りました! ありがとうございます^^

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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のアップデート実行直後というのもあり、 そっちが問題なのでは…とも思っていたりもします。 ネットで調べて ログイン項目やらライブラリ内の一時ファイル削除やら セーフモードでの実行も試したのですが、改善しなかったため ソースが問題なのではと思い、質問させて頂きました。 宜しくお願い致します。

  • VBA SORT Applyでエラー

    今日パソコンが新しくなり、office2003から2010になりました。 2003で作成したマクロで、SORTメソッドを書き換え実行したところ、『実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです』とメッセージが… デバッグでみると、Applyのところが黄色になっていました。 何が悪いのか教えてもらえますか? Worksheets("営業所順位表").Activate Application.Calculation = xlCalculationAutomatic '再計算自動 With ActiveSheet.Sort.SortFields .Clear .Add Key:=Range("E3"), Order:=xlDescending End With With ActiveSheet.Sort .SetRange Range("A3:S68") .Header = xlYes .Apply ←ここが黄色に End With

  • エクセルVBAでデータ並べ替え

    マクロ記録をとると次のようになりました。 これをA列をキーに並べるもっと簡単なコードを教えてください。 Range("A2:G501")となっていますが、これ以上でも対応できるようにしたいです。 どなたか教えていただけないでしょうか。 Sub Macro1() Range("A1").Select ActiveWorkbook.Worksheets("***").Sort.SortFields.Clear ActiveWorkbook.Worksheets("***").Sort.SortFields.Add Key:=Range("A1"), SortOn _ :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("***").Sort .SetRange Range("A2:G501") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • 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を別のシートから(?)ということはできるのでしょうか?

  • 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を用いて、「行のデータ」基準にして「列を並べ替える」ことは可能なのでしょうか? どなたかご教授ください。 よろしくお願いいたします。

  • 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ソートについて

    はじめましてm(__)m 昇順ソートで「0」を覗いてソートをかける方法をお教え頂けないでしょうか? 現在、下記方法でソートしております。 どうぞ宜しくお願い致します。 Sub J列目() Range("A9:L65536").Sort _ Key1:=Range("J9") _ , Order1:=xlAscending _ , Header:=xlGuess _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin End Sub

  • エクセルのvba(最終行を取得する並び替え)

    初めまして、エクセルのvbaについて質問をさせてください。 マクロの記録を使って、以下の通りF列→M列→J列の順に優先して、A列からAL列を昇順に並び替えるvbaを作成したのですが、10000行までとう不恰好な書き方になっています。最終行までという書き方に変えたいのですが、色々試したもののうまくいきません…!この場合、最終行を取得するにはどのような書き方にすれば良いのでしょうか…??(T-T) '並び替え ActiveWorkbook.Worksheets("当月").Sort.SortFields.Clear ActiveWorkbook.Worksheets("当月").Sort.SortFields.Add Key:=Range("F2:F10000"_ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortTextAsNumbers ActiveWorkbook.Worksheets("当月").Sort.SortFields.Add Key:=Range("M2:M10000"_ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("当月").Sort.SortFields.Add Key:=Range("J2:J10000"_ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("当月").Sort .SetRange Range("A1:AL10000") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With

  • VBAのソートで

    お世話になります。 初歩的な質問なのですが・・。 表のソートをしたいのですが、 表は2行目に見出しがあり3列で100行の構成です。 下記の様な記述で表の範囲をセットするところでエラー がかかってしまうのですが、どうしたらうまくいくでしょうか。 どなたかご教示頂きたく宜しくお願い致します。    記 Sub ソート() Dim myrhg As Range Dim myar As Variant Dim i As Long Sheets("台帳").Range("A1").CurrentRegion.Select Selection.Offset(1, 0).Select Set myrng = Selection.Resize(Selection.Rows.Count - 1).Select myar = Array(1, 2, 3) With myrng For i = 0 To UBound(myar) .Sort key1:=Cells(1, myar(i)), Order1:=xlAscending, header:=xlYes Next End With Set myrng = Nothing End Sub

  • 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との兼ね合いで決まり等があるのでしょうか。 色々なサイトを回ってはいるのですが、ちょっと解決 にいたることができません。 どなたか、ご教授いただけると幸いです。

専門家に質問してみよう