![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんばんは。
以下のマクロにいて 1467行目まで架空の会社データを作成し、変換を実施すると
1回目の実行は5秒以内におわるのですが、その後、他のシート(シート1、2)どれでも
いいのですがどこかのセルに文字を書きその文字に対して検索をおこないます。その後、再び実行すると処理がおわるまで数十秒から数分またされます。office365です。
サンプルデータは以下4つを適当に1467行目までコピーアンドペーストしました。
ネット・株式会社
ネット株式会社
日本株式会社
情報株式会社
IM株式会社
事象 作成する。保存する。 閉じる 立ち上げる マクロを実行する(数秒の処理(完))
シート2に文字を書き検索する。マクロを実行する 数十秒から数分かかる。
遅くなるのは僕の記載方法の問題なのでしょうか?
宜しくお願いいたします。
以下 自分が作ったマクロとなります。
Sub ded()
Dim myrange As Range
For Each myrange In Range(Cells(15, 1), Cells(1467, 1))
Text = myrange.Value
Text1 = Replace(Text, "株式会社", "(株)", , , vbTextCompare)
Text1 = Replace(Text1, "・", "", , , vbTextCompare)
Text1 = Replace(Text1, " ", "", , , vbTextCompare)
myrange.Value = Text1
myrange.Replace what:="*ネット*", replacement:="一流株式会社", LookAt:=xlPart
myrange.Replace what:="*日本株式会社*", replacement:="二流会社", LookAt:=xlPart
myrange.Replace what:="*情報株式会社*", replacement:="譲歩株式会社", LookAt:=xlPart
myrange.Replace what:="*東日本会社*", replacement:="西日本", LookAt:=xlPart
Next myrange
End Sub
No.1ベストアンサー
- 回答日時:
同じようにサンプルデータを作って、事象と同じような操作をして…
秒待たずして処理完了しました。(パソコンの性能にもよるところですが)
すみません、遅くなる原因まではわかりませんでした。
そこまで重い処理とは思えないし…。
処理対象のセルを参照した計算式が他セルにあるとか…
定番の高速化手法だと、
Application.ScreenUpdating = False
最初に書いておいて、処理過程の表示を抑止することで高速化させるという方法ではいかがでしょう?
それと、
15行から1467行へ順に処理していくようですが…
初めから範囲に対して処理されるのはどうでしょう?
Sub Macro()
Application.ScreenUpdating = False
With Range(Cells(15, 1), Cells(1467, 1))
.Replace What:="株式会社", Replacement:="(株)"
.Replace What:="・", Replacement:=""
.Replace What:=" ", Replacement:=""
.Replace What:="*ネット*", Replacement:="一流株式会社"
.Replace What:="*日本(株)*", Replacement:="二流会社"
.Replace What:="*情報(株)", Replacement:="譲歩株式会社"
.Replace What:="*東日本会社*", Replacement:="西日本"
End With
Application.ScreenUpdating = True
End Sub
ありがとうございます。
ご指摘いただいた範囲指定する方法で解決しました。
教えていただきありがとうございました。
感謝いたします。
わからないのは、
僕が記載させていただいたマクロで
コントロール+Fでオプションを選択します。
検索対象をブックにして閉じるをおす。その後マクロを実行すると数分かかり(おそくなり)、
シートにしマクロを実行すると数秒で終わることがわかりました。うーん?
あときづいたことは、worksheet_change(byval target as range)が同ブックの別のシートに記載されています。
検索対象をブックにするとmyrange.Replace what:="*ネット*", replacement:="一流株式会社", LookAt:=xlPartのあとに
worksheet_changeイベントが発生し、シートにすると発生しません。
myrange.Replace what:のあとにかならず、worksheet_changeイベントが発生します。
謎が深まるばかりです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/20 14:46
- Visual Basic(VBA) Excel vba で1と10を正確に判断させる方法を教えてください。 TからU列に1と入力があれば 3 2022/12/26 16:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2023/01/20 14:36
- 株式市場・株価 名義書換しない株式 1 2022/07/14 22:07
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Excel(エクセル) Excelについて教えてください。 帳票データがあります。 アクセスに取り込むため、 データ形式にし 1 2022/06/08 19:59
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
どう増強すべきか
-
【C#/Java?】try-catchでcatch...
-
ドリブン??
-
vbaのエラー対応(実行時エラー...
-
特定の名前のオートシェイプの...
-
ExcelのVBAで、選択したファイ...
-
VCでビープ音を鳴らし続ける
-
条件文でelseはつけるべき?
-
VBAの進捗状況をリアルタイ...
-
メモリ不足になった後の処理
-
フォルダのアクセス権確認について
-
エクセル VBAで複数セル選択時...
-
UWSCのTHREADについて
-
private subモジュールを他のモ...
-
特定のファイルを他のプロセス...
-
シートを検索してマクロを実行...
-
ListViewから選択中の文字列を取得
-
¥マークを含むパスの処理につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
vbaのエラー対応(実行時エラー...
-
マクロで、次のコードへ行く前...
-
どう増強すべきか
-
特定の名前のオートシェイプの...
-
シグナル 6(SIGABRT)とは?
-
Excel VBA セルの名前があるか...
-
ExcelのVBAで、選択したファイ...
-
どうやってもFor文を抜けてしま...
-
シェルスクリプトでファイル内...
-
ドリブン??
-
特定のファイルを他のプロセス...
-
VB6にてネットワーク上にある共...
-
【VBA】エラー処理で別プロシー...
-
Functionで戻り値を複数返す方法
-
Word VBA。各マクロの間に待ち...
-
エクセル VBAで複数セル選択時...
-
VBA 複数の行を高速で削除する...
おすすめ情報