|    | 
     ▼VBA初心者 さん: 
 
コード案提示に加えて上でいくつか質問しています。 
その中で "シートを選択" するのはなぜ? というのがあったかと思います。 
要は該当のシートを、確認の上印刷すればいいんですね? 
シートを、ことさら選択する必要はありませんね。 
 
提示済みのものを、ほぼそのまま使っています。 
ユーザーフォームモジュールに。 
 
Private Sub CommandButton1_Click() 
  Dim sh As Worksheet 
  Dim shN As Variant 
  Dim shV() As String 
  Dim k As Long 
  Dim f As Double, t As Double, n As Double 
  Dim s1 As String, s2 As String 
  Dim ok As Boolean 
  
  s1 = TextBox1.Value 
  s2 = TextBox2.Value 
   
  If Len(s1) = 0 Or Len(s2) = 0 Then 
    MsgBox "シート 開始/終了を入力してから実行してください" 
    Exit Sub 
  End If 
   
  f = getValue(s1) 
  If f Then 
    t = getValue(s2) 
    If t Then ok = True 
  End If 
    
  If Not ok Then 
    MsgBox "シート範囲を正しく指定してください" 
    Exit Sub 
  End If 
  
  ReDim shV(1 To Worksheets.Count) 
  
  For Each sh In Worksheets 
    n = getValue(sh.Name) 
    If n >= f And n <= t Then 
      k = k + 1 
      shV(k) = sh.Name 
    End If 
  Next 
  
  If k = 0 Then 
    MsgBox "該当のシートがありません" 
    Exit Sub 
  End If 
  
  ReDim Preserve shV(1 To k) 
  
  If MsgBox("以下のシートが選ばれました。印刷してよろしいですか?" & vbLf & _ 
    Join(shV, vbLf), vbYesNo) = vbNo Then Exit Sub 
   
  For Each shN In shV 
    Sheets(shN).PrintOut 
  Next 
    
End Sub 
 
Private Function getValue(ByVal s As Variant) As Double 
  Dim wk As Variant 
  
  s = LCase(StrConv(s, vbNarrow)) 
  wk = Split(s, "k") 
  If UBound(wk) = 1 Then 
    getValue = Val(wk(0)) + Val(wk(1)) / 1000 
  End If 
 
End Function 
 | 
     
    
   |