Maybe:

Sub KamranMustafa()
Dim rcell As Range
Dim i As Long
Application.ScreenUpdating = False
Range("R30").Value = " "
Range("S30").Value = " "
For i = 16 To 30
    For Each rcell In Range(Cells(2, i), Cells(23, i))
        If rcell.Value = "No" And rcell.Offset(-1).Value <> "" Then
            Range("R" & Rows.Count).End(3)(2).Value = rcell.Offset(-1).Value
            Range("S" & Rows.Count).End(3)(2).Value = rcell.Offset(1).Value
        End If
        If rcell.Value = "No" And rcell.Offset(-1).Value = "" Then
            Range("R" & Rows.Count).End(3)(2).Value = rcell.Offset(, -1).Value
            Range("S" & Rows.Count).End(3)(2).Value = rcell.Offset(, 1).Value
        End If
    Next rcell
Next i
Application.ScreenUpdating = True
End Sub