| 
    
     |  | こんにちは。かみちゃん です。 
 >セルにsheet名が入力されると、そのsheetが印刷されるマクロを作りたい
 
 次のような感じになるかと思います。
 あらかじめ、A1〜A3など、印刷したいシートが入力されているセルを選択した状態でMacro1を実行してください。
 
 Option Explicit
 
 Sub Macro1()
 Dim c As Range
 Dim StartSheetName As String
 
 StartSheetName = ActiveSheet.Name
 '選択している範囲を印刷対象シートが入力しされているセルとする。
 For Each c In Selection
 'シートが存在するかどうかをチェックする。
 If chkSHEET(c.Value) Then
 Sheets(c.Value).Select
 'シートが存在したら印刷する
 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
 Else
 MsgBox c.Address & "に入力してある" & c.Value & "というシートは存在しません。"
 End If
 Next
 Sheets(StartSheetName).Select
 Range("A1").Select
 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
 
 なお、シート名が入力されているセルがA1〜A3など、あらかじめ決まっている場合は、
 For Each c In Selection
 という部分を
 For Each c In Range("A1:A3")
 と変更していただければ、いいです。
 
 |  |