• 締切済み

Excel

VBAを使用してExcel上で動作するプログラムを作成し ているのですが、セルに対して見えないコントロールを 処理しながら載せていっているのですが、ある一定数に 達した時、”実行時エラー”438が出て終了してしまう のです。ちなみに、処理はループをしており、1行目か ら連続してコントロールを載せて行き、行の桁が大きく なると発生してしまいます。質問ですが、一つのシート に載せる事が可能なコントロール数上限値があるのでし ょうか?。対処方法があれば、教えて頂けませんでしょ うか。

みんなの回答

  • mofy
  • ベストアンサー率0% (0/0)
回答No.2

Excelのバージョン(2003以前か2007)でも、配置数 (セル数)等の仕様が異なっています。変数で処理しているのであれば、 変数の型(カウントしている変数がint型ならば、int型の最大値を 突破している)を変更するだけでエラー回避できるかもしれません。 また、パソコンの性能、OS、Excelのバージョン、実際のコーディング のコードを記載すれば、他の優秀な方々が教えてくれたりしますよ。 VBAなら、デバッグ・ウォッチウィンドが使えるので、これ見ながら ステップインしていくと、変数やコントロールがどの状態でエラーが 出るのかわかるので、原因究明できるかもしれません。 直接的な回答でなく、すみません。

  • pussyfoot
  • ベストアンサー率28% (39/138)
回答No.1

あまりにも沢山のコントロールを配置するとシステムリソース不足に陥りますよ。 リソースを確認してください。 ってOSはWindows9XかMeですよね。 MACだったら知りません。

関連するQ&A

  • エクセルVBAでタイマーコントロールは使えますか

    エクセルVBAでタイマーコントロールは使えますか。 エクセルVBAで、ある時刻になったらマクロを実行させたいと思っています。 無限ループの中にTIME関数で時刻を呼び出し、それをIF文で判定して、 一定時刻にマクロを実行させるものは作りましたが、CPU負荷が高く、24時間 連続で動作させることに不安を感じています。 この他に、VBのタイマーコントロールのような機能を持つオブジェクトや 便利機能等があったら教えていただけませんか。 (一応、VBで時刻管理をするプログラムを作ってそこからエクセルVBAを呼 び出す方法やタスクスケジューラでエクセルVBAを呼び出す方法、ATコマンド 等も考えていますが、可能ならエクセルVBAで閉じて処理をしたい)。 尚、私はWindowsMe+エクセル2000でVBAを作成しています。 実際にVBAを動かすのは、WinsowNT4.0サーバー+エクセル2000を予定してい ます。

  • エクセルにて

    AとBというブックがあり、Bには200程度のシートがあるとします。 Bのシートは全部同じ形式のシートです。 そのシート名は全て6桁の数字になっています。 AのシートのあるセルにそのBのシートの6桁の数字を 入力した時に、Aのシートの任意のセルにBのブックの同じ6桁のシートの任意のセルを参照させるにはどのようにしたらよいのでしょうか? できれば関数だけで処理できるとありがたいのですが それともやはり変数を使用したVBAでないと無理でしょうか? 分りづらい表現で申し訳ありませんがよろしくお願いします。

  • Excel VBA 「印刷中」メッセージを非表示にしたい

    Excel・VBAで顧客ごとに手紙を印刷するために、 下記のような処理を記述しました。 <使用しているシート>  sheet1 顧客リスト(100行ほど)  sheet2 顧客に送付する手紙のフォーム <処理概要>  1.sheet1を上からループさせながら1行ごとデータを   読み込む。  2.1のデータをsheet2に書き出す。  3.sheet2(フォーム)の印刷をおこなう。  ※2、3は1のループの中で1件ずつおこなう。 3の処理で 「sheet2.printout」 という命令をかけているのですが、印刷の実行がかかるたびに「印刷中:n/nページを印刷中です」というメッセージが出てくるので、これを非表示にしたいのですが、何かいい方法はありませんか? よろしくお願いします。

  • EXCELで4色の色をつけるVBA(既存)を最後のシートまで実行するには?

    エクセルのVBAで質問です。 現在、下記のVBAにて、エクセルに4色の色をつけています。 内容 ・処理範囲内(D5:AI50)の列の値が、 ・指定した行(4行目)の値から見て、 ・+5、+10、-5、-10の場合、それぞれ指定した色をつけています ・ただしC列の値が30未満の行は色付けなし 現状では、このマクロはアクティブシートのみで使えるため、 100シートあれば、それぞれのシートにおいて そのつどマクロを実行しています。 これを、一度の実行で最終シートまで実行できるようにしたいのです。 VBA初心者のため、見よう見まねでループを試してみたものの、 どうもうまく動きませんでした。 なにとぞご教授のほど、お願いいます。 ●以下、現在使用しているVBA Sub 条件付4色の標本数1() Dim 処理範囲 As Range Dim 先頭の行番号 As Long Dim 全体の行数 As Long Dim 各セル As Range Dim 差分 As Single Dim 標本数 As Single Set 処理範囲 = Range("D5:AI50") For Each 各セル In 処理範囲 標本数 = Cells(各セル.Row, "C").Value If 標本数 >= 30 Then 差分 = 各セル.Value - Cells(4, 各セル.Column).Value    Select Case 差分 Case Is <= -10 各セル.Interior.ColorIndex = 37 'ペールブルー 各セル.Font.ColorIndex = 1 Case Is <= -5 各セル.Interior.ColorIndex = 34 '薄い水色 各セル.Font.ColorIndex = 1 Case Is >= 10 各セル.Interior.ColorIndex = 6 '黄37 各セル.Font.ColorIndex = 1 Case Is >= 5 各セル.Interior.ColorIndex = 19 '薄い黄 各セル.Font.ColorIndex = 1 Case Else 各セル.Interior.ColorIndex = xlNone '無色 End Select End If Next End Sub

  • エクセルVBA コントロールのプロパティの変更

    エクセル2003でシート上に割り付けたラベルコントロールをVBAでCaptionプロパティで 変更するプログラムを作ってみました。(同じ様にボタンコントロールのCaptionプロパティに ついても作りました。) ステップ実行(F8)では、思ったとおり変更されますが、普通の実行(F5)では思ったとおり 変更されず、遅れて最後のコマンド分しか変更されませんでした。 *条件ループでセルのテキストを順番に読みコントロールのCaptionとして変更するプログラム  です。  なぜ出来ないのか分かりません。  原因又は、方法を教えていただけないでしょうか?    VBAでは、オブジェクト名に配列を使えないらしかったのでOLEObjects(コントロール?、  コレクション?)でオブジェクト名の配列のように使っています。  あまり、詳しくないので用語が間違っていたらすいません。  後、途中にインターバルタイマー入れたりして、動作確認しましたがやはりダメでした。

  • Excelの一行を一ファイルとして保存する方法は?

    一週間まえ、多数ファイルをExcelに取り込む方法を教えて頂いたヒロです。 その時はtemtecomaiさんにVBAを作って頂き他の方からもアドバイスして頂き有難うございました。 で、こんどは逆にExcelの一行を、元の様に一枚のTXTファイルに戻したいんですんですが、やりかたを教えてもらえないでしょうか。 。 セル内の数字は一部変わってますが形式や文字数はExcelに読み込んだ時のままです。 シート1行目のAセルの数字(三桁)をファイル名とし、Bセルの数字をそのファイル内の1行目に書き込み、Cセルの数字を2行目に書き込み、Dセルのを3行目に、同じくEセル、Fセル・・・・AGセルまで。 次にシートの2行目も同じように、さらに3行目、4行目・・・・。 それで行数分の枚数のTXTファイルを作りたいんです。 m(__)m                     * ヒロ *

  • エクセルのループ処理について

    ループ処理で、2つのシートを内容を比較して 一方のシートにあったデータを別のシートのリストから削除しています。しかし、単純なループ処理でやるとすごく時間がかかるので早く処理する方法を教えていただければと思います。 シートA(3000件)とシートB(5000件程度)があり,AとBともにデータのソートを行なっています。そして、 シートAの特定セルのデータを順番に読み、その内容がシートBのあるセルのデータと一致するか検索し、セル値が同じ場合、シートBの行を削除するような仕組みです。 よろしくお願いいたします。

  • Excelで任意セルをWindows上の左上に持ってきたい

    Excel2002で任意セルを左上にVBAで持ってきたいのですが どうすればいいでしょうか? 任意セルが含まれる行/列が入力のそれぞれ行/列タイトルに なっていて、そういうエリアがシート上にいくつか存在します。 次のエリアに飛ぶのにいちいちスクロールするのが手間なので VBAでコントロールできないかと思います。 そのセルに飛ぶのは簡単なんですが・・・

  • Excel VBAの連続印刷について。

    Excel VBAをこれから始めてみようとしている超初心者です。 手始めとして、以下の処理をさせてやろうかと思っていたのですが いきなり挫折しまいました。。 ◎Sheet1から順番に最終シートまでを連続印刷。 ◎最終シートまで印刷されたら処理終了で、Sheet1を表示させる。 ・データによってシート数は変動する。最終がSheet50の時もあれば  Sheet300の時もあり。 ・シート名は「Sheet」+半角数字で、連続している。 シート名を変数にして、1ずつ加えていって…と考えながら、色々と 繰り返し処理についてもネットで調べてみたのですが、結局頭の中で 行き詰ってしまいました。 非常に簡単な処理だとは思うのですが、どのような書き方があるのか ご教示頂ければ助かります。 宜しくお願いします。

  • エクセル VBA

    最終行から順番に下へ同列で入力するVBAを教えて下さい。 EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 B列には日付が、H列には3~4桁の数字が入力したいのですが、 入力行は必ず最下行のセルB、Gな為、VBAでフォームを作成し、 入力実行ボタンを押すことにより、最下行のセルB、Gに反映されるように したいです。 又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。

専門家に質問してみよう