Hỏi về cách tính nhanh trong excel (2 người xem)

Người dùng đang xem chủ đề này

phamkhuong147

Thành viên mới
Tham gia
4/10/14
Bài viết
4
Được thích
0
ô D54 trong file em gửi là tính toán bằng công thức, em muốn tính toán ở ô D74 cũng giống công thức như trên mà không phải gõ lại công thức đó. Vì bài của em có nhiều tính toán giống nhau nhưng em không biết tính sao cho nhanh. Mong các anh giúp đỡ.
Em xin cảm ơn!!!
 

File đính kèm

Lần chỉnh sửa cuối:
Vì không phải là chuyên ngành của tôi và tôi không hiểu được cách tính toán trong file của bạn nhưng nếu cách tính toán giống nhau như file của bạn thì độ dài dữ liệu ở mỗi nhóm khác nhau phải giống nhau chỉ khác số mới mong copy được y nguyên công thức xuống, còn không thì phải đợi ai đó kiên nhẫn mò theo công thức của bạn để tìm ra quy luật giúp bạn thôi....
 
Upvote 0
Cảm ơn bạn, mình cũng tìm hiểu được biết là dùng macro >> record macro >> sửa sang dạng function nhưng mà chưa ra, tính toán lâu quá tìm cách tính cho nhanh. -+*/
 
Upvote 0
Cảm ơn bạn nhiều đành dùng thủ công z -+*/

Bài này nếu muốn viết hàm người dùng thì có thể dùng vị trí của ô để mò ra các vùng dữ liệu.

Mã:
Function ToTiTe() As Double
Const ROWOS = -5
Const COLTG1 = "F:F" [COLOR=#008000]' cột pdm[/COLOR]
Const COLTG2 = "H:H" [COLOR=#008000]' cột cos j[/COLOR]
Dim b1 As Double
Dim osc1 As Integer, osc2 As Integer
Dim numRows As Integer
Dim wsf As WorksheetFunction
Set wsf = Application.WorksheetFunction
With Application.Caller.Cells(1) [COLOR=#008000]' ô ghi kết quả[/COLOR]
os1 = .Parent.Range(COLTG1).Column - .Column [COLOR=#008000]' offset tơi cột pdm[/COLOR]
os2 = .Parent.Range(COLTG2).Column - .Column [COLOR=#008000]' offset tới cột cos j[/COLOR]
numRows = 0 [COLOR=#008000]' biến chỉ sô dòng dữ liệu[/COLOR]
Do While IsNumeric(.Offset(ROWOS - numRows, os1).Value): numRows = numRows + 1: Loop
ToTiTe = wsf.SumProduct(.Offset(ROWOS - numRows + 1, os1).Resize(numRows, 1), _
            .Offset(ROWOS - numRows + 1, os2).Resize(numRows, 1)) _
                / wsf.Sum(.Offset(ROWOS - numRows + 1, os1).Resize(numRows, 1))
End With
Set wsf = Nothing
End Function

Trong ô D35, ghi công thức =Round(ToTiTe(),2)
 
Upvote 0
ô D54 trong file em gửi là tính toán bằng công thức, em muốn tính toán ở ô D74 cũng giống công thức như trên mà không phải gõ lại công thức đó. Vì bài của em có nhiều tính toán giống nhau nhưng em không biết tính sao cho nhanh. Mong các anh giúp đỡ.
Em xin cảm ơn!!!
Mã:
B33=ROUND(SUMPRODUCT(OFFSET($F$1,LOOKUP(2,1/($A$1:$A33="STT"),ROW($E$1:$E33)),,LOOKUP(2,1/($E$1:$E33="Tổng"),ROW($E$1:$E33))-LOOKUP(2,1/($A$1:$A33="STT"),ROW($E$1:$E33)))*OFFSET($A$1,LOOKUP(2,1/($A$1:$A33="STT"),ROW($E$1:$E33)),MATCH(A33,$27:$27,0)-1,LOOKUP(2,1/($E$1:$E33="Tổng"),ROW($E$1:$E33))-LOOKUP(2,1/($A$1:$A33="STT"),ROW($E$1:$E33))))/LOOKUP(2,1/($E$1:$E33="Tổng"),$F$1:$F33),2)
copy to B34, D35, D37
lưu ý sửa D35= "cos j", D37="Ksd" (xoá dấu = và space), xoá space cuối chuỗi H27
copy ct trên cho các ô tương tự khác B52, B53, D54, D56...
 
Lần chỉnh sửa cuối:
Upvote 0

Bài viết mới nhất

Back
Top Bottom