• ベストアンサー

エクセル マクロ Replace について

初心者です。 下記モジュールで”あいうえお”を消しているのですが 凄く動きが遅いです。 もう少し高速に処理できる方法があれば教えてください。 (C2:C200)のセルには必ず各文の末尾に”あいうえお”が入力されている状態です。 Sub 文削除() '余計な分削除する Dim rg As Range For Each rg In Range("C2:C200") rg.Value = Replace(rg.Value, "あいうえお", "") Next End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>必ず各文の末尾に”あいうえお”が入力されている状態です。 For Each がベストな参照方法かと思います。(他の方法よりも高速) 末尾というなら、Replaceから別の方法に変更した場合はいかがでしょうか? For Each rg In Range("C2:C200") ' n は、"あいうえお" に相当する文字数  rg.Value = Left(rg.Value ,Len(rg.Value ) - n ) Next

luv-snow
質問者

お礼

なるほどこんな方法があるんですね ありがとうございました。使わせていただきます。

luv-snow
質問者

補足

「因数が不足です」というエラーが出てしまうのですが、どうしてでしょうか・・・? 実際、”あいうえお”に相当する文字数は30字です。

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

No.2です。 こちらで試した所、1セルに500文字あったとしてもReplace漏れはありませんでした。 漏れたセルに何か共通点はありませんか? あるいは「あいうえお」に相当する文字列が一見同じに見えて全角半角が異なっているとか……。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

ループを回す必要はないのでは? こんな感じで↓一発で Sub Sample()  Range("C2:C200").Select  Selection.Replace What:="あいうえお", Replacement:="" End Sub

luv-snow
質問者

お礼

ありがとうございます。試してみたところ、なぜか200行全てに対して削除できず、一部はあいうえおが残った状態になってしまいます。 C列には1つのセルに500文字ほどの文章が入力されています。

関連するQ&A