Ya, you never mentioned merged cells in the original question.
This is not the first time it has been mentioned that merged cells suck, and should not be used if you want to manipulate data.
I know it makes the layout more convenient, but working with them is a pain.
That being said
Input the data into the schedule sheet first, then count the cells in the range to determine the number of cells to merge.
Code
Private Sub CommandButton1_Click()
'Copy values and update the schedule
Dim actWsh As String
Dim sh As Worksheet, ws As Worksheet
Dim LstRw As Long, Frng As Range, c As Range
Dim lItem As Integer
Dim Index As String
Dim y As Long
Set ws = Sheets("Schedule")
actWsh = ComboBox2.Text
Set sh = Sheets("Topics")
LstRw = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row + 1
x = 1
With sh
Set Frng = .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
For Each c In Frng.Cells
If x < 16 Then
If .Cells(c.Row, "E") = Me.ComboBox3 And .Cells(c.Row, "C") = Me.ComboBox2 Then
If c.EntireRow.Hidden = False Then
.Range("A" & c.Row & ":B" & c.Row).Copy ws.Cells(LstRw + x, 2)
c.EntireRow.Hidden = True
x = x + 1
End If
End If
End If
Next c
End With
y = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
If y <= LstRw Then
Unload Me
Exit Sub
End If
'Range(Cells(LstRw + 1, 2), Cells(LstRw + 15, 2))
With ws
With .Range(.Cells(LstRw + 1, 1), .Cells(y, 1))
.Merge
.BorderAround , xlThin
End With
.Cells(LstRw + 1, 1) = CDate(Me.TextBox1.Value)
.Cells(LstRw + 1, 1).VerticalAlignment = xlCenter
.Cells(LstRw + 1, 1).HorizontalAlignment = xlCenter
End With
' With ws
' LstRw = .Cells(.Rows.Count, "C").End(xlUp).Row + 1
' With .Range(.Cells(LstRw + 1, 4), .Cells(LstRw + 15, 4))
' .Merge
' .BorderAround , xlThin
' End With
' .Cells(LstRw + 1, 4) = ComboBox2.Value
' .Cells(LstRw + 1, 4).VerticalAlignment = xlCenter
' .Cells(LstRw + 1, 4).HorizontalAlignment = xlCenter
' End With
' With ws
' LstRw = .Cells(.Rows.Count, "C").End(xlUp).Row + 1
' With .Range(.Cells(LstRw + 1, 5), .Cells(LstRw + 15, 5))
' .Merge
' .BorderAround , xlThin
' End With
' .Cells(LstRw + 1, 5) = ComboBox3.Value
' .Cells(LstRw + 1, 5).VerticalAlignment = xlCenter
' .Cells(LstRw + 1, 5).HorizontalAlignment = xlCenter
' End With
' With ws
' LstRw = .Cells(.Rows.Count, "C").End(xlUp).Row + 1
' With .Range(.Cells(LstRw + 1, 6), .Cells(LstRw + 15, 6))
' .Merge
' .BorderAround , xlThin
' End With
' .Cells(LstRw + 1, 6) = ComboBox4.Value
' .Cells(LstRw + 1, 6).VerticalAlignment = xlCenter
' .Cells(LstRw + 1, 6).HorizontalAlignment = xlCenter
' End With
' With ws
' LstRw = .Cells(.Rows.Count, "C").End(xlUp).Row + 1
' With .Range(.Cells(LstRw + 1, 8), .Cells(LstRw + 15, 8))
' .Merge
' .BorderAround , xlThin
' End With
' .Cells(LstRw + 1, 8) = ComboBox5.Value
' .Cells(LstRw + 1, 8).VerticalAlignment = xlCenter
' .Cells(LstRw + 1, 8).HorizontalAlignment = xlCenter
' End With
'
' For lItem = 0 To UserForm3.ListBox1.ListCount - 1
' If UserForm3.ListBox1.Selected(lItem) Then
' If Index <> vbNullString Then Index = Index & " / "
' Index = Index & UserForm3.ListBox1.List(lItem)
' End If
' With ws
' LstRw = .Cells(.Rows.Count, "C").End(xlUp).Row + 1
' With .Range(.Cells(LstRw + 1, 7), .Cells(LstRw + 15, 7))
' .Merge
' .BorderAround , xlThin
' .WrapText = True
' End With
' .Cells(LstRw + 1, 7) = Index
' .Cells(LstRw + 1, 7).VerticalAlignment = xlCenter
' .Cells(LstRw + 1, 7).HorizontalAlignment = xlCenter
' End With
' Next
'
Unload Me
End Sub
Display More