VBAについて質問です
VBAについて質問です 指定したセル列の文字を置き換えるコードを記載していますが、読み込みが重くて反映に1分ほどかかってしまいます。コードが原因かは分かりませんが、簡略した場合、少しは軽くなるのでしょうか? Private Sub CommandButton1_Click() Dim I, lRow As Long lRow = Cells(Rows.Count, "J").End(xlUp).Row 'J列の最終行を取得 lRow = Cells(Rows.Count, "K").End(xlUp).Row 'K列の最終行を取得 For I = 6 To lRow 'F列の最終行まで繰り返します。 Cells(I, "J") = WorksheetFunction.Substitute(Cells(I, "J"), "とうきょう", "東京") 'J列の文字列を置換します。 Cells(I, "K") = WorksheetFunction.Substitute(Cells(I, "K"), "りんご", "リンゴ") 'K列の文字列を置換します。 Cells(I, "K") = WorksheetFunction.Substitute(Cells(I, "K"), "ぶどう", "ブドウ") 'K列の文字列を置換します。 Cells(I, "K") = WorksheetFunction.Substitute(Cells(I, "K"), "いちご", "イチゴ") 'K列の文字列を置換します。 Cells(I, "K") = WorksheetFunction.Substitute(Cells(I, "K"), "ばなな", "バナナ") 'K列の文字列を置換します。 Next I End Sub
Visual Basic・60閲覧
ベストアンサー
セルの書き込みの回数が多いと遅くなるので、配列に取り込んで処理し、最後に1回だけ書き込めばかなり速いと思います。 Sub test() Dim I, lRow As Long Dim tbl As Variant Dim bef As Variant Dim aft As Variant Dim j As Integer bef = Array("りんご", "ぶどう", "いちご", "ばなな") aft = Array("リンゴ", "ブドウ", "イチゴ", "バナナ") Application.ScreenUpdating = False lRow = Cells(Rows.Count, "J").End(xlUp).row tbl = Range("J6:K" & lRow) For I = 1 To UBound(tbl) If tbl(I, 1) = "とうきょう" Then tbl(I, 1) = "東京" End If For j = 0 To 3 If tbl(I, 2) = bef(j) Then tbl(I, 2) = aft(j) Exit For End If Next j Next I Range("J6:K" & lRow) = tbl Application.ScreenUpdating = True End Sub
1人がナイス!しています
質問者からのお礼コメント
実行してみたところうまく起動しました。ありがとうございます。 bef = Array("りんご", "ぶどう", "いちご", "ばなな") aft = Array("リンゴ", "ブドウ", "イチゴ", "バナナ") でまとめる事が出来るのは勉強になりました
お礼日時:1/21 12:41