Option Explicit
Sub test()
Dim ac As Range, r As Range, n As Integer, j As Integer, i As Integer, k As Integer
Dim s As String, u As Integer, m As Integer, g As Integer, shrp As String
j = [A1].CurrentRegion.Rows.Count
For i = j To 2 Step -1
Set r = Range(Cells(i, 1), Cells(i, 10))
n = WorksheetFunction.CountIf(r.Resize(, 7).Offset(, 3), "S")
For k = 1 To (n - 1)
r.Offset(k).Insert Shift:=xlShiftDown
r.Copy r.Offset(k)
shrp = sharp(flat(r.Offset(k, 3).Resize(, 7)), n)
For g = 1 To 7
r.Offset(k, 3).Cells(g) = Mid(Split(shrp, ",")(k), g, 1)
Next
Next
If n > 1 Then
r.Offset(, 3).Resize(, 7) = "N"
r.Offset(, 3).Cells(InStr(shrp, "S")) = "S"
End If
Next
End Sub
Private Function flat(r As Range) As String
Dim v As Variant, s As String
For Each v In r
s = s & v
Next
flat = s
End Function
Private Function sharp(s As String, n As Integer)
Dim i As Integer, t As String, m As Integer, z As String
t = "": m = 0
For i = 1 To n
m = InStr(1 + m, s, "S")
z = String(Len(s), "N")
Mid(z, m, 1) = "S"
t = t & z & ","
Next
sharp = Replace(t & "@", ",@", "")
End Function |