Yes your addition is good. I have modified the code to put the lines created by U-column before the BP line.
please copy and replace :
Sub not_so_complicated()
Dim val As Range, row As Range, q As String
Dim wsInput As Worksheet, lr As Long
Set wsInput = Sheets("Input Data")
With wsInput
For Each row In .Range("Q4:Q" & .Range("P10000").End(xlUp).row)
For Each val In Range(row, row.Offset(, 4))
If Trim(val) <> "" Then
lr = .Cells(.Rows.Count, "A").End(xlUp).row + 1
If val.Column = 17 Then ''Column "Q"
If val.Offset(, -2) = "M Rafiq" Then q = .Range("Q2") Else q = .Range("Q3")
Else
q = .Cells(2, val.Column)
End If
If val.Column = 21 Then
.Range("A" & lr - 1 & ":K" & lr - 1).Insert shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
lr = lr - 1
End If
.Range("A" & lr) = Right(q, 2)
.Range("C" & lr) = Left(q, 4)
.Range("D" & lr) = CDate(Right(.Range("P" & val.row), 8))
.Range("E" & lr) = .Range("O" & val.row)
.Range("F" & lr) = .Range("O" & val.row) & " " & .Cells(1, val.Column) & " " & CDate(Right(.Range("P" & val.row), 8))
.Range("G" & lr) = val
.Range("H" & lr) = "T9"
.Range("I" & lr) = Format(0, "0.00")
.Range("J" & lr) = Left(.Range("P" & val.row), 3)
.Range("K" & lr) = "raf"
If val.Column = 20 And .Cells(val.row, "W") <> "" Then ''Column "T"
lr = .Cells(.Rows.Count, "A").End(xlUp).row + 1
q = .Range("V2")
.Range("A" & lr) = Right(q, 2)
.Range("B" & lr) = .Range("V" & val.row)
.Range("C" & lr) = Left(q, 4)
.Range("D" & lr) = CDate(.Range("W" & val.row))
.Range("E" & lr) = .Range("O" & val.row)
.Range("F" & lr) = .Range("O" & val.row) & " Wage Payment " & CDate(Right(.Range("P" & val.row), 8))
.Range("G" & lr) = val
.Range("H" & lr) = "T9"
.Range("I" & lr) = Format(0, "0.00")
.Range("J" & lr) = Left(.Range("P" & val.row), 3)
.Range("K" & lr) = "raf"
ElseIf val.Column = 21 Then
lr = lr + 1
.Range("A" & lr & ":K" & lr).Insert shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
q = .Range("S2")
.Range("A" & lr) = Right(q, 2)
.Range("C" & lr) = Left(q, 4)
.Range("D" & lr) = CDate(Right(.Range("P" & val.row), 8))
.Range("E" & lr) = .Range("O" & val.row)
.Range("F" & lr) = .Range("O" & val.row) & " " & .Cells(1, val.Column) & " " & CDate(Right(.Range("P" & val.row), 8))
.Range("G" & lr) = val
.Range("H" & lr) = "T9"
.Range("I" & lr) = Format(0, "0.00")
.Range("J" & lr) = Left(.Range("P" & val.row), 3)
.Range("K" & lr) = "raf"
End If
End If
Next val
Next row
End With
End Sub
Bookmarks