Sub SPB()
Dim ar1, ar2, arr(), txid()
Dim hdr(0 To 1)
Dim rng As Range, destination As Range
Dim i As Long, j As Long
Dim ws1 As Worksheet
wksh = Array("Purchase", "Sales", "Bank Transactions", "Result")
hdr(1) = Array("S.no", "Bill No.", "Date", "Party name", "Amount", "Paid/Dr", "Balance")
hdr(0) = Array("S.no", "Bill No.", "Date", "Party name", "Amount", "Received/Dr", "Balance")
'Optimize Macro Speed
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Set ws1 = Worksheets(wksh(2))
ws1.Activate
ar1 = [A1].CurrentRegion
lr = Cells(Rows.Count, 1).End(xlUp).Row
txid = Range("E2:E" & lr)
For ws = 0 To 1
ReDim arr(1 To 1000, 1 To 7)
Set ws1 = Worksheets(wksh(ws))
ws1.Activate
'
ar2 = Range("A1").CurrentRegion
n = 0
For r = 2 To UBound(ar2, 1)
n = n + 1
For c = 2 To 5
arr(n, c) = ar2(r, c)
Next c
arr(n, 7) = ar2(r, 5)
Next r
If ws = 0 Then typex = "P" Else typex = "S"
For r = 2 To UBound(ar1, 1)
If UCase(Left(ar1(r, 5), 1)) = typex Then
n = n + 1
arr(n, 2) = ar1(r, 5)
arr(n, 3) = ar1(r, 1)
arr(n, 4) = ar1(r, 3)
arr(n, 6) = ar1(r, 7 + ws)
arr(n, 7) = 0
End If
Next r
Set ws1 = Worksheets("Sheet1")
With ws1
.Cells(1, ws * 9 + 1).Resize(1, 7) = hdr(ws)
.Cells(2, ws * 9 + 1).Resize(n, 7).Value = arr
If ws = 0 Then
.Columns("A:G").Sort key1:=.Range("B2"), order1:=xlAscending, Header:=xlYes
With .Range("G2:G" & n + 1)
.Formula = "=SUMIFS($E$2:$E2,$D$2:$D2,$D2)-SUMIFS($F$2:$F2,$D$2:$D2,$D2)"
.Value = .Value
End With
Else
.Columns("J:P").Sort key1:=.Range("K2"), order1:=xlAscending, Header:=xlYes
With .Range("P2:P" & n + 1)
.Formula = "=SUMIFS($N$2:$N2,$M$2:$M2,$M2)-SUMIFS($O$2:$O2,$M$2:$M2,$M2)"
.Value = .Value
End With
End If
For i = 1 To n
.Cells(i + 1, ws * 9 + 1) = i
Next i
End With
Next ws
ws1.Activate
'Reset Macro Optimization Settings
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Bookmarks