2016-03-24 11 views
0

私はまだ長い道のりがあり、コピーして貼り付けても長い時間がかかりますので、私のスクリプトを凝縮したいと思っています。私はちょうどFind/Replace機能を凝縮させようとしていますExcelの検索/置換のExcelスクリプト

Function ZoneChanges() 

Dim MyCell As range 

Worksheets("Sheet1").Activate 
Set MyCell = Application.InputBox(Prompt:="Select a cell", Type:=8) 

MyCell.Replace What:="EE", Replacement:="DA", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
MyCell.Replace What:="EF", Replacement:="DB", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 

MyCell.Replace What:="EG", Replacement:="DC", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 

MyCell.Replace What:="EH", Replacement:="DD", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 

End Function 

ありがとう!

+0

があるとしてそれはおそらく、最初のコードレビューをしようとする前にJapanDaveによって提案された変更を実装するのがベストでしょう –

+1

[codereview.stackexchange.com](http://codereview.stackexchange.com)に移行する必要がありますコピー・ペースト・コードについては、「代わりにデータ・セットをループする」以外には、 – Phrancis

答えて

3

複数の検索と置換が必要な場合は、すべての値を配列に入れてループを実行できます。問題は、これがあなたが現在持っているものよりも遅くなるということです。しかし、純粋にコードを短縮するには、これを行うことができます。

Function ZoneChanges() 

Dim MyCell As Range 
Dim arrWhat, arrRep, i As Long 

Worksheets("Sheet1").Activate 
Set MyCell = Application.InputBox(prompt:="Select a cell", Type:=8) 
arrWhat = Array("EE", "EF", "EG", "EH"): arrRep = Array("DA", "DB", "DC", "DD") 
    For i = LBound(arrWhat) To UBound(arrWhat) 
     MyCell.Replace What:=arrWhat(i), Replacement:=arrRep(i), LookAt:=xlPart, _ 
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
      ReplaceFormat:=False 
    Next 

End Function 
関連する問題