アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんは。
以下のマクロにいて 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

A 回答 (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
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご指摘いただいた範囲指定する方法で解決しました。
教えていただきありがとうございました。
感謝いたします。

わからないのは、
僕が記載させていただいたマクロで
コントロール+Fでオプションを選択します。
検索対象をブックにして閉じるをおす。その後マクロを実行すると数分かかり(おそくなり)、
シートにしマクロを実行すると数秒で終わることがわかりました。うーん?

あときづいたことは、worksheet_change(byval target as range)が同ブックの別のシートに記載されています。
検索対象をブックにするとmyrange.Replace what:="*ネット*", replacement:="一流株式会社", LookAt:=xlPartのあとに
worksheet_changeイベントが発生し、シートにすると発生しません。
myrange.Replace what:のあとにかならず、worksheet_changeイベントが発生します。

謎が深まるばかりです。

お礼日時:2018/08/24 18:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!