| 
    
     |  | 一度返信しましたが、ちょっと全体見て書き直してみます あくまで私自身が見て、無駄だと思われる部分を修正してみますので必要に応じてご自分でカスタマイズしてください
 ※かなり長文になってしまいました すいません
 
 とりあえず前回返信した【55978】の内容でやってみて成功したら、以下を読んでみてください。【55978】でエラーが出てたら意味が無いので・・・
 
 ↓このプロシージャからです
 Private Sub CommandButton1_Click()
 宣言等は割愛します
 
 'With UserForm1.ListBox1
 ↑この下のコードでWith の意味がほとんど無いのでこの文を削除
 
 'MyCount = Me.ListBox1.ListCount - 1
 ↑これも意味が無いと思うので削除
 For文を書き換えます
 
 For n = 0 To Me.ListBox1.ListCount - 1  ' ←ここ変えてます
 If (Me.ListBox1.Selected(n) = True) Then
 
 'With ListBox1
 'If (.ListIndex = -1) Then
 ↑この2行もいらないはずです(それに付随する Else もいらない)
 
 Set ws1 = Worksheets("history")
 i = ws1.Range("B65536").End(xlUp).Row + 1
 If i < 5 Then
 i = 5
 End If
 ↑この5行はループ内で毎回行われる必要が無いので、ループの外に出してみましょう
 
 次の
 With ActiveCell
 から
 ws1.Cells(i, 11).Value = Me.TextBox3.Value
 までは多分OK(元データが分からないので・・・)
 
 '社員番号 (社員番号が左)
 'ws1.Cells(i, 12).Value = Me.ListBox1.TextColumn = 2
 '名前 (名前が右)
 'ws1.Cells(i, 13).Value = Me.ListBox1.TextColumn = 1
 ↑これを
 ws1.Cells(i, 12) = Me.ListBox1.List(n,1)
 ws1.Cells(i, 13) = Me.ListBox1.List(n,0)
 に直す
 
 
 *** まとめると
 Private Sub CommandButton1_Click()
 Dim From_Str As String
 Dim To_Str As String
 Dim Hours As Double
 
 If Not Application.Intersect(Range("C3:C104"), ActiveCell) Is Nothing Then
 '↑これもなんだか直した方がいい気がするけど・・・ 一応このままで
 Else
 MsgBox "Programのいずれかを選択してください。"
 'ここは Exit Sub は入れなくていいのかな?
 End If
 
 Set ws1 = Worksheets("history")
 i = ws1.Range("B" & Rows.Count).End(xlUp).Row + 1
 If i < 5 Then
 i = 5
 End If
 
 For n = 0 To Me.ListBox1.ListCount - 1
 If (Me.ListBox1.Selected(n) = True) Then
 With ActiveCell
 から
 ws1.Cells(i, 11).Value = Me.TextBox3.Value
 まではそのままで
 
 ws1.Cells(i, 12) = Me.ListBox1.List(n,1)
 ws1.Cells(i, 13) = Me.ListBox1.List(n,0)
 
 i = i + 1
 
 'ここにひとつ End If が入るのかな?
 End If
 End With
 End If
 Next n
 
 Unload UserForm1
 
 End Sub
 
 |  |