Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây

Liên hệ QC
Status
Không mở trả lời sau này.

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn xem file này đi, bấm vào bất kỳ ô nào, tự động chọn 5 ô kế tiếp bên phải!
(Cái này chưa chắc đã là "tiện" đâu nhé, chỉ sợ lại thành "bất tiện")
À há, lại "giật mình" nữa rồi. Người ta muốn chọn 5 ô trên 1 dòng thì mình lại chọn 5 ô trên 1 cột.
Trong code trên của mình phải sửa Resize(5) thành Resize(,5) mới đúng yêu cầu.
 
Upvote 0
Không hẳn là bên cột E có gì thì bên cột B có đó. Nó chỉ đúng với 1 số chức danh đầu thôi. Chẳng hặn nhưở tổ PC, thì trongđố nó có PC-TT, PC-TP và PC-TV hoặc PC-PV. File em gởi lên chỉ là VD 1 số chức danh thôi.
Trong khi bảng qui định thì chỉ có qui định cho PC-TT, và PC-TP, và PC-TV. Các chức danh <> PC-TT, PC-TP thì lấy chung mức PC-TV

Một thắc mắc nữa, xác định lại cho mã là "MH":

Bạn viết:

Mã:
            ElseIf (Left(ChucVu, 3) = "[B][COLOR=#ff0000]KCS[/COLOR][/B]" And d_luongBQ < [COLOR=#ff0000](Range("KCS"))[/COLOR]) Then
                Bulg = (Range("KCS") - d_luongBQ) * NgayCong
            ElseIf (Left(ChucVu, 2) = "[B][COLOR=#0000cd]MH[/COLOR][/B]") And Right(ChucVu, 2) = "QC" And d_luongBQ < [COLOR=#ff0000](Range("KCS")[/COLOR]) Then
                Bulg = (Range("MH_QC") - d_luongBQ) * NgayCong

Một thằng là "KCS" thì so sánh với thằng Range("KCS"), còn thằng kia là "MH" mà cũng so sánh với thằng Range("KCS") luôn hay sao?
 
Upvote 0
Nếu bạn muốn tôi làm một hàm tổng quát, ngắn gọn, nhanh, dễ hiểu thì bạn gửi cái file đầy đủ lên và cột kết quả đã tính mong muốn của bạn. Tôi sẽ dễ dàng hình dung một cách khái quát nhất. Nếu dung lương file quá lớn thì nén lại nhé!


Em gởi lại file, anh xem giúp em
 

File đính kèm

  • TL (CT) T03.13.rar
    381.9 KB · Đọc: 5
Upvote 0
Một thắc mắc nữa, xác định lại cho mã là "MH":

Bạn viết:

Mã:
            ElseIf (Left(ChucVu, 3) = "[B][COLOR=#ff0000]KCS[/COLOR][/B]" And d_luongBQ < [COLOR=#ff0000](Range("KCS"))[/COLOR]) Then
                Bulg = (Range("KCS") - d_luongBQ) * NgayCong
            ElseIf (Left(ChucVu, 2) = "[B][COLOR=#0000cd]MH[/COLOR][/B]") And Right(ChucVu, 2) = "QC" And d_luongBQ < [COLOR=#ff0000](Range("KCS")[/COLOR]) Then
                Bulg = (Range("MH_QC") - d_luongBQ) * NgayCong

Một thằng là "KCS" thì so sánh với thằng Range("KCS"), còn thằng kia là "MH" mà cũng so sánh với thằng Range("KCS") luôn hay sao?


Code đó là ngày hôm qua anh viết cho em mà
 
Upvote 0
Code đó là ngày hôm qua anh viết cho em mà

Bậy bạ à nha, tôi chỉ theo cái đầu tiên bạn gửi lên mà rút gọn lại thôi nha! Nhưng nói tóm lại:

1) ElseIf (Left(ChucVu, 2) = "MH") And Right(ChucVu, 2) = "QC" And d_luongBQ < (Range("KCS")) Then
Bulg = (Range("MH_QC") - d_luongBQ) * NgayCong
hay:

2) ElseIf (Left(ChucVu, 2) = "MH") And Right(ChucVu, 2) = "QC" And d_luongBQ < (Range("MH_QC")) Then
Bulg = (Range("MH_QC") - d_luongBQ) * NgayCong

cái nào đúng?

Thắc mắc tiếp theo là:

Khi tính toán tại đây: Bulg = (Range("MH_QC") - d_luongBQ) * NgayCong

Nếu Range("MH_QC") - d_luongBQ cho kết quả là số âm thì vẫn để kết quả đó hay cho kết quả bằng 0?
 
Upvote 0
Bậy bạ à nha, tôi chỉ theo cái đầu tiên bạn gửi lên mà rút gọn lại thôi nha! Nhưng nói tóm lại:

1) ElseIf (Left(ChucVu, 2) = "MH") And Right(ChucVu, 2) = "QC" And d_luongBQ < (Range("KCS")) Then
Bulg = (Range("MH_QC") - d_luongBQ) * NgayCong
hay:

2) ElseIf (Left(ChucVu, 2) = "MH") And Right(ChucVu, 2) = "QC" And d_luongBQ < (Range("MH_QC")) Then
Bulg = (Range("MH_QC") - d_luongBQ) * NgayCong


cái nào đúng?


Mục 2 là đúng đó anh!
Nếu Range("MH_QC") - d_luongBQ cho kết quả là số âm thì cho kết quả bằng 0?
 
Upvote 0
Mục 2 là đúng đó anh!
Nếu Range("MH_QC") - d_luongBQ cho kết quả là số âm thì cho kết quả bằng 0

OK, công thức của bạn sẽ là:

[GPECODE=vb]Function BULG(ChucVu As String, NgayCong As Double, TongLuong As Double) As Double
'Application.Volatile
If ChucVu = "" Or NgayCong = 0 Then Exit Function
'-----------------------------------------------------------------
Dim d_luongBQ As Double
d_luongBQ = TongLuong / NgayCong
If d_luongBQ = 0 Then Exit Function
'-----------------------------------------------------------------
Dim BangMucBu As Variant, i As Long, j As Long, _
MucBuTT_QC As Double, MucBuTP_TK As Double, MucBuTVKhac As Double
BangMucBu = Range(BangTra.Range("A2"), BangTra.Range("A65536").End(xlUp)).Resize(, 4)
ChucVu = Trim(ChucVu)
j = UBound(BangMucBu)
If Len(ChucVu) = 3 Then
For i = 1 To j
If BangMucBu(i, 1) = ChucVu Then
MucBuTT_QC = BangMucBu(i, 2)
Exit For
End If
Next
If i > j Then Exit Function
If d_luongBQ < MucBuTT_QC Then
BULG = (MucBuTT_QC - d_luongBQ) * NgayCong
End If
Else
Dim LeftChucVu As String, RightChucVu As String
LeftChucVu = Left(ChucVu, 2)
RightChucVu = Right(ChucVu, 2)
For i = 1 To j
If BangMucBu(i, 1) = LeftChucVu Then
MucBuTT_QC = BangMucBu(i, 2)
MucBuTP_TK = BangMucBu(i, 3)
MucBuTVKhac = BangMucBu(i, 4)
Exit For
End If
Next
If i > j Then Exit Function
If LeftChucVu = "MH" Then
If RightChucVu = "QC" Then
If d_luongBQ < MucBuTT_QC Then
BULG = (MucBuTT_QC - d_luongBQ) * NgayCong
End If
Else
BULG = (MucBuTP_TK - d_luongBQ) * NgayCong
End If
Else
Select Case RightChucVu
Case "TT": BULG = (MucBuTT_QC - d_luongBQ) * NgayCong
Case "TP": BULG = (MucBuTP_TK - d_luongBQ) * NgayCong
Case Else: BULG = (MucBuTVKhac - d_luongBQ) * NgayCong
End Select
End If
End If
If BULG < 0 Then BULG = 0
End Function
[/GPECODE]

LƯU Ý:

Tôi chuyển các mục tra theo mã công việc của bạn vào một sheet riêng biệt (BANG_TRA) và sửa lại cấu trúc của nó một chút cho phù hợp với công thức của bạn. Nếu có những mã công việc mới, cứ thế mà phang vô tiếp trên bảng đó thôi, không cần sửa code đâu.

Riêng tất cả các Name của bạn tôi đã xóa bỏ hết, không dùng 1 name nào hết đấy nhé!

Bạn cứ kiểm tra đi, nếu chưa đúng, ta tính tiếp.

TÔI ĐÃ SỬA LẠI HÀM (KHAI BÁO BIẾN), VÌ VẬY, NẾU BẠN ĐÃ TẢI TRƯỚC RỒI THÌ TẢI LẠI FILE BẠN NHÉ!
 

File đính kèm

  • LuongBu.xlsm
    93.5 KB · Đọc: 8
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh rất rất nhiều. Chúc anh gặp nhiều may mắn trong cuôc sống.
Sẵn tiện đây anh cho em hỏi?
Nếu Mình muốn tạo 1 cái listbox cho từng sheet để Khi mình chọn: BQ / ngày lớn nhất ra số tiền BQ/ngày lớn nhất
BQ / ngày nhỏ nhất ra số tiền BQ/ngày nhỏ nhất
BQ / ngày của cả tổ ra số tiền BQ/ngày của tổ
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh rất rất nhiều. Chúc anh gặp nhiều may mắn trong cuôc sống.
Sẵn tiện đây anh cho em hỏi?
Nếu Mình muốn tạo 1 cái listbox cho từng sheet để Khi mình chọn: BQ / ngày lớn nhất ra số tiền BQ/ngày lớn nhất
BQ / ngày nhỏ nhất ra số tiền BQ/ngày nhỏ nhất
BQ / ngày của cả tổ ra số tiền BQ/ngày của tổ

Bạn cứ làm thử trước đi, vướng chỗ nào bạn đưa cái file đó lên đây.
 
Upvote 0
Tôi chẳng thể giúp cho bạn vì tôi chẳng biết các mục của bạn sẽ lấy tại đâu, cách thức làm như thế nào, dữ liệu được so sánh tại sheet nào v.v...
Cám ơn anh!, em sẽ sắp sếp lại và sẽ gởi banif lên nhờ anh giúp đỡ

[/QUOTE]

Anh cho em hỏi? Em có thêm mã công việc mới nhưng nhưng lương bù nó không thể hiện

Bulg.jpg
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Upvote 0
Em gởi lại file. Anh xem giúp em

Trời, bạn gọi đó là "mã" công việc đó hả? ở đây tôi viết rằng, nếu mã nào có LEN(MÃ)=3 thì được "chế độ" như BĐH, KCS, còn mã nào khác thì có chế độ của nhóm dưới.

Bạn cần sửa lại các ký hiệu thôi, chứ sao bê nguyên công việc thành ký hiệu cho được?

Bạn cần phải nhất quán trong cách đặt ký hiệu, đâu phải đặt bừa bải mà bắt máy nó tính được đâu? Ngay cả tôi cũng không tính được chứ đừng nói là máy.

Chẳng hạn, lúc đầu bạn đưa thông tin trong cái hàm của bạn chỉ có KCS

Giờ bạn lại đặt cái mã trong bảng tính là KCS-RKL và KCS-NV, "bố bảo" tôi cũng không biết tính như thế nào thì nói gì đến máy móc!
 
Lần chỉnh sửa cuối:
Upvote 0
Trời, bạn gọi đó là "mã" công việc đó hả? ở đây tôi viết rằng, nếu mã nào có LEN(MÃ)=3 thì được "chế độ" như BĐH, KCS, còn mã nào khác thì có chế độ của nhóm dưới.

Bạn cần sửa lại các ký hiệu thôi, chứ sao bê nguyên công việc thành ký hiệu cho được?

Bạn cần phải nhất quán trong cách đặt ký hiệu, đâu phải đặt bừa bải mà bắt máy nó tính được đâu? Ngay cả tôi cũng không tính được chứ đừng nói là máy.

Chẳng hạn, lúc đầu bạn đưa thông tin trong cái hàm của bạn chỉ có KCS

Giờ bạn lại đặt cái mã trong bảng tính là KCS-RKL và KCS-NV, "bố bảo" tôi cũng không biết tính như thế nào thì nói gì đến máy móc!
Ok, vậy để sắp xếp lại mã chức vụ.
 
Upvote 0
Ok, vậy để sắp xếp lại mã chức vụ.

Thêm nữa là dấu gạch nối (-) và dấu gạch đích (_) trong mã của bạn, phải thống nhất 1 thôi, theo tôi là dấu gạch nối (-), như thế mới có thể tạo thành quy luật từ đó hàm mới dựa vào quy luật để tính vào. Bạn đặt mã tôi thấy manh mún quá chừng!
 
Upvote 0
Thành thật khuyên 2 bạn Nghĩa & Duy nên dừng lại;
Chuyển sang xây dựng lại CSDL, như nó đáng fải có
 
Upvote 0
Thành thật khuyên 2 bạn Nghĩa & Duy nên dừng lại;
Chuyển sang xây dựng lại CSDL, như nó đáng fải có

Theo bác Sa thì xây dựng CSDL thì sẽ như thế nào? Đây là HÀM mà? Và cái bảng nhỏ đó là nguồn để hàm dựa vào dữ kiện mà tính toán thôi, chứ xây dựng một CSDL cho hàm là như thế nào nhỉ?
 
Upvote 0
Tiền bù không tự chạy

Theo bác Sa thì xây dựng CSDL thì sẽ như thế nào? Đây là HÀM mà? Và cái bảng nhỏ đó là nguồn để hàm dựa vào dữ kiện mà tính toán thôi, chứ xây dựng một CSDL cho hàm là như thế nào nhỉ?
Anh cho em hỏi thêm nhe.

Khi em thay đổi sô tiền bên BANG_TRA. Thì bên cột bù lương số tiền bù nó không tự thay đổi. Em phải kéo công thức lại thì nó mới hiện ra kết quả mới. Nếu không thì vân là kết quả cũ.
Thank anh!
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom