|    | 
     こんにちは。かみちゃん です。 
 
>>このコードだと氏名一覧シートのA1〜A108に書かれているシート名が存在しない(たとえば空白セルとか)とエラーになります。 
> 
>シート名または氏名一覧シートの名前の前後どちらかにスペースが含まれていたりしないですか? 
>シート名にスペースが入っているとタブの大きさが違うので一目でわかりますが、セル内のデータは後ろにスペースが入っていると見ただけではわからないので要注意です。 
 
シート名存在チェック関数を思い出したので、紹介しておきます。 
シート名が存在した場合には、氏名一覧のシートの右側に○、存在しない場合は×を表示するようにしています。 
また、変数の宣言などもついでにしてあります。 
 
Option Explicit 
 
Sub 転記() 
 Dim i As Integer 
 Dim SheetName As String 
  
 For i = 2 To 1179 Step 11 
  SheetName = Worksheets("氏名一覧").Cells((i - 2) / 11 + 1, 1) 
  If chkSHEET(SheetName) Then 
   Worksheets("氏名一覧").Cells((i - 2) / 11 + 1, 2) = "○" 
   With Worksheets(SheetName) 
    .Range("C3") = "=集計!b" & i 
    .Range("D10") = "=集計!e" & i + 1 
    .Range("E10") = "=集計!g" & i + 1 
    .Range("G10") = "=集計!k" & i + 1 
    .Range("H10") = "=集計!p" & i + 1 
   End With 
  Else 
   Worksheets("氏名一覧").Cells((i - 2) / 11 + 1, 2) = "×" 
  End If 
 Next i 
End Sub 
 
'シート名存在チェック 
'http://www.ken3.org/backno/backno_vba19.html#92 
' シート名を受け取り、 
' 判断結果をTrue , Falseで返す関数 
' 
'関数名:  chkSHEET 
'入力値:  シート名文字列 
'戻り値 :シートの有無・結果 
'処理概要: シート名をパラメーターで受け取り、 
'     アクティブなブック内に存在するかを確認し、 
'     結果のTrue , Falseを戻り値で返す 
Function chkSHEET(strSNAME As String) As Boolean 
 
   Dim MyObject As Object 
 
   'ブック内のシート名の比較を行う 
   For Each MyObject In ThisWorkbook.Sheets 
     '.Nameプロパティのシート名と受け取ったstrSNAMEを比べる 
     If MyObject.Name = strSNAME Then 
      chkSHEET = True '名前が一致したのでTrueをセット 
      Exit Function  'もうすること無いので関数を抜ける 
     End If 
   Next 
 
   '一つも一致しなかったので、Falseをセット 
   chkSHEET = False 
 
End Function 
 
しかし、そもそも、「氏名一覧」と「集計」シート以外の全シートを処理するという方法ではいけないのでしょうか? 
 | 
     
    
   |