Giúp em lập trình trong chuyển xếp lương

  • Thread starter Thread starter binhnha
  • Ngày gửi Ngày gửi
Liên hệ QC

binhnha

Thành viên mới
Tham gia
14/11/07
Bài viết
12
Được thích
1
em muốn lập trình trong excel để giải quyết chuyển xếp lương, các bác cao thủ giúp em với.
___________________

Sao bạn post bài trong box thư giãn?
ptm0412
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
em ghi rõ yêu cầu trong file đính kèm rồi tại dòng 1 của sheet KT-TQ-TV, bác đọc lại đi rồi có gì trao đổi lại với em nha. Em cảm ơn bác ptm0412 nhiều nhiều, tại hôm trước em đọc hướng dẫn post bài nhưng hình ảnh bị lỗi nên em post bừa. Khi nào bác hướng dẫn em post bài nha
 
Lần chỉnh sửa cuối:
Upvote 0
Chuyển lương

Để mọi người nhanh chóng giúp bạn thì :
1. Cắt bớt bảng tính để còn vài ba người.
2. Cắt bớt bảng lương chỉ còn 2 mã ngạch (cũ và mới).
3. Nói rõ nguyên tắc, ví dụ như: chuyển lên hệ số lương liền kề, như chênh lệch hệ số từ bằng đến nhỏ hơn 70% thì nâng lương lần sau tính theo ngày cũ, còn 70% trở lên thì tính theo ngày mới ...
 
Upvote 0
em sửa lại file và rút bớt yêu cầu đi để bài toán đơn giản hơn. Các bác quan tâm giúp em nhé
 

File đính kèm

Upvote 0
Hàm tự tạo để cho ta bậc mới hay hệ số lương mới đây, xin mời!

PHP:
Option Explicit
Function NangLuong(HSL As Double, BLuong As Range, NgachMoi As String, _
          Optional BacMoi As Boolean = True)
1 Dim Rng As Range, sRng As Range, Clls As Range
 
 Set Rng = BLuong.Cells(1, 1).Resize(BLuong.Rows.Count)
3 Set sRng = Rng.Find(NgachMoi, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
5   For Each Clls In sRng.Offset(, 1).Resize(, BLuong.Columns.Count)
      If BacMoi Then
7         If Clls.Value > HSL Then
            NangLuong = Clls.Column - 1:           Exit For
9         End If
      Else
11         If Clls.Value > HSL Then
            NangLuong = Clls.Value:                Exit For
13         End If
      End If
15   Next Clls
 Else
17   MsgBox "Nothing"
 End If
End Function

Xem thêm trong file kèm theo!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
file của bác SA-DQ rất đúng ý của em. Em xin cảm ơn các bác đã quan tâm giúp em. Nhưng bác SA-DQ ơi sao bác kô chú thích dòng lệnh để ít nhất là em có thể học hỏi.
 
Upvote 0
file của bác SA-DQ rất đúng ý của em. Em xin cảm ơn các bác đã quan tâm giúp em. Nhưng bác SA-DQ ơi sao bác kô chú thích dòng lệnh để ít nhất là em có thể học hỏi.

Biết bạn ngứa bao giờ đâu mà gãy:
PHP:
 Function NangLuong(HSL As Double, BLuong As Range, NgachMoi As String, _ 
          Optional BacMoi As Boolean = True)
Hàm có tên là NangLuong, Nó cần được cung cấp 4 tham biến, HSL: Hệ số lương đang hưởng; BLuong: là bảng vùng tra lương đã được gán tên; NgachMoi: là ngạch lương sẽ xếp & tham biến tùy chọn nếu bỏ qua tham biến này, nó sẽ trả về Bậc lương mới sẽ xếp, còn ngược lại sẽ cung cấp HSL mới
D1 Khai báo các biền cần dùng
D2: Lấy cột đầu của bảng tra đã gán tên đem gán vô biến kiểu vùng đã khai báo;
D3 Tìm ô nào đó thuộc Rng có trị bằng với NgạchMới thì gán vô biến thứ 2 đã khai báo (sRng) (Xem thêm phương thức tìm kiếm cũng nên lắm, khi rỗi)
D4 Nếu tìm thây thì thực hiện các lệnh sau cho đến dòng 15
(Không tìm thấy thì thự thi dòng 17
D5 Tạo vòng lặp cho đến dòng lệnh 15 để duyệt toàn bô các ô cùng hàng về phía phải của ô mới tìm thây
D6 Nếu ta cung cấp tham số BacMoi thì thực hiện các lệnh đến trước dòng 10
D7 Trong quá trình duyệt các ô như dòng lệnh D5 trên; nếu thấy trị trong ô > trị số HSL mà ta cung cấp thì thực thi D8
D8: Trả về trị lâ mã cột của ô đang khảo sát & phần sau của dòng lệnh: Kết thúc hàm (Bằng cách kết thúc trước hạn vòng lặp nêu trên)
D9 Kết thúc điều kiện đúng
D10 Bắt đầu điều kiện không đúng (Có nghĩa chúng ta cần HSL chứ không cần bậc lương)
D11 Nếu giá trị trong ô đang khảo sát> HSL thì thực hiện dòng tiếp sau
D12 (Tương tợ như D8, nhưng trả về là trị trong ô đang khảo cứu thay cho mã cột như D8)
D13 Kết thúc điều kiện khảo sát
D14: Kết thúc điều kiện cung cấp tham số tùy chọn;
D15 Kết thúc vòng lặp
D16: Bắt đâu của điều kiện không thỏa (Do tìm không thấy)
D17 Hiện thông báo không thấy "Nothing" (Để đề phòng trong trường hợp say xỉn nhập bậy bạ đó mà!)
. . . .(Từ tìm hiểu)

Rất mong giúp ích được cho bạn!

Thân ái
 
Upvote 0
bài viết của bác ChanhTQ rất hữu ích, nhưng em còn một chút yêu cầu nho nhỏ của bài toán nữa nhờ các bác giúp. Trước đây em có đưa vào nhưng bác khieukienag đề nghị rút bớt đi cho đơn giản, giờ em đưa vào các bác giúp em.
 

File đính kèm

Upvote 0
Bạn thử xài hàm tự tạo sau

Em còn một chút yêu cầu nho nhỏ của bài toán nữa nhờ các bác giúp. (Trước đây em có đưa vào nhưng bác khieukienag đề nghị rút bớt đi cho đơn giản), giờ em đưa vào các bác giúp em.

(Lưu í: Có thể sãy ra xung đột do định dạng ngày tháng của hệ Mẽo & hệ Pháp)

PHP:
Option Explicit
Function NgayXepLuong(NgachCu As String, HieuHSL As Double, BLuong As Range, _
   DateHuong As Date, DateTuyen As Date) As Date
 Dim sRng As Range, Rng As Range
 
 Set Rng = BLuong.Cells(1, 1).Resize(BLuong.Rows.Count)
 Set sRng = Rng.Find(NgachCu, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
   If HieuHSL >= sRng.Offset(, 14).Value Then
      NgayXepLuong = DateTuyen
   Else
      NgayXepLuong = DateHuong
   End If
 End If
 NgayXepLuong = Format(NgayXepLuong, "dd/mm/yyyy")
End Function

Cú pháp hàm tại ô O6 là =NgayXepLuong(E6, L6-G6, BLuong, H6, I6)
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thanks bac HYen1 nhiều nhiều. Sau đợt này chắc em phải học lại VB quá. Tại học chưa cẩn thận nên kô biết truyền đạt ý của mình qua câu lệnh nên lệnh sai tùm lum ah
 
Upvote 0
Web KT

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

Back
Top Bottom