こんにちは。最近エクセルのマクロを使っています。
使っているといっても全く初心者で、自分で作るというよりは、マクロを記録させて、ちょこっと編集したりして、なんとか便利に使っています。
ところで、最近、まったく同じレイアウトの400枚分のシートに置換を施さなければ行けない事態になったので、上の方法で一枚分だけマクロをつくって、あとはコピーペーストで400枚分に増やし、シート名とか必要な部分をちょこっと編集して、実行しました。
一度目はほとんどうまく実行できたのですが、全てのシートのセルを結合した部分だけ置換されなかったので、こんどは上のマクロに、「Range("B2:D6").Select」をつけたし、選択部分だけ置換するように書き換えて別のマクロとして保存しました。
ところが、このマクロを実行しようとすると、「コンパイルエラー:プロシージャが大きすぎます」というエラーが出てしまい、実行できません。
いったいこのエラーは何なのでしょうか?そしてどのように解決したら良いのでしょうか?
No.1
- 回答日時:
もしかして、これに当てはまるとか?
http://search.microsoft.com/gomsuri.asp?n=1&c=rp …
参考URL:http://search.microsoft.com/gomsuri.asp?n=1&c=rp …
早速お返事いただき、ありがとうございます。
参考ページ、拝見しました。事例としては似ているのですが、選択したくない部分まで選択してしまうわけではないんです。それとも選択範囲内に、結合セルとそうでないセルがあるのがいけないのでしょうか?
時間があれば、またアドバイスお願いします。
No.2
- 回答日時:
こんにちは。
単純に、プロシージャの行数が多すぎるのでは?
適当なところで複数に別けて、連続実行用のプロシージャを作ってみては?
papayukaさん、回答ありがとうございます。
実は私、ただの初心者ではなく「超初心者」で、しかもマニュアルなしで「なんとなく」な作業をしているもので、「プロシージャ」がなんなのかもわからないのです。Subから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.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.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.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^/
ほんとうにありがとうございました。
お探しの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ランキング
-
エクセル初心者です 関数の入れ...
-
Microsoft1Officeの互換ソフト...
-
Excel ピボットテーブルで日付...
-
エクセル関数を教えてください
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
LOOKUP関数を使えばいいのでし...
-
エクセル 白黒印刷で白線を印刷...
-
【関数】先頭だけにある、半角...
-
【関数】適切な文字数の数字を...
-
Excelのチェックボックスの使い...
-
エクセルでの作業計算方法について
-
Excelのpivotについて質問です
-
WPS OFFICEでの縦書きについて
-
時間によってファイル名が変わ...
-
エクセルのセルに同じ大きさの...
-
Aというブックの1というシート...
-
エクセルの順位別一覧表の自動...
-
西暦や和暦の表示をyyyymmdd表...
-
【マクロ】エクセルにかいてあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報