hungvinh1402
Thành viên mới 

			
		- Tham gia
- 6/4/13
- Bài viết
- 12
- Được thích
- 3
Xin chào mọi người,
liên quan tới công việc cần tính tổng với nhiều điều kiện. do dữ liệu lớn 5k~10k dòng & cột nên không dùng công thức máy treo=> em nghĩ dùng VBA sẽ hiệu quả hơn
xin mọi người giúp đỡ giải bài toán dưới :
1. vùng cần chạy dữ liệu: sheet(Sum).range("T12:FFP571")
2. ở sheet(Sum):
- ở cột A hàng nào =1 thì bỏ qua
- nếu cột A khác 1 và cột F (cùng hàng) không trống thì :với điều kiện cột màu xanh và hàng màu đỏ tương ứng với sheet(data) thì tính tổng:
+ Nếu ở hàng số 11: cột nào = 1 tính tổng sheet(data) cột số dư
+ : cột nào =2 tính tổng sheet(data) cột số lượng trả lại
còn lại là bỏ qua
xin cảm ơn
P/S: em có code mà máy nó treo. có lẽ chưa tối ưu ở đâu đó
em post cả Code và file đính kèm ạ
		
		
	
	
		 
	
	
	
	
		
				
			liên quan tới công việc cần tính tổng với nhiều điều kiện. do dữ liệu lớn 5k~10k dòng & cột nên không dùng công thức máy treo=> em nghĩ dùng VBA sẽ hiệu quả hơn
xin mọi người giúp đỡ giải bài toán dưới :
1. vùng cần chạy dữ liệu: sheet(Sum).range("T12:FFP571")
2. ở sheet(Sum):
- ở cột A hàng nào =1 thì bỏ qua
- nếu cột A khác 1 và cột F (cùng hàng) không trống thì :với điều kiện cột màu xanh và hàng màu đỏ tương ứng với sheet(data) thì tính tổng:
+ Nếu ở hàng số 11: cột nào = 1 tính tổng sheet(data) cột số dư
+ : cột nào =2 tính tổng sheet(data) cột số lượng trả lại
còn lại là bỏ qua
xin cảm ơn
P/S: em có code mà máy nó treo. có lẽ chưa tối ưu ở đâu đó
em post cả Code và file đính kèm ạ
 
	
		Mã:
		
	
	Sub Sum_data()
    Dim SumArr(), Sarr()
    Dim i As Long, j As Long, l As Long, SoLuongBan As Long, TraLai As Long
    Dim SumLr As Long, SumLcol As Long, SLr As Long, SLcol As Long, TG As Double
    SoLuongBan = 0: TraLai = 0: TG = Timer()
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    SumLr = Sheet1.Range("F" & Rows.Count).End(xlUp).Row
    SumLcol = Sheet1.Cells(11, Columns.Count).End(xlToLeft).Column
    SumArr = Sheet1.Range("A8").Resize(SumLr - 7, SumLcol).Value ' tu A8
    SLr = Sheet2.Range("E" & Rows.Count).End(xlUp).Row
    scol = Sheet2.Cells(8, Columns.Count).End(xlToLeft).Column
    Sarr = Sheet2.Range("E8").Resize(SLr - 7, scol - 4).Value ' tu E8
    For i = 5 To UBound(SumArr, 1)
        If SumArr(i, 1) = Empty And SumArr(i, 6) <> "" Then
            For j = 20 To UBound(SumArr, 2)
                For l = 2 To UBound(Sarr, 1)
                    If SumArr(i, 6) = Sarr(l, 5) And SumArr(1, j) = Sarr(l, 3) Then
                        If SumArr(4, j) = 1 Then
                            SoLuongBan = SumArr(i, j) + Sarr(l, 7)
                            SumArr(i, j) = SoLuongBan
                            SoLuongBan = 0
                        ElseIf SumArr(4, j) = 2 Then
                            TraLai = SumArr(i, j) + Sarr(l, 16)
                            SumArr(i, j) = TraLai
                            TraLai = 0
                        End If
                    End If
                Next l
            Next j
        End If
    Next i
    Sheet1.Range("A8").Resize(SumLr - 7, SumLcol) = SumArr
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    MsgBox "Done " & Round(Timer() - TG, 2)
End Sub 
	 
	  
 
 
		

 
 
		 
 
		
 
 
		 
 
		 
 
		 
 
		
 
 
		