| 
    
     |  | こんにちは。かみちゃん です。 
 >>このコードだと氏名一覧シートの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
 
 しかし、そもそも、「氏名一覧」と「集計」シート以外の全シートを処理するという方法ではいけないのでしょうか?
 
 
 |  |