• ベストアンサー

Execlマクロのエラーを直したい

古いバージョンの話なのですが、Office98の頃のExcelで前任者が 作った複雑なマクロがあります。売上データを元にして、ピボット テーブルを作成し、さらにできあがった表からグラフを作成する という一連の流れがボタン一つでできるというマクロです。 前任者から引き継いだときは集計のときはボタンを押せばいいから、 ということしか聞いておらず、それでうまく行っていたのですが、 社内のPCを新しくしてExcelを2002にしたところ、マクロが途中で 止まってしまうようになりました。 現在はOSはXP、Officeは2003ですが、このマクロを動かすときだけは、 社内に1台だけ残っているWindows98のマシンに入っているExcel2000 を立ち上げ、マクロを走らせて対処していますが、いいかげんマクロを 直してExcel2003でも動くようにしたいと思っています。 マクロの内容もわからないままでこういう質問に答えるのは難しい とは思いますが、何か解決策やヒントを教えていただけると助かります。 よろしくお願いいたします。

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

  • ベストアンサー
  • lul
  • ベストアンサー率41% (10/24)
回答No.4

これってOffice2000の時は問題なく動いてたのですか? まぁ、とにかく セルのB列の8行目以降に"確定 計"という文字の入ったセルは存在しますか? その"確定 計"セルが無ければ無限ループしますね、でもこれってOffice2000でも同じだと思いますが。。。 回避策は以下の場所に1行追加して下さい。 … I = I + 1 Else End If If ActiveCell.Row >= 65536 Then Exit Do '←これを追加 Loop これでとりあえず処理は終了する事は出来ます。 でももし出来るなら作り直した方が良さそうな気がします。 因みに、マクロ実行中にESCキーを押すとデバッグに入れますよ。

niko_2008
質問者

お礼

lulさま 昨日教えていただいた1行を入れたうえで、いろいろ数字を 変えたりして検証してみたところ、うまく動作していました。 どうもありがとうございました。 かれこれ5年以上も、トライしては挫折していたこの問題を 解決してくださり大変感謝しています。 ご自分の技術で人助けができるなんてすばらしいです。 本当にどうもありがとうございました。

niko_2008
質問者

補足

lulさま アドバイスありがとうございます。 さっそく指示の1行を追加したところ、途中で止まらず マクロが正常に終了しました。 今日はもう時間がないので(-_-;)、明日改めていろいろ数字を いじって検証してみようと思います。 長年の懸案が解決しそうで、とても感激です。 ちなみにExcel2000では一応動くんですよね。おかしいですか? 取り急ぎ、お礼まで。 また質問させていただくかもしれません。 その際はよろしくお願いいたします。 本当にどうもありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 確かに、Office 97/98 時代の記録マクロに、そういう書き方がありますね。 ActiveCell.Range("A1:P1").Select 記録マクロで、相対参照で取るとこのようになります。 解決しているのかもしれませんが、いくつかポイントがありますね。 >全部で486行あるマクロなのですが、447行目で止まりました。 まず、これは分散し構造化したほうがよいです。プロシージャの塊は、100行程度までです。ただ、分散化するには、多少技術が必要になります。 それから、Selection というのは、オーバーヘッドでロスが出ますから、直したほうがよいと思います。 たぶん、「確定 計」が三個あれば、無限ループになりませんね。 それと、Excel VBAでは、Do ~ Loop は、あまり使わないということです。理由は、行や列がカウント出来るからだと思います。 Sub Test1()  Dim i As Long  Dim j As Integer  Dim LastRow As Long  LastRow = Range("B65536").End(xlUp).Row  Application.ScreenUpdating = False  For i = 8 To LastRow   If InStr(Cells(i, 2).Value, "確定 計") > 0 Then     LineMaking Cells(i, 2)     j = j + 1     If j >= 3 Then Exit For   End If  Next i  Application.ScreenUpdating = True  Columns("C:C").EntireColumn.AutoFit  Range("A2").Select End Sub Sub LineMaking(rng As Range) Dim v As Variant   With rng.Resize(, 16)     For Each v In Array(7, 8, 9, 10)     With .Borders(v)       .LineStyle = xlContinuous       .Weight = xlMedium       .ColorIndex = xlAutomatic     End With     Next v     With .Interior       .ColorIndex = 15       .Pattern = xlSolid       .PatternColorIndex = xlAutomatic     End With   End With End Sub なお、私の経験では、Excel2000 では、 .ColorIndex = xlAutomatic うまく行かないことがあります。その場合は、色番号(1)を指定してください。

niko_2008
質問者

お礼

Wendy02さま わざわざプログラミングを書いてくださりありがとうございます。 >まず、これは分散し構造化したほうがよいです。プロシージャの塊は、100行程度までです。 そ、そうなんですね。それじゃ486行っていうのは超長すぎですね。 しかしご指摘のように分散化に技術が必要とのことですので どうにかしのぎながら使っていこうと思います。 どうもありがとうございました。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.3

>何かエラー箇所を見つけるいい方法があるでしょうか ツール、マクロ、マクロ で、「編集」ボタンをクリックするとVBAの画面になります そこでファンクションキーの「F8」を押すと、一行ずつ実行されます それで止まる場所が判ると思います

niko_2008
質問者

補足

ASIMOVさま アドバイス、ありがとうございます! さっそくF8を押しながらやってみました。 すると止まるところが特定できました。 全部で486行あるマクロなのですが、447行目で止まりました。 下の記述の中の、 「←←←ここ!」という部分です。 しかしここまでわかってもその先の解決法が・・・ どこか見ればわかるよ、というようなサイトなどありますでしょうか。 アドバイスいただければありがたいです。 (もうシロウトレベルじゃ無理でしょうか・・・) ' 「確定 計」行編集 I = 0 Range("B8").Select Do Until I = 3 Selection.End(xlDown).Select If ActiveCell.Value = "確定 計" Then  ←←←ここ! ActiveCell.Range("A1:P1").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Interior .ColorIndex = 15 .Pattern = xlSolid .PatternColorIndex = xlAutomatic End With I = I + 1 Else End If Loop Columns("C:C").EntireColumn.AutoFit Range("A2").Select ' End Sub

  • lul
  • ベストアンサー率41% (10/24)
回答No.2

質問されている内容では詳しい事は分かりませんが、 まずエラーで落ちる箇所をデバッグする所から始めればいいんじゃないでしょうか? エラー箇所の関数もしくは計算式がOffice2003に対応していないんじゃないかと思われますので、その部分をoffice2003で使えるものに置換えてやればいいと思います。

niko_2008
質問者

補足

lulさま、早々の回答ありがとうございます。 >まずエラーで落ちる箇所をデバッグ そうなんですよね。しかしそのエラー箇所というのが よくわからないんです。 マクロを走らせると途中でハングアップするんです。 砂時計マークが出て、そのままずぅ~っと止まったまま。 仕方ないのでctrl+alt+delでタスクを終了させるしかなく。 よくVisual Basic のエラーではエラー箇所が黄色になって 教えてくれたりしますが、このケースはただ止まってしまう だけで、エラー箇所がわからないのです。 何かエラー箇所を見つけるいい方法があるでしょうか。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

社内(?)的にこの様な場所で公開できないならば、外注委託した方がより使いやすい物が 出来るかも知れませんよ。 例えば数年前とは違い、何か別の作業も追加したいとかにも対応できそうですけど。

niko_2008
質問者

お礼

n-junさま 早々に回答をありがとうございます。 本音では外注委託したいです。 しかし当方、零細企業で社長の許可が出そうにありません。 もう少し自分であがいてみることにします。 どうもありがとうございました。

関連するQ&A

  • マクロでピボットテーブルを行う方法

    マクロ初心者です。よろしくお願い致します。 マクロでピボットテーブルにて集計を行いたいと思っています。 コマンドボタン1発で以下の全ての動作を行いたいです。 ■動作詳細■ [OK]コマンドボタンで指定したファイルを開く。 [OK]集計しやすいようにファイル内のデータを加工。 [NG]指定して開いたファイル上でピボットテーブル集計ができない。 ■NG要因として■ 指定して開いたファイルのSheet1上のデータをピボットテーブル新規作成でSheet2に作成するので、集計する元のデータの場所(Sheet1)をマクロ上に記載する必要があると思うのですが、うまくいきませんでした。 どなたかお分かりになる方がいらっしゃいましたらご助言いただければと思います。よろしくお願いします。 ■作成マクロ■ ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "test01!C1:C8").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("コード") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("色") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("売上"), "データの個数 / 売上数量", xlCount 一度、作成したピボットテーブルのデータをマクロにコピーしてコマンドボタンにペーストしました。 それによって参照してあるセルの位置もズレてしまったのでしょうか? どこを直せばよいのか分からなくなってしまいました。 よろしくお願いいたします。

  • エクセルでピボットテーブルを使ったグラフ。

    エクセルでピボットテーブルを使いデータの集計を行い、ピボットグラフを作成したいと思っています。 グラフの作成までは出来たのですが、グラフの大きさなどを整えることができません。 グラフエリアのサイズや位置を変えることは出来たのですが、その中のプロットエリアや凡例のサイズや位置を変えることが出来ません。 プロットエリアなどをクリックし、隅のポイントをクリックしてもサイズなどを変えることができません。 ピボットグラフのフィールドボタンを表示しないようにもしてみましたが、それでもサイズなどを変えることはできませんでした。 (ちなみに、ピボットテーブルを使わないグラフでプロットエリアや凡例のサイズを変えることはできます) ピボットグラフでプロットエリアのサイズとかを変更することはできないのですか? また、変える方法があれば、お願いします。 使っているのは、Excel2003です。

  • エクセルマクロでファイルを開いて保存したいです。

    エクセルマクロでファイルを開いて保存したいです。 エクセルファイルでファイル名「編集」という物を開きます。 このSheet1には中央にコマンドボタンが作成して有ります。 このボタンをクリックして以下の作業をマクロで行いたいです。 1.エクセル標準の「ファイルを開く」のメッセージボックスが開く 2.ここは使用者が作業をしてもらう   マイドキュメントだったり、マイネットワークだったり、   (ファイルの種類はCSVにする)   処理をしたいCSVファイルを探してもらい選択後、開くをクリック   例えば20100922.CSVを選択し開くをクリック 3.クリックと同時にそのファイルが展開されて、「編集」のエクセルファイルの   Sheetにシート名「集計」が作成されそのシートにCSVファイルの全内容がセルA1から貼り付く。   さらに登録してあるマクロモジュールで編集処理がされ   マクロを引き継がず、シート「集計」だけを   ファイル名は固定でそのファイル名の後ろに作成日(システム日付)を入れて   参照したCSVファイルの保管場所に保存する。   ファイル名例:売上20100923.xls(売上は固定) 4.エクセル「編集」のファイルからシート「集計」を削除する。 5.メッセージBOXで「編集終了」と表示 次回エクセルファイル「編集」を開くと、コマンドボタンだけである。 また作成された「売上20100923」はマクロがないから開くときに マクロのメッセージは出ない。というようにしたいです。 NO.2のファイルを選択する作業は作業者にしてもらいますが シート1のコマンドボタン1回を押すだけでNO.1~NO.5まで完結させたいです。  NO.3のマクロ処理はマクロの記録でモジュールができています。 このマクロの作成方法と、そのマクロが出来たら その文のどこに作成済みの処理文を入れればいいのかわかりません。 よろしくお願いします。 ここでつまづいています。この後この選択したファイルの全内容が シートの集計に展開されません。 Private Sub CommandButton1_Click() Call 集計 End Sub Sub 集計() FullPath = Application.GetOpenFilename("CSV,*.CSV") If FullPath <> "False" Then Sheets("Sheet1").Select Sheets.Add ActiveSheet.Name = "集計" With ActiveSheet.QueryTables.Add(Connection:="CSV;" & FullPath, Destination:=Range("A1"))   マクロの記録で作成したマクロ   シート"集計"をマクロを引きつかずファイル名売上&システム日付で保存   シート"集計"を削除する

  • Excelマクロ集計プログラムで図形が何十にもコピーされる問題です。

    Excelマクロ集計プログラムで図形が何十にもコピーされる問題です。 Excelのマクロを使用しデータ集計作業のプログラムを作り社内提供しています。 提供先は毎日データ入力と集計の繰り返ししていますが、かなりの使用期間後、容量が肥大化する問題があるようです。 原因は不明ですがデータ量で肥大化したのでなく、たくさんのシートにマクロ登録した図形、単なる図形、グラフが何十にも重なった(コピーされた)状態になっていました。 重複図形を消すと容量は元に近くなります。 開発はoffice2003、使用はOffice2007です。 可能性のある問題と解決法をご教示ください。

  • 点数集計用エクセルマクロの作り方

    エクセルでのマクロは全くの初心者です。今、たとえばテスト結果の集計をマクロで自動的にしようとしています。 ・解答者:あいう、かきく、さしす、・・・・ ・クラス:A,B,C,D、・・・・ ・1回目点数:10点、20点、30点、・・・・ ・2回目点数:10点、20点、30点、・・・・ といった、採点結果.csv があるとします。 機能(1) マクロでできたエクセルの集計ボタンを押すと、  ・クラスがA  ・2回目点数が50点以上  ・(2回目点数 - 1回目点数)>0 の条件で、csvの行をエクセル行として下へ下へ書き出してくれる 機能(2)  最後に件数の合計行を表示 機能(3)  合計行のセルを別シートのセルにコピー  (グラフ作成の基となる表の材料とするためです) というようなマクロを作成したいと思っています。 どのようにすればいいのでしょうか? 質問の仕方があいまいですが、おそらく録音ボタンを押して 一連の動作を記録?して、あとはソースを編集するといったほうほうでいいのでしょうか? ifを使うなど、概要でいいので、やり方を教えていただけるとありがたいです。

  • EXCELのマクロにて

    下のようなデータベースがあります。 No  値1  値2 10   3   2 8   2   4 6   2    6  3   5   3 8   7   5 このようなデータベースからピボットグラフを作成しているんですが、データベースに上端でフィルターをかけNo列にて特定の値を選んだときにそれに対してピボットグラフもフィルターで選んだNoになるようなマクロは組めませんか? ちなみにピボットグラフにはページにNoを、データに値1・値2の合計を表示させています。 マクロに変数(?)を設定すると出来るらしいのですが記述がわからないのです。

  • マクロ付きEXCELファイルがASPで操作できない

    初めて質問いたします。 ASPとVBAを使い、SQLサーバより取得したデータをサーバのEXCELファイルに挿入し、グラフを作成。 さらにグラフをgif化し、それをクライアントに表示するというシステムを作成したいのですが、EXCEL2000の場合のみマクロ付きのEXCELファイルをopenしたり、マクロを呼び出したりしようとすると、画面がかたまってしまいます。 最初は見えないところで「マクロを有効にする」などのメッセージがでているのかと思い、デジタル署名などを行ってみたのですが、ASPからVBAのマクロを呼び出すことができませんでした。 EXCEL97がはいっているサーバで試したところうまくいったのですが、EXCEL2000の場合のみうまくいきません。 環境は、 サーバ側:Windows2000+IIS5.0+office2000 クライアント側:IE5.0 です。 以下にソースを記します。 http://www.geocities.co.jp/SiliconValley-Cupertino/8836/sample.html 原因及び回避方法がわかる方どうぞ力をお貸しください。よろしくお願いします。

  • エクセルからワードのマクロを実行したい

    1. ワードで作られた報告書の表の数値をエクセルにコピーし、 2. その数値を使ってエクセルのオートシェイプでグラフを描き、 3. グラフをもう一度ワードの所定の位置に図として貼りつける、 というマクロを作成しています。ワードの表をコピーするマクロと、エクセルでグラフを描くマクロは作成できました。 問題はエクセルのシートに配置したコマンドボタンをクリックすると、グラフの入ったセル範囲をコピーするまではできたのですが、その後にワードのマクロを指定して実行させる方法がわかりません。 1.→2.のエクセルのマクロを実行する方はauto_openで何とかなったのですが、2.→3.は既にワード文書は開かれていますし、auto_openでは1.の手順ができなくなってしまうので困っています。 もし、エクセルのマクロでワードを操作などできるのでしたらそれでもよいのですが…。 ワードのマクロは初挑戦で、色々サイトも探したのですが見つかりませんでした…。 使用していますのは、Windows98SE,Excel97,Word97です。 ご存知の方、どうぞよろしくお願い致します。

  • シートの保護、グラフ作成

    お世話になります。 Excelでアンケートの集計をしています。 別のシートに集計データを参照しました。そこにマクロの記録で、グラフを作成するマクロを作成しました。また、このマクロを登録したボタンを配置しています。 このシートに、「シートの保護」を設定しました。 その後、マクロボタンをクリックすると別添のメッセージが表示され、グラフは作成できません。 確かに、「挿入」タブのリボンは、グレーアウトしています。 「シートの保護」を設定した後も、ボタンからグラフを作成する方法はないでしょうか。 よろしくお願いします。 エラーメッセージ 「実行時エラー”1004”」 「指定された値は境界を超えています。」 OS: Windows 7 professional SP-1 32Bit Office: 2010 Professional 32Bit

  • マクロのセキュリティレベルについて

    Excel2007でのマクロの設定をするにはOfficeボタン → Excelのオプション → セキュリティセンター → セキュリティセンターの設定 → マクロの設定に4つの項目がありますよね。 Excel2007でExcel2003のレベル 中(M)に相当するモノを選定したいのです。どれを選ぶべきか教えてください。

専門家に質問してみよう