2016-08-02 12 views
1

これは完全に間違っていることは知っていますが、現時点ではどうしたらよいか分かりません。VBA(Microsoft Excel)は文字列で配列を置き換えます

Microsoft Excelでは、 "OldValues"文字列のすべての値を固定文字列 "NewValue"で置き換えたいとします。そんなことがあるものか?

LBoundとUboundを使用するのは間違っています。

Sub Replace() 
Dim sht As Worksheet 
Dim OldValues As Variant 
Dim NewValue As String 
Dim x As Long 

OldValue = Array("old1","old2","old3") 
NewValue = "allnew!" 

    For x = LBound(OldValue) To UBound(NewValue) 

     For Each sht In ActiveWorkbook.Worksheets 
     sht.Cells.Replace What:=OldValue(x), Replacement:=NewValue(x), _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ 
      SearchFormat:=False, ReplaceFormat:=False 
     Next sht 

    Next x 

End Sub 

答えて

4

あなたのコードは、わずかな変更で作業する必要があります。 NewValueが配列ではないので、UBound(NewValue)はあなたにエラーが発生します。ループの代わりにUBound(OldValues)に移動し、ReplaceNewValueの後に(x)を削除する必要があります。

Sub Replace() 
Dim sht As Worksheet 
Dim OldValues As Variant 
Dim NewValue As String 
Dim x As Long 

OldValues = Array("old1","old2","old3") 
NewValue = "allnew!" 

    For x = LBound(OldValues) To UBound(OldValues) 

     For Each sht In ActiveWorkbook.Worksheets 
     sht.Cells.Replace What:=OldValues(x), Replacement:=NewValue, _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ 
      SearchFormat:=False, ReplaceFormat:=False 
     Next sht 

    Next x 

End Sub 
+0

ニース。関数LBoundとUboundを正しく認識していない(私が理解しているように、配列上でループを検索するために存在するのだろうか?)、どうやって動作させるのか分からなかった。 –

+1

配列と一緒に使用すると、上下のインデックス境界を参照するので、Array( "old1"、 "old2"、 "old3")の配列では ' - LBound'は0になり、' UBound'は2 – Jordan

+0

@MiguelRasquinho代わりに、バリアント型の変数とFor Each Loopを使用して配列を反復処理することができます。 'Dim x as Variant:OldValuesの各xに対して' –

関連する問題