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