Giúp em viết hàm tự tạo!

Liên hệ QC

vitbau86

Thành viên chính thức
Tham gia
9/7/11
Bài viết
58
Được thích
5
Em có bài toán như sau:
Ở sheet 1 là bảng giá các loại phụ kiện, sheet 2 là bảng liệt kê các loại phụ kiện dành cho từng bộ cửa. Ở hàng TỔNG phía dưới là tổng từng loại phụ kiện dành cho dự trù vật tư. Em muốn lập 1 hàm tính tổng giá của tất cả các phụ kiện dành cho mỗi bộ cửa ở cột " tổng giá gốc". Ý đồ của em là nhân số lượng của từng loại phụ kiện với đơn giá của nó trong sheet 1 rồi cộng lại.
http://www.mediafire.com/download.php?v5kc6ap1m3n9qm9
 
Bạn thử kiểm tra lại xem sao

--=0 --=0 --=0
--=0 --=0 --=0
--=0 --=0 --=0

 

File đính kèm

  • gpeVatTu.rar
    325.5 KB · Đọc: 75
Upvote 0
ôi đúng là hàm em cần rồi, cám ơn bác nhiều lắm -=.,,
 
Upvote 0
bác có thể giải thích đoạn code cho em đc ko, em chưa hiểu lắm -0-/.
 
Upvote 0
Sẵn lòng thôi,. . .

PHP:
Option Explicit
Function TongGiaGoc(PhuKien As Range)
1 Dim ChTiet As Range, Rng As Range, sRng As Range, Sh As Worksheet, Cls As Range

 Set Sh = ThisWorkbook.Worksheets("BangGia")
3 Set Rng = Sh.Range(Sh.[c4], Sh.[C65500].End(xlUp))
 Set ChTiet = Range("ChiTiet")
5 For Each Cls In PhuKien
    If Cls.Value <> 0 Then
7        TongGiaGoc = TongGiaGoc + _
            Cls.Value * Rng.Find(ChTiet(Cls.Column - 2), , xlFormulas, xlWhole).Offset(, 1).Value
    End If
9 Next Cls
End Function

(1) Khai báo các biến để xài khi cần;

(2) Gán trang tính có tên là 'BangGia' vô biến đối tượng đã khai báo. (Các tên của trang tính không nên có khoảng trắng)

(3) Lầy vùng có dữ liệu thuộc cột 'C' thuộc trang tính vừa nêu gán vô biến đã khai báo

(4) Lấy vùng đã gán tên 'ChiTiet' gán vô biến ChTiet đã khai báo

(5) Thiết lập vòng lặp duyệt toàn bộ các ô của tham số vùng mà người dùng đã cung cấp;
Vòng lặp này kết thúc ở dòng lệnh số 9;

(6) Điều kiện là trị trong ô đang khảo sát khác không thì thực hiện dòng lệnh 7

(7) Thực hiện fương thức tìm kiếm trị chứa vùng đã gán tên, có vị trí cột trùng với ô Cls đang khào sát; Lấy trị trong ô bên fải liền kề với ô tìm thấy đem nhân với trị trong ô đang khảo sát; & tích đó cộng chung với trị của hàm trước đó đang chứa;

(8) & (9) coi như đã giải thích;

(húc thành công!
 
Upvote 0
Thứ nhứt/Trước tiên: Bạn nên bỏ tật trộn ô!

Thứ nhì: Vùng gán tên "ChiTiet" của bạn bắt đầu từ cột 45; khác với vùng gán tên trong file đính kèm bên trên bắt đầu từ cột 3; Như vậy trong dòng lệnh mà bạn iêu cầu giải thích thêm thay vì -2 bạn fải thay bằng -44

Thứ ba: Đúng là dòng lệnh đó còn fải giải thích thêm ở thứ tự ô trong vùng đã chọn; Nôm na thế này

Ở bên trên ta có câu lệnh
Set ChTiet = Range("ChiTiet")
( Cụ thể sẽ là Set ChTiet = Range("$AS$9:$CO$9") )

Nếu giờ sau câu lệnh đó, bạn ghi dòng lệnh MsgBox ChTiet(2).Address thì dòng lệnh sẽ cho bạn thông tin gì? (Bạn đoán trước khi thử nha)

Thiết nghĩ nên viết thêm cho bạn rằng, Excel sẽ quýnh số thứ tự (tạm là thế do dễ hiểu) từ trái sang fải & từ trên xuống dưới trong 1 vùng có nhiều hàng & cột, còn 1 hàng như của chúng ta nó sẽ quýnh từ trái sang thôi.

( & bạn trả lời thêm câu này: Trong Excel 2003 thì [B2] mang số mấy vậy?)

(húc nhiều thành công!
 
Upvote 0
Web KT
Back
Top Bottom