こんにちは。最近エクセルのマクロを使っています。
使っているといっても全く初心者で、自分で作るというよりは、マクロを記録させて、ちょこっと編集したりして、なんとか便利に使っています。
ところで、最近、まったく同じレイアウトの400枚分のシートに置換を施さなければ行けない事態になったので、上の方法で一枚分だけマクロをつくって、あとはコピーペーストで400枚分に増やし、シート名とか必要な部分をちょこっと編集して、実行しました。
一度目はほとんどうまく実行できたのですが、全てのシートのセルを結合した部分だけ置換されなかったので、こんどは上のマクロに、「Range("B2:D6").Select」をつけたし、選択部分だけ置換するように書き換えて別のマクロとして保存しました。
ところが、このマクロを実行しようとすると、「コンパイルエラー:プロシージャが大きすぎます」というエラーが出てしまい、実行できません。
いったいこのエラーは何なのでしょうか?そしてどのように解決したら良いのでしょうか?
No.6ベストアンサー
- 回答日時:
他の方への補足をみるとこんな感じでしょうか?
Sub Test2()
Dim i As Integer
For i = 1 To 400
Worksheets("Sheet" & i).Range("B5:D9").Replace _
What:="$401", Replacement:="$" & i + 1, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False ', _
'SearchFormat:=False, ReplaceFormat:=False
Next
End Sub
実行すると、
シート名 Sheet1 の B5:D9 にある $401 を $2 に
シート名 Sheet2 の B5:D9 にある $401 を $3 に
・
・
シート名 Sheet400 の B5:D9 にある $401 を $401 に?
って感じになると思います。
papayukaさん!でっ!!できましたよ!
途中、うっかりマクロをどこかにやってしまって(多分、頭の緑色にの文字を消してしまったから?)しばらく四苦八苦してしまい、お礼が遅くなってすみません。
お忙しいのに、丁寧な回答をありがとうございました。このマクロでばっちりできました!ど素人の私にもわかりやすい説明で、ほんとうに勉強になりました。大感謝です(^o^/
ほんとうにありがとうございました。
No.5
- 回答日時:
またまた、こんにちは。
明確にどの Sheet の Range を操作するか指定してやらないとダメです。
SearchFormat と ReplaceFormat は私の使っている Excel97 には無いので、例ではコメントアウトしています。
同一ブック内の全てのシートをループして、B5:D9に "$401" が ある場合は "$2" にします。
Sub Test()
For i = 1 To Worksheets.Count
Worksheets(i).Range("B5:D9").Replace _
What:="$401", Replacement:="$2", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
', _SearchFormat:=False, ReplaceFormat:=False
Next
End Sub
No.4
- 回答日時:
再びこんにちは。
例えば、自動記録で、Macro1を作ったが長くて実行出来ない場合、Sub Macro1() '←長すぎるMacro1
・
・
・
・
End Sub
下記のようにちょっと手を加えると実行出来たりします。
Private Sub Macro1() '←Private を Sub の前に加える
・
・
End Sub '←区切りのよさそうな所に書き加える。
Private Sub 続き() '←適当な名前で Private Sub を書き加える。
・
・
End Sub
Sub 実行() '←適当な名前の Sub を作り、これを実行する。
Macro1 '←実行した順番にマクロ名を書く
続き
End Sub
あと、同じ処理を複数のシートにする場合は、ループで処理するのが普通です。
ブラウザ上で書いたのでちゃんと動くか解からないけど、こんな感じで。
Sub Test()
For i = 1 to WorkSheets.Count
'↓この間に処理したい事を書く
MsgBox WorkSheets(i).Name
'↑この間に処理したい事を書く
Next
End Sub
papayukaさん、丁寧な解説、ありがとうございます。
超初心者の私でも大変わかりやすく、本当に感謝です。早速やってみます。
最後の「ループで処理」がちょっと分からないのですが、下の補足を参考にしてちょっと書いてみると、こんなかんじでしょうか?
Sub Test()
For i=1 to WorkSheets.Count
Range("B5:D9").Select
Selection.Replace What:="$401", Replacement:="$2", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
MsgNox WorkSheets(i).Name
Range("B5:D9").Select
Selection.Replace What:="$401", Replacement:="$2", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next
End Sub
なぜか、行頭のスペースがうまく出てきませんが、ご容赦ください。
No.3
- 回答日時:
試しにB2:D6の結合セルを全て結合解除してから、マクロを実行してみては、いかがでしょう?これでエラーが出なくなるようでしたら、結合が原因であると言えます。
もし、結合が原因だとしても、結合解除以外に解決方法があるかも知れませんので、補足として、マクロのコードを記載してみてはどうでしょう?
この回答への補足
wildcardさん、再度回答ありがとうございます。
マクロは以下のとおりです。
Sheets("Sheet1").Select
Range("B5:D9").Select
Selection.Replace What:="$401", Replacement:="$2", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
これが、
「Sheets("Sheet1").Select」の部分と
「Replacement:="$2"」の部分を変えて、延々と400シート分続いています。つまりSheet1からSheet400までと、$2から$401 までです。
マクロでなく、手作業で同様の置換作業をしてみると、結合セルの混在に関わらず、選択部分はきちんと置換されるのですが・・・。
No.2
- 回答日時:
こんにちは。
単純に、プロシージャの行数が多すぎるのでは?
適当なところで複数に別けて、連続実行用のプロシージャを作ってみては?
papayukaさん、回答ありがとうございます。
実は私、ただの初心者ではなく「超初心者」で、しかもマニュアルなしで「なんとなく」な作業をしているもので、「プロシージャ」がなんなのかもわからないのです。SubからEnd Subまでの間にあるコマンド(?)のことでしょうか?
そして「連続実行用のプロシージャを作る」とはどんな作業をすれば良いのでしょうか?
お時間のある時で構いませんので、またお教え下さい。
No.1
- 回答日時:
もしかして、これに当てはまるとか?
http://search.microsoft.com/gomsuri.asp?n=1&c=rp …
参考URL:http://search.microsoft.com/gomsuri.asp?n=1&c=rp …
早速お返事いただき、ありがとうございます。
参考ページ、拝見しました。事例としては似ているのですが、選択したくない部分まで選択してしまうわけではないんです。それとも選択範囲内に、結合セルとそうでないセルがあるのがいけないのでしょうか?
時間があれば、またアドバイスお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/07/05 09:30
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Excel(エクセル) エクセルで最下行にデータを追加するVBA 6 2023/05/09 09:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
F9キーについて。
-
Excel 小さくなったスクロール...
-
Excel関数について教えてくださ...
-
計算能力
-
Excelセルを跨いで合計を出す方法
-
Excelに詳しい方! B列が「日...
-
エクセルでファイルの最終更新...
-
Excelのピボットグラフの作り方...
-
Excelファイルが開けません
-
Excel 2019 [オプション]の[リボンのユ...
-
【EXCEL】画像の黄色部分の抽出...
-
スプレッドシートの関数につい...
-
エクセルで 自動的に◯や数字を...
-
excel2013 MonthDays 関数が使...
-
シフト表をエクセルで作るとき...
-
EXCELの散布図で日付が1900年に...
-
特定の文字列を含む、住所を抽...
-
Excel分数の表示について
-
エクセルの関数について教えて...
-
マイクロソフトのPADを使ってい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報