こんばんは。
以下のマクロにいて 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ランキング
-
【C#/Java?】try-catchでcatch...
-
どうやってもFor文を抜けてしま...
-
vbaのエラー対応(実行時エラー...
-
特定の名前のオートシェイプの...
-
条件文でelseはつけるべき?
-
“try/catch”と“if/else”
-
エクセルVBAでロックをかけたい
-
シグナル 6(SIGABRT)とは?
-
エクセル VBAで複数セル選択時...
-
CImage::Loadの戻り値は何でし...
-
iPhoneのニューラルエンジンっ...
-
VBA Vlookup #N/A表示させない方法
-
【Vb.net】プリンタジョブの取得
-
VBA 複数の行を高速で削除する...
-
StatusStripの表示が更新されな...
-
IF文に時間(何時から何時ま...
-
VBAの進捗状況をリアルタイ...
-
private subモジュールを他のモ...
-
特定のファイルを他のプロセス...
-
複数個のTextBoxでいずれかの内...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
特定の名前のオートシェイプの...
-
シグナル 6(SIGABRT)とは?
-
特定のファイルを他のプロセス...
-
ExcelのVBAで、選択したファイ...
-
Excel VBA セルの名前があるか...
-
どう増強すべきか
-
Word VBA。各マクロの間に待ち...
-
【VBA】エラー処理で別プロシー...
-
UWSCのTHREADについて
-
シェルスクリプトでファイル内...
-
ドリブン??
-
Functionで戻り値を複数返す方法
-
iPhoneのニューラルエンジンっ...
-
エクセル VBAで複数セル選択時...
-
COBOL OCCURSで指定したデータ...
-
どうやってもFor文を抜けてしま...
おすすめ情報