2012-03-19 2 views
2

私はExcelのVBA初心者で、少しのコードについて助けが必要です。 4つの同一のワークシートを含むワークブックがあり、1年に1つのワークシートがあります。私がしたいのは、コマンドボタンのクリックでコードを実行することです。これは、名前情報を一般的な番号の付いた情報(例:Joe SmithがMale1になります)に置き換えます。ワークシートの列全体にまたはスプレッドシート内の複数の行で表される複数の参加者タイプがあります。したがって、男性のデータは、4つのタブにまたがるセルC11、C28、C45..C215、J11、J28、J45、X11、X28、X45 ... AE215にあります。複数のワークシートにわたる連続していないセルの内容を置き換えます - エラー1004

4つの四半期のタブを識別するワークシート配列があり、名前がリストされるセル範囲を定義する各参加者タイプのコードがあります。

以下のコードは... エラー「_Worksheet」オブジェクトの1004メソッド「range」にFor Each MaleCareラインでを失敗した私に私が間違っているの何にどれ洞察を与えていますか?

Sub DelConfSAVE() 
    Dim sh As Worksheet 

    For Each sh In Worksheets(Array("Oct-Dec Attendance", "Jan-Mar Attendance", _ 
    "Apr-Jun Attendance", "Jul-Sep Attendance")) 

     'Replace Male Caregiver (X) 
     Dim MaleCare As Range 
     Dim X As Integer 

     X = 0 

     For Each MaleCare In sh.Range("C11, C28, C45, C62, C79, C96, C113, C130, C147, C164, C181, C198, C215, J11, J28, J45, J62, J79, J96, J113, J130,J147, J164, J181, J198, J215, Q11, Q28, Q45, Q62, Q79, Q96, Q113, Q130, Q147, Q164, Q181, Q198, Q215, X11, X28, X45, X62, X79, X96, X113, X130, X147, X164, X181, X198, X215, AE11, AE28, AE45, AE62, AE79, AE96, AE113, AE130, AE147, AE164, AE181, AE198, AE215") 
      If MaleCare.Value <> "" Then 
       X = X + 1 
       MaleCare.Value = "MaleCare" & X 
      End If 
     Next MaleCare 

     Exit For 

     'Replace Female Caregiver (Y) 
     Dim FemCare As Range 
     Dim Y As Integer 

     Y = 0 

     For Each FemCare In sh.Range("D11, D28, D45, D62, D79, D96, D113, D130, D147, D164, D181, D198, D215, K11, K28, K45, K62, K79, K96, K113, K130, K147, K164, K181, K198, K215, R11, R28, R45, R62, R79, R96, R113, R130, R147, R164, R181, R198, R215, Y11, Y28, Y45, Y62, Y79, Y96, Y113, Y130, Y147, Y164, Y181, Y198, Y215,AF11, AF28, AF45, AF62, AF79, AF96, AF113, AF130, AF147, AF164, AF181, AF198, AF215") 
      If FemCare.Value <> "" Then 
       Y = Y + 1 
       FemCare.Value = "FemCare" & Y 
      End If 
     Next FemCare 

     Exit For 

     'And additional code for Youth1 Youth2 Youth3 OtherAdult cut for posting brevity 

    Next sh 
End Sub 

答えて

1

ステファニー、これはあなたが試みていることですか?

Sub DelConfSAVE() 
    Dim sh As Worksheet 
    Dim X As Long, Y As Long, i As Long 

    For Each sh In Worksheets(Array("Oct-Dec Attendance", "Jan-Mar Attendance", _ 
    "Apr-Jun Attendance", "Jul-Sep Attendance")) 

     X = 0 

     For i = 11 To 215 Step 17 
      With sh 
       '~~> Male 
       If Not Len(Trim(.Range("C" & i).Value)) = 0 _ 
       Then .Range("C" & i).Value = "MaleCare" & X 

       If Not Len(Trim(.Range("J" & i).Value)) = 0 _ 
       Then .Range("J" & i).Value = "MaleCare" & X 

       If Not Len(Trim(.Range("Q" & i).Value)) = 0 _ 
       Then .Range("Q" & i).Value = "MaleCare" & X 

       If Not Len(Trim(.Range("X" & i).Value)) = 0 _ 
       Then .Range("X" & i).Value = "MaleCare" & X 

       If Not Len(Trim(.Range("AE" & i).Value)) = 0 _ 
       Then .Range("AE" & i).Value = "MaleCare" & X 

       '~~> Female 
       If Not Len(Trim(.Range("D" & i).Value)) = 0 _ 
       Then .Range("D" & i).Value = "FemCare" & Y 

       If Not Len(Trim(.Range("K" & i).Value)) = 0 _ 
       Then .Range("K" & i).Value = "FemCare" & Y 

       If Not Len(Trim(.Range("R" & i).Value)) = 0 _ 
       Then .Range("R" & i).Value = "FemCare" & Y 

       If Not Len(Trim(.Range("Y" & i).Value)) = 0 _ 
       Then .Range("Y" & i).Value = "FemCare" & Y 

       If Not Len(Trim(.Range("AF" & i).Value)) = 0 _ 
       Then .Range("AF" & i).Value = "FemCare" & Y 

       X = X + 1: Y = Y + 1 
      End With 
     Next i 

     'And additional code for Youth1 Youth2 Youth3 OtherAdult cut for posting brevity 
    Next sh 
End Sub 
+0

シッダース - これは完全に機能するようです。残りのタイプの人々のためのコードを追加し、テストを行う必要があります。これをありがとうございました。 – Stephanie

+0

Woops - すぐに入力してください。コードの「ステップ17」の部分が何を意味するのかを私に明確にすることはできますか? – Stephanie

+0

シーケンスがある場合、つまり特定の列のすべてのセルが17個のセルの後にある場合、たとえばC28がC11の後に17個のセルになるなどのように認識された場合も同様です。私は単にそれらをループに入れます:) –

関連する問題