2017-01-22 12 views
0

ブックにWk1、Wk2 Wk3という名前のワークシートがあります。 WK1シートでVBAを使用してコピーされたExcel式の名前を変更する必要があります

すべての式を以下の名前にプレフィックスWK1を変更するために、私はコードを使用する他のシートのいずれかにWK1シートからの数式をコピーした後WK1例えば= Wk1MonWeight

が付けていますWk1MonWeightをコピーしてWk2シートにコピーした後、数式は= Wk2MonWeightになります。このコードは機能します。

Sub Step2ChangeWkNamesInFormulasOnNewWksheet() 

    Dim ws As Worksheet 
    Dim r As Range 

    For Each ws In Worksheets 
     If InStr(1, ws.Name, "Wk", 1) > 0 Then 
      For Each r In ws.Range("C116:I119") 
       r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
      Next r 

      For Each r In ws.Range("C184:J188") 
       r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
      Next r 

      For Each r In ws.Range("E341:AY341") 
       r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
      Next r 


     End If 
    Next ws 

    MsgBox "Done" 
    End Sub 

私は+平均にコピーされるシートの直前のシートの名前にWK1からプレフィックス変化するように、以下のコードの一部を変更したいです。 例えば式= Wk1MonWeightが、それは誰もがこれを助けることができる= Wk3AvgWeight

For Each r In ws.Range("E341:AY341") 
       r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
      Next r 

なりWK4シートにWK1シートからコピーされます。

はあなたの説明によると、これはそれを行う必要があります

+0

を明確にしてください:最初の式は常に '' Wk1'した後Mon'が含まれていますWk1を前のシートの名前に置き換え、「Mon」を「平均」に置き換えたいとします。それは正確ですか? –

+0

はい初期式には常にMonが含まれています。はい、前のシート名でWk1を置き換えます。新しい式が= Wk3AvgWeight – frustrationmultiplied

答えて

0

ありがとう:

編集

Sub Step2ChangeWkNamesInFormulasOnNewWksheet() 
    Application.ScreenUpdating = False 
    Application.EnableEvents = False 
    On Error GoTo ErrHandler 

    Dim ws As Worksheet, r As Range 
    For Each ws In Worksheets 
     If InStr(1, ws.Name, "Wk", 1) = 1 And InStr(1, ws.Name, "Wk1", 1) = 0 Then 
      For Each r In ws.Range("C116:I119, C184:J188") 
       r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
      Next r 
      For Each r In ws.Range("E341:AY341") 
       r.Formula = Replace(r.Formula, "Wk1Mon", Sheets(r.Parent.Index - 1).Name & "Avg") 
      Next r 
     End If 
    Next 

    Application.ScreenUpdating = True 
    Application.EnableEvents = True 
    MsgBox "Done" 
    Exit Sub 

ErrHandler: 
    MsgBox "Something Went wrong: " & vbCrLf & Err.Description 
    Application.ScreenUpdating = True 
    Application.EnableEvents = True 
End Sub 
+0

として読み取れるように、Monを削除してAvgに置き換える必要があります。残念ながら、それは動作しませんでした。私はWk2シートの中でそれを実行し、Wk1シートの式だけを変更しました。私は食品リストと呼ばれるWk1シートの前にシートがあり、= Wk1MonWeight式は= Food ListAvgWeight * 12に変更されました。 – frustrationmultiplied

+0

あなたは一度にすべてのシートにマクロを実行しているのを見ています。私は編集します。 –

+0

変更はシートWk1にも適用されますか?変更 –

関連する問題