وعليكم السلام ورحمة الله تعالى وبركاته
رغم أنني ليس متأكدا من طلبك بسبب كثرة الأكواد التي قمت بإرفاقها
بالنسبة لعمود F (اجمالى ك وق) لا يمكن جمع القيم مباشرة إذا كانت مخزنة كنص باستخدام الدالة TEXT أعتقد انه يمكنك تجاوز هذه المشكلة بتعديل الكود لجمع القيم العددية مباشرة دون الحاجة إلى الصيغة TEXT مع الاحتفاظ بالصيغ في الأعمدة الأخرى
Option Explicit
Sub Test()
Dim WS As Worksheet, dest As Worksheet, dict As Object
Dim Code, name, Unit As String
Dim cartn, Price, tmp, ColF As Double
Dim ColArr, col, key, ColHard As Variant
Dim lastRow, i, Irow As Long
Set WS = Sheets("Sheet3"): Set dest = Sheets("رصيد")
lastRow = WS.Cells(Rows.Count, 7).End(xlUp).Row
If lastRow < 2 Then Exit Sub
ColHard = Array("كود الصنف", "اسم الصنف", "وحدة الصنف", "سعر الصنف", "عدد الكراتين", "إجمالي ك وق", "ك", "ق")
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
dest.Range("A2:H" & dest.Rows.Count).ClearContents
Application.ErrorCheckingOptions.BackgroundChecking = False
Set dict = CreateObject("Scripting.Dictionary")
Irow = 2
For i = 2 To lastRow
Code = Trim(CStr(WS.Cells(i, 7).value))
name = Trim(WS.Cells(i, 6).value)
Unit = Trim(WS.Cells(i, 4).value)
Price = Val(WS.Cells(i, 5).value)
cartn = Val(WS.Cells(i, 3).value)
If Code <> "" Then
If dict.Exists(Code) Then
dict(Code)(3) = dict(Code)(3) + cartn
Else
dict.Add Code, Array(name, Unit, Price, cartn)
End If
End If
Next i
With dest
.Range("A1:H1").value = ColHard
For Each key In dict.Keys
.Cells(Irow, 1).value = key
.Cells(Irow, 2).Resize(1, 4).value = dict(key)
.Cells(Irow, 7).Formula = "=INT(E" & Irow & "/C" & Irow & ")"
.Cells(Irow, 8).Formula = "=MOD(E" & Irow & ",C" & Irow & ")"
Irow = Irow + 1
Next key
.Cells(Irow, 1).value = "المجموع الكلي"
ColF = 0
For i = 2 To Irow - 1
If .Cells(i, 5).value <> 0 And .Cells(i, 3).value <> 0 Then
tmp = Int(.Cells(i, 5).value / .Cells(i, 3).value) + (.Cells(i, 5).value Mod _
.Cells(i, 3).value) / .Cells(i, 3).value
Else
tmp = 0
End If
.Cells(i, 6).value = Format(tmp, "0.0")
ColF = ColF + tmp
Next i
.Cells(Irow, 6).value = Format(ColF, "0.0")
ColArr = Array("E", "G", "H")
For Each col In ColArr
.Cells(Irow, col).Formula = "=SUM(" & col & "2:" & col & (Irow - 1) & ")"
Next col
End With
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
MsgBox "تمت العملية بنجاح", vbInformation
End Sub
اجمالى2 V1.xlsm