PDA

View Full Version : Cách sử dụng các hàm Sum(mảng), sumproduct trong VBA



ontopoftheworld
05-04-07, 07:56 PM
(Các bác mod thông cảm, nêú post sai topic)
1/ Hình như khi sử dụng hàm sumproduct trong VBA không được phaỉ không các Bác. khi dò tìm bằng Google thì hâù như không thấy có ai đó sdụng được. Vậy các bác có thể giải thích được lý do cho e thông suốt với(e tìm đọc trên mạng nhưng trình độ tiếng anh ẹ quá không hiêủ hết bọn tây nói).
2/ Còn với hàm sum(sử dụng mạng thì em có làm rồi, nhưng chưa có hiêủ quả vì kết quả sai bét nhè, klhông biết em viết sai code cho nào khôgn?
BÁc nào chỉ chỗ sai cho em với đoạn mã này với.
range("A1").value=application.worksheetfunction.Sum((Left(Ra nge _("TKNO"), 3) = "711"), Range("C1:C5"), (Left(Range("TKCO"), 3) = "911"))
HÌnh như ko được chấp nhận.
ai đó giúp em hiêủ rõ bản chất với
3/ Em đã làm thử với hàm sumif thì ok(nhưng chưa test lại)
Nêú mà trong VBA ứng dụng được các hàm này thì có lẽ quá khoẻ.

PhanTuHuong
05-04-07, 11:30 PM
Hàm Sumproduct vẫn sử dụng tốt trong VBA nhưng trong Help không có ví dụ.

Còn hàm của bạn sai có lẽ là do dùng Left của 1 vùng. (Hàm Left có trong các hàm VBA-LVD)

levanduyet
05-04-07, 11:30 PM
Chào bạn,
_Bạn nên phân biệt VBA functions (tạm dịch là các hàm VBA) và Worksheet functions (tạm dịch là các hàm Worksheet).
Để tìm hiểu các hàm VBA bạn nên dùng Help của Excel là đủ với từ khóa là "VBA functions".
_Còn các hàm Worksheet bạn sẽ không thể sử dụng được nếu nó đã tồn tại trong VBA functions. (The only worksheet functions that cannot use are those that have an equivalent VBA function.)

Lê Văn Duyệt

Nguyễn Duy Tuân
06-04-07, 10:30 AM
range("A1").value=application.worksheetfunction.Sum((Left(Ra nge _("TKNO"), 3) = "711"), Range("C1:C5"), (Left(Range("TKCO"), 3) = "911"))
HÌnh như ko được chấp nhận.
ai đó giúp em hiêủ rõ bản chất với


Công thức trên của bạn bị sai. Sai về cấu trúc và sai cả về Logic.

Ví dụ tôi tính Tổng số tiền bên Nợ TK "1111" đối ứng với Có TK "131"




Sub SUM_NoTK1111CoTK131()
Range("A1").FormulaArray = "=SUM(IF(Left(TKNO, 4) = ""1111"",IF(Left(TKCO, 3) = ""131"", TIEN,0),0))"
'Nếu muốn xoá công thức, giữ lại giá trị thì dùng lệnh dưới đây
'Range("A1").Value = Range("A1").Value

End Sub



//Khi nào Goole không thấy, bạn vào GPE hỏi nhé!--=0

ontopoftheworld
06-04-07, 12:49 PM
Cám ơn các anh,
Như anh Duyệt nói. Cái em quan tâm là hàm worksheet chứ không phảI là hàm VBA. Thật ra em thích hàm WS hơn, khi macro Ex chỉ lưu lạI số liệu trên EX, còn hàm VBA thì lưu lạI cthức trên EX, mà như thế quá nhiều công thức trên một file thì nặng ------à> Ex chạy chán lắm.+-+-+-+

To : anh Tuân
“ 'Range("A1").Value = Range("A1").Value”
VớI đoạn code này có lẽ giúp em được nhiều đó anh ạ.
To Anh Hướng, anh Duyệt, Mr. Tuân:
Các anh có cách nào khác khả thi hơn, mà có thể tính tổng nhiều điều kiện tựa như hàm Sum(hàm mảng, hay hàm sumproduct không??)

Không thì chắc em ngáp vớI mớ số liệu wá
Rất cám ơn các anh (wá đầy đủ Cao thủ@$@!^% ) đã giúp đỡ.

viephanag
20-12-09, 06:27 PM
Tôi có công thức như sau (trong worksheet)
IF(OR(AND(B9="C";SUMIF(SOHIEUTK;A9&"*";SDDNAM)>0);AND(B9="N";SUMIF(SOHIEUTK;A9&"*";SDDNAM)<0));ABS(SUMIF(SOHIEUTK;A9&"*";SDDNAM));0)
Hoạt động tốt.
Nhưng mỗi lần cần chèn một số dòng tôi phải chép công thức này xuống các dòng vừa chèn
Tôi đã tạo một sub chuyển công thức trên thành text như sau :
Sub cap_nhat()
Worksheets("CDTK").Activate
Dim n As String

n = "=IF" & "(" & "OR" & "(" & "AND"
n = n & "(B9=" & """C""" & ";" & "SUMIF" & "(SOHIEUTK;A9&" & """*"""
n = n & ";SDDNAM)>0);" & "AND" & "(B9=" & """N""" & ";"
n = n & "SUMIF" & "(SOHIEUTK;A9&" & """*""" & ";SDDNAM)<0));"
n = n & "ABS" & "(" & "SUMIF" & "(SOHIEUTK;A9&" & """*""" & ";SDDNAM));0)"

'IF(OR(AND(B9="C";SUMIF(SOHIEUTK;A9&"*";SDDNAM)>0);AND(B9="N";SUMIF(SOHIEUTK;A9&"*";SDDNAM)<0));ABS(SUMIF(SOHIEUTK;A9&"*";SDDNAM));0)
Cells(70, "P").Value = n
End Sub
Nhưng khi chạy thì báo lỗi, nếu bỏ dấu = trước IF đầu tiên thì có thể gán thành dòng text trong cell gán và khi thêm dấu = vào trươc thì thành công thức.
Làm thế nào để chương trình tự động biến nó thành công thức trong cell
Nhờ cá bạn chỉ giúp. Rất cảm ơn.

kyla
21-12-09, 11:37 PM
Chào bạn,
_Bạn nên phân biệt VBA functions (tạm dịch là các hàm VBA) và Worksheet functions (tạm dịch là các hàm Worksheet).
Để tìm hiểu các hàm VBA bạn nên dùng Help của Excel là đủ với từ khóa là "VBA functions".
_Còn các hàm Worksheet bạn sẽ không thể sử dụng được nếu nó đã tồn tại trong VBA functions. (The only worksheet functions that cannot use are those that have an equivalent VBA function.)

Lê Văn Duyệt
Anh ơi em không hiểu các hàm VBA là thế nào. Công dụng của chúng là gì? Trên ghế nhà trường em chưa được tìm hiểu, giờ em rẩt muốn hiểu về chúng. Anh giúp em với ạ. Nếu anh có File các hàm VBA thì gửi cho e theo địa chỉ mail: nham.hm@gmail. com.vn được không a?Cảm ơn anh nhé!

ChanhTQ@
22-12-09, 06:06 AM
Anh ơi em không hiểu các hàm VBA là thế nào. Công dụng của chúng là gì? Trên ghế nhà trường em chưa được tìm hiểu, giờ em rẩt muốn hiểu về chúng. Anh giúp em với ạ. Nếu anh có File các hàm VBA thì gửi cho e theo địa chỉ mail: nham.hm@gmail. com.vn được không a?Cảm ơn anh nhé!

Ngay trong excel bạn cũng có mà, cứ gì phải đi xin anh LV Duyệt làm chi vậy;

Cũng tương tợ như cách đi tới các hàm trong excel, mình sẽ chỉ bạn cách tiếp cận các hàm của VBA, như sau (E2K3 nha)

Trên trang tính, ta bấm {ALT} & {F11} để mở CS (cửa sổ) Microsoft Visual Basic
Trên CS này có thanh menu mới của nó;
Ta vô menu View => Object Browser
Góc trên bên trái của CS mới xuất hiện này có mục <All libraries>;
Bạn bấm vô nó, sẽ có danh sách đổ xuống; Hãy chọn từ nó dòng "VBA";
Trong ngăn Classes sẽ có nhiều dòng; Ta thử chọn dòng 'DateTime'
Lúc đó ngăn bên phải liền kề sẽ xuất hiện tên các hàm vể ngày giờ (Như mình dịch nôm na là vậy)
Bạn thử bấm vô dòng Date của nó xem phía dưới có gì không?!

Chúc thành công trên bước đường tự lực học tập của bạn! --=0

kyla
22-12-09, 09:41 PM
Ngay trong excel bạn cũng có mà, cứ gì phải đi xin anh LV Duyệt làm chi vậy;

Cũng tương tợ như cách đi tới các hàm trong excel, mình sẽ chỉ bạn cách tiếp cận các hàm của VBA, như sau (E2K3 nha)

Trên trang tính, ta bấm {ALT} & {F11} để mở CS (cửa sổ) Microsoft Visual Basic
Trên CS này có thanh menu mới của nó;
Ta vô menu View => Object Browser
Góc trên bên trái của CS mới xuất hiện này có mục <All libraries>;
Bạn bấm vô nó, sẽ có danh sách đổ xuống; Hãy chọn từ nó dòng "VBA";
Trong ngăn Classes sẽ có nhiều dòng; Ta thử chọn dòng 'DateTime'
Lúc đó ngăn bên phải liền kề sẽ xuất hiện tên các hàm vể ngày giờ (Như mình dịch nôm na là vậy)
Bạn thử bấm vô dòng Date của nó xem phía dưới có gì không?!

Chúc thành công trên bước đường tự lực học tập của bạn! --=0
Cảm ơn bạn nhé. Nhưng bạn ơi thật sự thì mình vẫn chưa hiểu về công dụng của các hàm này. Mình đã làm theo bạn, và tất cả đều suôn sẻ nhưng tiếp theo không thấy hiện lên nội dung gì nữa. Mình chậm hiểu lắm+-+-+-+. Bạn có thể giải thích rõ hơn cho mình được ko?Bạn có thể cho mình ví dụ về một hàm nào đó được ko?

hbthanhnga
16-04-12, 11:08 AM
hic, e muốn đếm số ngày công thực làm việc của CBNV trong 1 tháng mà biết nên dùng hàm nào ạ? pác nào có thể tư vấn giúp em với ạ.
Bên e tính công theo sản lượng ngày công. VD như thế này ạ:
Tên Ngày Loại SP
Thắng 1 A
Thắng 1 B
Dũng 1 D
Dũng 2 C
Thắng 2 E
Thắng 3 C
Thắng 3 A
Dũng 4 C
Dũng 4 C
Thì làm sao tính số ngày công thực tế được ạ, e cám ơn các pác !!!!!!!!!!

hoangtuan90_cnt
03-05-12, 08:30 AM
mấy anh cho em hỏi hai câu lệnh này được hiểu như thế nào ạ "=IF(E8="","",VLOOKUP(E8,NXT!$C$8:$E$11213,2,0))"
=SUMPRODUCT(--(Nhap!$C$8:$C$5000>=NXT!$C$1),--(Nhap!$C$8:$C$5000<=NXT!$C$2),--(Nhap!$E$8:$E$5000=NXT!$C8),Nhap!$H$8:$H$5000)