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 (2 người xem)

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

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

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:
Nhờ các bạn giải thích và sửa giúp mình đoạn code sau:

Mình có được một bạn làm giúp cho một đoạn code sau:
Public Sub XUBULU()
Dim sArr(), Darr(), I As Long, J As Long, N As Long, Vtr As Long, Num As Long, DK As Long
sArr = Range([A1], [A1].End(xlDown)).Resize(, 22).Value
ReDim Darr(1 To UBound(sArr, 1), 1 To 2)
For I = 1 To UBound(sArr, 1) - 1
DK = sArr(I, 1)
For N = I + 1 To UBound(sArr, 1)
For J = 6 To 22
If sArr(N, J) = DK Then
Darr(I, 1) = N - I: Darr(I, 2) = Darr(I, 2) + 1
End If
Next J
If Darr(I, 1) > 0 Then Exit For
Next N
Next I
[C1].Resize(I - 1, 2).Value = Darr
End Sub
Nhưng bây giờ mình muốn hoàn thiện hơn. Thay vì so sánh 1 cell A1 mình muốn so sánh cả 1 mảng A1:B1
Rẩt mong được các bạn giúp mình.
 

File đính kèm

Upvote 0
các bác giúp e với, e đang tập tành lập trình mà sao cứ lỗi ạ, tìm mãi ko ra lỗi

Function asct(Rb, Rs, A, N, ra, r, delta, eo, nguy) As Double

'Don vi vao T, cm
'Don vi tinh T, cm
Dim Rb, Rs As Double
Dim N, Ngh, nguy, eo, A, r, ra, phis, phi, phia, Zs As Double
Dim Ast, txi, delta, deltaphi As Double
Const Pi = 3.14159
phia = 2.5 * N * 10 ^ 4 / (A * 100 * Rb)
deltaphi = 1
Do
deltaphi = deltaphi + 1
phi = phia + deltaphi / 1000
txi = phia / Pi
If txi > 0.15 Then
phis = 1 - delta * txi
If phis < 0 Then phis = 0
End If
Zs = (0.2 + 1.3 * txi) * ra
Else
phis = 1 - delta * 0.15
If phis < 0 Then phis = 0
End If
Zs = (0.2 + 1.3 * 0.15) * ra
End If
Ast = (N * 10 ^ 4 * nguy * eo - 2 / (3 * Pi) * Rb * 10 ^ 2 * A * r * Sin(phi) ^ 3) / (1 / Pi * Rs * 10 ^ 2 * ra * Sin(phi) + Rs * 10 ^ 2 * phis * Zs)
Ngh = (Rb * 10 ^ 2 * A / Pi * (phi - 0.5 * Sin(2 * phi)) + Rs * 10 ^ 2 * Ast / Pi * phi - Rs * 10 ^ 2 * Ast * phis) / 10000
Loop Until Ngh = N
asct = Ast
End Function
không hiểu sai ở đâu, các bác cao thủ chỉ e với! thanks
 
Upvote 0
Function asct(Rb, Rs, A, N, ra, r, delta, eo, nguy) As Double

'Don vi vao T, cm
'Don vi tinh T, cm
Dim Rb, Rs As Double
Dim N, Ngh, nguy, eo, A, r, ra, phis, phi, phia, Zs As Double
Dim Ast, txi, delta, deltaphi As Double
Const Pi = 3.14159
phia = 2.5 * N * 10 ^ 4 / (A * 100 * Rb)
deltaphi = 1
Do
deltaphi = deltaphi + 1
phi = phia + deltaphi / 1000
txi = phia / Pi
If txi > 0.15 Then
phis = 1 - delta * txi
If phis < 0 Then phis = 0
End If
Zs = (0.2 + 1.3 * txi) * ra
Else
phis = 1 - delta * 0.15
If phis < 0 Then phis = 0
End If
Zs = (0.2 + 1.3 * 0.15) * ra
End If
Ast = (N * 10 ^ 4 * nguy * eo - 2 / (3 * Pi) * Rb * 10 ^ 2 * A * r * Sin(phi) ^ 3) / (1 / Pi * Rs * 10 ^ 2 * ra * Sin(phi) + Rs * 10 ^ 2 * phis * Zs)
Ngh = (Rb * 10 ^ 2 * A / Pi * (phi - 0.5 * Sin(2 * phi)) + Rs * 10 ^ 2 * Ast / Pi * phi - Rs * 10 ^ 2 * Ast * phis) / 10000
Loop Until Ngh = N
asct = Ast
End Function
không hiểu sai ở đâu, các bác cao thủ chỉ e với! thanks

chưa test nhưng xem qua đã thấy 2 câu này không ổn :
Đã khai báo biến ở Funciton
PHP:
Function asct(Rb, Rs, A, N, ra, r, delta, eo, nguy) As Double
? sao lại khai báo ở Dim làm gì nữa nhj
PHP:
Dim N, Ngh, nguy, eo, A, r, ra, phis, phi, phia, Zs As Double
 
Upvote 0
Function asct(Rb, Rs, A, N, ra, r, delta, eo, nguy) As Double

'Don vi vao T, cm
'Don vi tinh T, cm
Dim Rb, Rs As Double
Dim N, Ngh, nguy, eo, A, r, ra, phis, phi, phia, Zs As Double
Dim Ast, txi, delta, deltaphi As Double
Const Pi = 3.14159
phia = 2.5 * N * 10 ^ 4 / (A * 100 * Rb)
deltaphi = 1
Do
deltaphi = deltaphi + 1
phi = phia + deltaphi / 1000
txi = phia / Pi
If txi > 0.15 Then
phis = 1 - delta * txi
If phis < 0 Then phis = 0
End If
Zs = (0.2 + 1.3 * txi) * ra
Else
phis = 1 - delta * 0.15
If phis < 0 Then phis = 0
End If
Zs = (0.2 + 1.3 * 0.15) * ra
End If
Ast = (N * 10 ^ 4 * nguy * eo - 2 / (3 * Pi) * Rb * 10 ^ 2 * A * r * Sin(phi) ^ 3) / (1 / Pi * Rs * 10 ^ 2 * ra * Sin(phi) + Rs * 10 ^ 2 * phis * Zs)
Ngh = (Rb * 10 ^ 2 * A / Pi * (phi - 0.5 * Sin(2 * phi)) + Rs * 10 ^ 2 * Ast / Pi * phi - Rs * 10 ^ 2 * Ast * phis) / 10000
Loop Until Ngh = N
asct = Ast
End Function
không hiểu sai ở đâu, các bác cao thủ chỉ e với! thanks

Sau khi sửa xong các khai báo --> hàm này sẽ chạy với vòng lặp gần như là vô tận ? --> bạn biết tại sao không ?
Mình đoán không nhầm bạn muốn giải phương trình N <= Ngh(Asct) --> tức là bạn muốn tìm giá trị Asct thỏa mãn điều kiện N = Ngh --> nhưng mà hàm Ngh(Asct) phức tạp --> bạn cần giới hạn lại điều kiện N = Ngh
--> gửi thử phương trình tính diện tích cốt thép lên cho mình xem qua<--------- Cái này là cấu kiện chịu nén ah
 
Lần chỉnh sửa cuối:
Upvote 0
Sau khi sửa xong các khai báo --> hàm này sẽ chạy với vòng lặp gần như là vô tận ? --> bạn biết tại sao không ?
Mình đoán không nhầm bạn muốn giải phương trình N <= Ngh(Asct) --> tức là bạn muốn tìm giá trị Asct thỏa mãn điều kiện N = Ngh --> nhưng mà hàm Ngh(Asct) phức tạp --> bạn cần giới hạn lại điều kiện N = Ngh
--> gửi thử phương trình tính diện tích cốt thép lên cho mình xem qua<--------- Cái này là cấu kiện chịu nén ah
đúng bác ạ! đây là cấu kiện chịu nén, tính cột tròn, bác cũng là dân xd ạ, em viết ph theo sách thầy Nguyễn Đình Cống, theo phương pháp gần đúng, cthuc như e lập ý, theo bác thì hướng giải quyết thế nào ạ! tẹo nữa ăn trưa xong e viết rõ cthức cho bác xem!
 
Upvote 0
Sau khi sửa xong các khai báo --> hàm này sẽ chạy với vòng lặp gần như là vô tận ? --> bạn biết tại sao không ?
Mình đoán không nhầm bạn muốn giải phương trình N <= Ngh(Asct) --> tức là bạn muốn tìm giá trị Asct thỏa mãn điều kiện N = Ngh --> nhưng mà hàm Ngh(Asct) phức tạp --> bạn cần giới hạn lại điều kiện N = Ngh
--> gửi thử phương trình tính diện tích cốt thép lên cho mình xem qua<--------- Cái này là cấu kiện chịu nén ah

http://www.mediafire.com/view/?xlt3xgpbd28imza
bác xem hộ e xem giải quyết thế nào ạ! thanks!
 
Upvote 0
http://www.mediafire.com/view/?xlt3xgpbd28imza
bác xem hộ e xem giải quyết thế nào ạ! thanks!
Mình Sửa lại một vài chỗ trong đoạn code của bạn như sau :
[GPECODE=vb]
Function asct(Rb, Rs, A, N, ra, r, delta, eo, nguy) As Double
'Don vi vao T, cm
'Don vi tinh T, cm
Dim Ngh As Double, phis As Double, phi As Double, phia As Double, Zs As Double
Dim Ast As Double, txi As Double, deltaphi As Double
Const Pi = 3.14159
phia = 2.5 * N * 10 ^ 4 / (val(A) * 100 * val(Rb))
deltaphi = 1
Do
deltaphi = deltaphi + 1
phi = phia + deltaphi / 1000
txi = phia / Pi
If txi > 0.15 Then
phis = 1 - val(delta) * txi
If phis < 0 Then phis = 0
Zs = (0.2 + 1.3 * txi) * ra
Else
phis = 1 - val(delta) * 0.15
If phis < 0 Then phis = 0
Zs = (0.2 + 1.3 * 0.15) * val(ra)
End If
Ast = (val(N) * 10 ^ 4 * val(nguy) * val(eo) - 2 / (3 * Pi) * val(Rb) * 10 ^ 2 * val(A) * val(r) * Sin(phi) ^ 3) / _
(1 / Pi * val(Rs) * 10 ^ 2 * val(ra) * Sin(phi) + val(Rs) * 10 ^ 2 * phis * Zs)
Ngh = (val(Rb) * 10 ^ 2 * A / Pi * (phi - 0.5 * Sin(2 * phi)) + val(Rs) * 10 ^ 2 * Ast / _
Pi * phi - val(Rs) * 10 ^ 2 * Ast * phis) / 10000
Loop Until Ngh <= N
asct = Ast
End Function
[/GPECODE]
Bạn chú ý đến cấu trúc Do ........ Loop Until thì Ngh<=N ,
Còn nếu viết Do..............Loop While thì Ngh>=N

Để bảo đảm rằng kết quả tính Diện tích thép cần thiết luôn thoả mãn điều kiện Ngh>=N
 
Upvote 0
Mình Sửa lại một vài chỗ trong đoạn code của bạn như sau :
[GPECODE=vb]
Function asct(Rb, Rs, A, N, ra, r, delta, eo, nguy) As Double
'Don vi vao T, cm
'Don vi tinh T, cm
Dim Ngh As Double, phis As Double, phi As Double, phia As Double, Zs As Double
Dim Ast As Double, txi As Double, deltaphi As Double
Const Pi = 3.14159
phia = 2.5 * N * 10 ^ 4 / (val(A) * 100 * val(Rb))
deltaphi = 1
Do
deltaphi = deltaphi + 1
phi = phia + deltaphi / 1000
txi = phia / Pi
If txi > 0.15 Then
phis = 1 - val(delta) * txi
If phis < 0 Then phis = 0
Zs = (0.2 + 1.3 * txi) * ra
Else
phis = 1 - val(delta) * 0.15
If phis < 0 Then phis = 0
Zs = (0.2 + 1.3 * 0.15) * val(ra)
End If
Ast = (val(N) * 10 ^ 4 * val(nguy) * val(eo) - 2 / (3 * Pi) * val(Rb) * 10 ^ 2 * val(A) * val(r) * Sin(phi) ^ 3) / _
(1 / Pi * val(Rs) * 10 ^ 2 * val(ra) * Sin(phi) + val(Rs) * 10 ^ 2 * phis * Zs)
Ngh = (val(Rb) * 10 ^ 2 * A / Pi * (phi - 0.5 * Sin(2 * phi)) + val(Rs) * 10 ^ 2 * Ast / _
Pi * phi - val(Rs) * 10 ^ 2 * Ast * phis) / 10000
Loop Until Ngh <= N
asct = Ast
End Function
[/GPECODE]
Bạn chú ý đến cấu trúc Do ........ Loop Until thì Ngh<=N ,
Còn nếu viết Do..............Loop While thì Ngh>=N

Để bảo đảm rằng kết quả tính Diện tích thép cần thiết luôn thoả mãn điều kiện Ngh>=N

ôi, cám ơn bác nhìu nhìu ạ! à bác cho e hỏi 1 câu chắc là rất ngớ ngẩn, vì e mới tập tành nên chưa hiểu cái hàm val() có ý nghĩa là gì ạ! :((
 
Upvote 0
ôi, cám ơn bác nhìu nhìu ạ! à bác cho e hỏi 1 câu chắc là rất ngớ ngẩn, vì e mới tập tành nên chưa hiểu cái hàm val() có ý nghĩa là gì ạ! :((

Val() bạn có thể hiểu nó gần như hàm Value trong excel --->Bạn có thể tìm hiểu tài liệu về VBA trên diễn đàn
Vì các giá trị Rs, Ra... bạn khai báo là Variant --> nên mình cẩn thận thêm val() đề phòng trường hợp bạn gõ công thức như sau = asct(Rs,Ra,..deta*10...) --> có thể hàm sẽ báo lỗi value!
 
Upvote 0
Vấn đề Vba mong được mọi người giúp đỡ.

Tình hình là em muốn viết code để báo khi trong một cột có giá trị # những giá trị còn lại.
ví dụ em có dữ liệu ô A1 đến ô A5 nếu A1 đến A5 bằng nhau thì cho kết quả đúng ngược lại thì sai. Em thử viết đại if A1=A2=A3=A4=A5,true,false thì không được hi. Rất mong được mọi ngươi giúp đỡ. em cảm ơn nhiều ạk!
 

File đính kèm

Upvote 0
Tình hình là em muốn viết code để báo khi trong một cột có giá trị # những giá trị còn lại.
ví dụ em có dữ liệu ô A1 đến ô A5 nếu A1 đến A5 bằng nhau thì cho kết quả đúng ngược lại thì sai. Em thử viết đại if A1=A2=A3=A4=A5,true,false thì không được hi. Rất mong được mọi ngươi giúp đỡ. em cảm ơn nhiều ạk!
Bạn cần mô tả kỹ hơn 1 chút vấn đề như sau:
1/ Cho kết quả "đúng", "sai" => vị trí hiển thị ở đâu?
2/ Quá trình so sánh là ngay khi nhập dữ liệu hay như thế nào?
3/ Viết Code rồi bạn có thể tự tùy biến được hay không? Nếu không tùy biến được thì bạn đưa File thực lên nhé!
 
Upvote 0
1. ...........
If [A1].Value = [A2].Value = [A3].Value = [A4].Value = [A5].Value Then
MsgBox "kiem tra lai"
End sub
End If
dạ em cần so sánh thế này ạ
2. so sánh khi em chạy macro
3. em tùy biến cho phù hợp được anh
 
Upvote 0
Bạn tuỳ biến nhé
Mã:
Sub CheckUnique()
Dim i As Long
    For i = 1 To [A3:A7].Count
        If Cells(i, 1).Value - Cells(i + 1, 1).Value > 0 Then
            MsgBox "Kiem tra lai"
        End If
    Next
End Sub
 
Upvote 0
Tình hình là em muốn viết code để báo khi trong một cột có giá trị # những giá trị còn lại.
ví dụ em có dữ liệu ô A1 đến ô A5 nếu A1 đến A5 bằng nhau thì cho kết quả đúng ngược lại thì sai. Em thử viết đại if A1=A2=A3=A4=A5,true,false thì không được hi. Rất mong được mọi ngươi giúp đỡ. em cảm ơn nhiều ạk!

Với công thức thì ta dùng hàm AND

= And(A1=A2, A2=A3,A3=A4, A4=A5)


trong VBA thì biểu thức với toán tử And, viết thành

PHP:
 [A1]=[A2] And [A2]=[A3] And [A3=[A4] And [A4]=[A5]

VD viết thành câu lệnh IF trong VBA

PHP:
If  [A1]=[A2] And [A2]=[A3] And [A3=[A4] And [A4]=[A5] Then
    MsgBox "Cac cells A1=A2=A3=A4=A5"
Else
    MsgBox "Cac cells  A1,A2,A3,A4,A5 KHONG bang nhau"
End If

thế thui, giản đơn vậy
 
Lần chỉnh sửa cuối:
Upvote 0
@vodoi2x thank anh nhưng em nghĩ câu lệnh dài dòng hơn cách dùng for next khi số dòng nhiều
 
Upvote 0
@vodoi2x thank anh nhưng em nghĩ câu lệnh dài dòng hơn cách dùng for next khi số dòng nhiều

Dĩ nhiên, tôi chỉ là ví dụ (bạn đưa ví dụ cũng chỉ có 6 cells mà) để hiểu bản chất vấn đề, thế thui

Dùng For Next thì cũng nên dùng toán tử And, hoặc nhanh hơn nữa là toán tử Or

Túm lại viết code thì còn tùy thuộc bài cụ thể, vậy bạn biến hóa đi nhé,
 
Upvote 0
Góp ý với bạn:
1/ Bạn cần chú ý tới nội quy. Tên topic đang sai với quy chuẩn của GPE.
2/ Bạn dành nhiều thời gian hơn nghiên cứu rồi chúng ta thảo luận tiếp nhé!
 
Upvote 0
em nghĩ câu lệnh dài dòng hơn cách dùng for next khi số dòng nhiều
Giả sử dữ liệu của bạn bắt đầu từ ô A1 và dài đến A(n), chạy thử code này
PHP:
Sub sosanh()
Dim data(), i, k
data = Range([A1], [A65536].End(3)).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      If Not .exists(data(i, 1)) Then
         k = k + 1
         .Add data(i, 1), ""
      End If
      If k > 1 Then Exit For
   Next
End With
If k > 1 Then MsgBox "Du lieu khac nhau tai cell " & i
If k = 1 Then MsgBox "Không có du lieu khac nhau"
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Giả sử dữ liệu của bạn bắt đầu từ ô A1 và dài đến A(n), chạy thử code này
PHP:
Sub sosanh()
Dim data(), i, k
data = Range([A1], [A65536].End(3)).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      If Not .exists(data(i, 1)) Then
         k = k + 1
         .Add data(i, 1), ""
      End If
      If k > 1 Then Exit For
   Next
End With
If k > 1 Then MsgBox "Du lieu khac nhau tai cell " & i
If k = 1 Then MsgBox "Không có du lieu khac nhau"
End Sub
Gì mà phải đít to, ghê vậy
- Lấy giá trị đầu tiên làm mẫu
- So sánh mẫu với tất cả (vòng lập). Nếu có khác biệt, thoát vòng lập
Vậy thôi
 
Upvote 0
Giải đáp hộ em ý nghĩa của cái code này với ạ!

Em đang gặp thắc mắc với cái code này ạ. Ai hiểu cái code này như thế nào thì giải thích cho em với ạ. Em xin cám ơn ạ.


Function mahoauni1(s As Variant)
Dim x, Sb, k, mu, skdau, sdau, Bdau, Bkdau As String
Dim i, m, n, dau, idau, ikdau As Integer

If IsNull(s) Then
Exit Function
ElseIf IsNumeric(s) Then
Sb = s
Else
s = Trim(s)
s = LCase(s) & ChrW(32)

skdau = ChrW(259) & ChrW(234) & ChrW(244) & ChrW(432) & ChrW(273) & ChrW(226) & ChrW(417)
Bkdau = "aeoudao"

sdau = ChrW(225) & ChrW(224) & ChrW(7843) & ChrW(227) & ChrW(7841) _
& ChrW(233) & ChrW(232) & ChrW(7867) & ChrW(7869) & ChrW(7865) _
& ChrW(237) & ChrW(236) & ChrW(7881) & ChrW(297) & ChrW(7883) _
& ChrW(243) & ChrW(242) & ChrW(7887) & ChrW(245) & ChrW(7885) _
& ChrW(250) & ChrW(249) & ChrW(7911) & ChrW(361) & ChrW(7909) _
& ChrW(253) & ChrW(7923) & ChrW(7927) & ChrW(7929) & ChrW(7925) _
& ChrW(7855) & ChrW(7857) & ChrW(7859) & ChrW(7861) & ChrW(7863) _
& ChrW(7889) & ChrW(7891) & ChrW(7893) & ChrW(7895) & ChrW(7897) _
& ChrW(7871) & ChrW(7873) & ChrW(7875) & ChrW(7877) & ChrW(7879) _
& ChrW(7913) & ChrW(7915) & ChrW(7917) & ChrW(7919) & ChrW(7921) _
& ChrW(7845) & ChrW(7847) & ChrW(7849) & ChrW(7851) & ChrW(7853) _
& ChrW(7899) & ChrW(7901) & ChrW(7903) & ChrW(7905) & ChrW(7907)
Bdau = "aaaaaeeeeeiiiiiooooouuuuuyyyyyaaaaaoooooeeeeeuuuuuaaaaaooooo"

For m = 1 To Len(s)
k = Mid(s, m, 1)
idau = InStr(1, sdau, k, 0)
ikdau = InStr(1, skdau, k, 0)
If idau > 0 Then
k = Mid(Bdau, idau, 1)
dau = idau Mod 5

If dau = 0 Then
dau = 5
End If


If idau > 0 And idau < 31 Then
mu = ""
ElseIf idau > 30 And idau < 51 Then
mu = "z"
Else
mu = "zw"
End If

k = k & mu

ElseIf ikdau > 0 Then
k = Mid(Bkdau, ikdau, 1)
If ikdau < 6 Then
k = k & "z"
Else
k = k & "zw"
End If
ElseIf k = ChrW(32) Then
k = dau & ChrW(32)
dau = ""
End If

x = x & k
Next
Sb = Sb & x
End If
mahoauni1 = Sb
End Function
 

File đính kèm

Upvote 0
Ý nghĩa là chuyển chuỗi sang Unicode đó bạn--=0
 
Upvote 0
Dây là đoạn code mã hóa từ font unicode sang bảng ký tự "chết tiệt":

Thí dụ:
A1 = "Trả lời gì kỳ thế"
B1 =mahoauni1(A1)

Kết quả B1 = "tra3 lozwi2 gi2 ky2 thez1"
 
Upvote 0
Có ai biết chữ "đ' ở đây được mã hóa như thế nào không ạ
 
Upvote 0
Bdau = "aaaaaeeeeeiiiiiooooouuuuuyyyyyaaaaaoooooeeeeeuuuu uaaaaaooooo" em không hiểu chỗ này ạ.

Nếu bạn chưa từng biết hoặc mới tập tành về VBA thì có giải thích cho bạn cái Hàm này bạn cũng chẳng biết mô tê gì cả.

Với cái bạn ghi ở trên là một BIẾN và biến này thuộc STRING DATA TYPE, nói nôm na là biến dữ liệu dạng chuỗi, với chuỗi trong biến này sẽ được hàm MID xử lý chuỗi tương ứng theo chuỗi đầu vào, nhằm để thay thế chuỗi đầu ra.

Tôi chỉ nói tới đây thôi, vì có nói dài bạn cũng khó hiểu.
 
Upvote 0
Bạn thử sẽ biết. Thử như tôi thử bài trên ấy

Em biết là chữ "đ" thì sẽ mã hóa thành "dz" nhưng em không biết cái mã kiểu như ChrW(XXX) của nó là gì ạ. em chỉ cần biết cái XXX của chữ đ thôi ạ. Cảm ưn mọi người. Em mới tìm hiểu có gì mọi người thông cảm nhá
 
Upvote 0
Em biết là chữ "đ" thì sẽ mã hóa thành "dz" nhưng em không biết cái mã kiểu như ChrW(XXX) của nó là gì ạ. em chỉ cần biết cái XXX của chữ đ thôi ạ. Cảm ưn mọi người. Em mới tìm hiểu có gì mọi người thông cảm nhá
Bạn làm như sau:
- Gõ chử đ lên cell A1
- Alt + F11 để mở cửa số lập trình
- Ctrl + G để mở cửa sổ Immediate
- Trong cửa số Immediate, gõ dòng lệnh ?AscW(Range("A1").Value) rồi Enter
- Kết quả sẽ hiện ra ngay bên dưới
 
Upvote 0
Giải thích code

Dear Các sư phụ
Em làm vận tải vừa rồi mới đc tặng 1 đoạn code dùng để check số cont của các hãng tàu mà em không thể hiểu được đoạn code viết gì. mong các sư phụ giải quyết giúp em ah.

Public Function ckcont(strsocont As String) As String
Dim aryvitri(10) As Integer
Dim sokt As Integer
Dim tongso As Integer, noisocont As String
Dim i As Integer
If Len(Trim(strsocont)) = 0 Then
ckcont = "Pls input data"
ElseIf Len(Trim(strsocont)) <> 11 Then
ckcont = " eRrO ? "
Else
aryvitri(10) = Asc(Mid$(Trim(UCase$(strsocont)), 11, 1)) - 48
For i = 0 To 9
aryvitri(i) = Asc(Mid$(UCase$(strsocont), i + 1, 1)) - 55


If aryvitri(i) >= -7 And aryvitri(i) <= 2 Then
aryvitri(i) = aryvitri(i) + 7
ElseIf aryvitri(i) = 10 Then
aryvitri(i) = 10
ElseIf aryvitri(i) >= 11 And aryvitri(i) <= 20 Then
aryvitri(i) = aryvitri(i) + 1
ElseIf aryvitri(i) >= 21 And aryvitri(i) <= 30 Then
aryvitri(i) = aryvitri(i) + 2
ElseIf aryvitri(i) >= 31 And aryvitri(i) <= 38 Then
aryvitri(i) = aryvitri(i) + 3
End If
tongso = tongso + 2 ^ i * aryvitri(i)
Next i
sokt = tongso - Int(tongso / 11) * 11
If sokt = 10 Then
sokt = 0
End If
If sokt <> aryvitri(10) Then
ckcont = "oRRoR"
Else
ckcont = " oK "
End If
End If
End Function
 
Upvote 0
nhờ diễn đàn giải thich dùm code

Mình có 1 đoạn code do mình không chuyên nên không hiểu đc mong mọi nguòi giúp đỡ
Code:
Mong các bạn giúp đỡ
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có 1 đoạn code do mình không chuyên nên không hiểu đc mong mọi nguòi giúp đỡ
Code:
Private Sub auto_open()
Dim makt1 As String, s1 As String, v As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objItem In colItems
pro = pro & objItem.ProcessorId
Next
m_pro = Len(pro)
Do Until m_pro = 0
textghi = Mid(pro, m_pro, 1)
textghi = Asc(textghi)
textghi = Val(textghi) * 3
check = check & textghi
m_pro = m_pro - 1
Loop
If Len(Dir("d:\dt_xlct\KTS.txt", vbHidden)) > 1 Then
Open "d:\dt_xlct\KTS.txt" For Input As #1
Do While Not EOF(1)
makt1 = makt1 & Input(1, #1)
Loop
Close
If makt1 = check Then
source = ThisWorkbook.Path
ChDrive Left(source, 2)
ChDir source
Let Application.Caption = ""
If Len(Dir("xlct.xla", vbHidden)) > 1 Then
Workbooks.Open Filename:="xlct.xla"
Else
MsgBoxUni UNC("TÖp M· nguån cña b¹n ®· bÞ h­ hoÆc mÊt "), , UNC("X©y l¾p CT ")
Application.DisplayAlerts = False
Application.Quit
End If
Else
Application.DisplayAlerts = False
Application.Quit
End If
Else
Application.DisplayAlerts = False
MsgBoxUni UNC("B¹n ®õng cè g¾ng n÷a! B¹n bÊm sè 113 ®Ó ®­îc sù hç trî cña T¸c gi¶."), , UNC("X©y l¾p CT ")
Application.Quit
End If
Main.Show
End Sub
Private Sub auto_close()
Application.DisplayAlerts = False
ThisWorkbook.Close savechanges:=False
End Sub

Các bạn giúp mình tạo file KTS.txt có nội dung mà code trên đưa ra
file tạo tệp tham khảo:

Attribute VBA_ModuleType=VBAModule
an
Dim fs, objWMIService, colItems, objItem, s3 As String, s4 As String, tep1
Set fs = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
SetAttr "d:\DQT_XLCT\vn12.txt", vbArchive
For Each objItem In colItems
s3 = objItem.ProcessorId
Rem Set tep1 = fs.CreateTextFile("d:\DQT_XLCT\vn12.txt", True)
tep1.Write (s4)
tep1.Close
Next
SetAttr "d:\DQT_XLCT\vn12.txt", vbHidden + vbReadOnly
Application.Quit
End Sub

Mong các bạn giúp đỡ
Bạn muốn tính dự toán hay dự thầu, bạn hãy liên hệ với mình, mình sẽ tặng bạn một chương trình để tính, thà vậy còn hơn là giúp bạn bẻ khóa của người khác tại nơi công cộng.
 
Upvote 0
Giúp em rút gọn code này lại với

[GPECODE=vb] Function Bulg(chucvu As String, ngaycong As Double, tongluong As Double)
d_luongBQ = tongluong / ngaycong
'=============================================
If (chucvu <> "" And d_luongBQ > 0) Then
If (Left(chucvu, 3) = "BÑH" And d_luongBQ < (Range("BÑH"))) Then
Bulg = (Range("BÑH") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 3) = "KCS" And d_luongBQ < (Range("KCS"))) Then
Bulg = (Range("KCS") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "MH") And Right(chucvu, 2) = "QC" And d_luongBQ < (Range("KCS")) Then
Bulg = (Range("MH_QC") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "MH") And Right(chucvu, 2) <> "QC" Then
Bulg = (Range("MH_TK") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "TK") And Right(chucvu, 2) = "TT" Then
Bulg = (Range("TKE_TT") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "TK") And Right(chucvu, 2) = "TP" Then
Bulg = (Range("TKE_Tp") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "TK") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
Bulg = (Range("TKE_TV") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "CN") And Right(chucvu, 2) = "TT" Then
Bulg = (Range("CN_TT") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "CN") And Right(chucvu, 2) = "TP" Then
Bulg = (Range("CN_TP") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "CN") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
Bulg = (Range("CN_TV") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "PC") And Right(chucvu, 2) = "TT" Then
Bulg = (Range("PC_TT") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "PC") And Right(chucvu, 2) = "TP" Then
Bulg = (Range("PC_TP") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "PC") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
Bulg = (Range("PC_TV") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "XH") And Right(chucvu, 2) = "TT" Then
Bulg = (Range("XH_TT") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "XH") And Right(chucvu, 2) = "TP" Then
Bulg = (Range("XH_TP") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "XH") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
Bulg = (Range("XH_TV") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "CÑ") And Right(chucvu, 2) = "TT" Then
Bulg = (Range("CÑ_TT") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "CÑ") And Right(chucvu, 2) = "TP" Then
Bulg = (Range("CÑ_TP") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "CÑ") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
Bulg = (Range("CÑ_TV") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "PV") And Right(chucvu, 2) = "TT" Then
Bulg = (Range("PV_TT") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "PV") And Right(chucvu, 2) = "TP" Then
Bulg = (Range("PV_TP") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "PV") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
Bulg = (Range("PV_TV") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "BX") And Right(chucvu, 2) = "TT" Then
Bulg = (Range("BX_TT") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "BX") And Right(chucvu, 2) = "TP" Then
Bulg = (Range("BX_TP") - d_luongBQ) * ngaycong
ElseIf (Left(chucvu, 2) = "BX") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
Bulg = (Range("BX_TV") - d_luongBQ) * ngaycong
End If
End If
End Function [/GPECODE]


Em tự viết mà nó dai dòng quá, nhờ các anh / chị giúp em rút gọn lại.
Trân trong cảm ơn!



Nếu tiền lương BQ / ngày > tiền lương qui định thì = 0
Ngược lại thì tiền lương theo qui định - tiền lương bình quân ngày * ngày công
 
Lần chỉnh sửa cuối:
Upvote 0
Function Bulg(chucvu As String, ngaycong As Double, tongluong As Double)
d_luongBQ = tongluong / ngaycong
Em tự viết mà nó dai dòng quá, nhờ các anh / chị giúp em rút gọn lại.
Trân trong cảm ơn!
Nếu tiền lương BQ / ngày > tiền lương qui định thì = 0
Ngược lại thì tiền lương theo qui định - tiền lương bình quân ngày * ngày công
Trước khi giúp bạn --> bạn có thể giúp mình thể hiện đoạn code trên theo hình " răng cưa " cho dễ nhìn không ?
 
Upvote 0
Trước khi giúp bạn --> bạn có thể giúp mình thể hiện đoạn code trên theo hình " răng cưa " cho dễ nhìn không ?

Bạn này khó tính quá ta! Quan trọng là thủ tục chạy chứ cách trình bày đâu nè! Đây tôi đã làm dùm bạn đó rồi, và lưu ý, có sử dụng Font VNI đó nhé!

Mã:
Function Bulg(chucvu As String, ngaycong As Double, tongluong As Double)
    d_luongBQ = tongluong / ngaycong
    '=============================================
    If (chucvu <> "" And d_luongBQ > 0) Then
        If (Left(chucvu, 3) = "BÑH" And d_luongBQ < (Range("BÑH"))) Then
            Bulg = (Range("BÑH") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 3) = "KCS" And d_luongBQ < (Range("KCS"))) Then
            Bulg = (Range("KCS") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "MH") And Right(chucvu, 2) = "QC" And d_luongBQ < (Range("KCS")) Then
            Bulg = (Range("MH_QC") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "MH") And Right(chucvu, 2) <> "QC" Then
            Bulg = (Range("MH_TK") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "TK") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("TKE_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "TK") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("TKE_Tp") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "TK") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("TKE_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CN") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("CN_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CN") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("CN_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CN") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("CN_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PC") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("PC_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PC") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("PC_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PC") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("PC_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "XH") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("XH_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "XH") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("XH_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "XH") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("XH_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CÑ") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("CÑ_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CÑ") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("CÑ_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CÑ") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("CÑ_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PV") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("PV_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PV") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("PV_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PV") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("PV_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "BX") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("BX_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "BX") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("BX_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "BX") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("BX_TV") - d_luongBQ) * ngaycong
        End If
    End If
End Function
 
Upvote 0
Bạn này khó tính quá ta! Quan trọng là thủ tục chạy chứ cách trình bày đâu nè! Đây tôi đã làm dùm bạn đó rồi, và lưu ý, có sử dụng Font VNI đó nhé!

Mã:
Function Bulg(chucvu As String, ngaycong As Double, tongluong As Double)
    d_luongBQ = tongluong / ngaycong
    '=============================================
    If (chucvu <> "" And d_luongBQ > 0) Then
        If (Left(chucvu, 3) = "BÑH" And d_luongBQ < (Range("BÑH"))) Then
            Bulg = (Range("BÑH") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 3) = "KCS" And d_luongBQ < (Range("KCS"))) Then
            Bulg = (Range("KCS") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "MH") And Right(chucvu, 2) = "QC" And d_luongBQ < (Range("KCS")) Then
            Bulg = (Range("MH_QC") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "MH") And Right(chucvu, 2) <> "QC" Then
            Bulg = (Range("MH_TK") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "TK") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("TKE_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "TK") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("TKE_Tp") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "TK") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("TKE_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CN") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("CN_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CN") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("CN_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CN") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("CN_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PC") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("PC_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PC") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("PC_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PC") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("PC_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "XH") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("XH_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "XH") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("XH_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "XH") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("XH_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CÑ") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("CÑ_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CÑ") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("CÑ_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "CÑ") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("CÑ_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PV") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("PV_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PV") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("PV_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "PV") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("PV_TV") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "BX") And Right(chucvu, 2) = "TT" Then
            Bulg = (Range("BX_TT") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "BX") And Right(chucvu, 2) = "TP" Then
            Bulg = (Range("BX_TP") - d_luongBQ) * ngaycong
        ElseIf (Left(chucvu, 2) = "BX") And Right(chucvu, 2) <> "TT" And Right(chucvu, 2) <> "TP" Then
            Bulg = (Range("BX_TV") - d_luongBQ) * ngaycong
        End If
    End If
End Function


Vân chưa có gì thay đổi mà anh
 
Upvote 0
Vân chưa có gì thay đổi mà anh
Đây là anh nghĩa giúp bạn trình bày lại code!
bạn up hẳn file excle lên để tham khảo nào, mà cho hỏi công thức bù lương này dùng hàm trên excel cũng được , sao phải viết code làm chi cho mệt
 
Lần chỉnh sửa cuối:
Upvote 0
Em gởi lại

bạn up hẳn file excle , lên để tham khảo nào, mà cho hỏi công thức bù lương này dùng hàm trên excel cũng được , sao phải viết code làm chi cho mệt


Công thức thì do nó có nhiều điều kiên quá nên em mới dung VBA

Mà ở đây em chỉ qui định mức lương TT, TP, và TV
TV thì các trường hợp không phải là TT, hoặc TP
 

File đính kèm

Upvote 0
Bước đầu nên là vầy: . . . .

PHP:
Option Explicit
Function Bulg(ChucVu As String, NgayCong As Double, TongLuong As Double)
 Dim D_LuongBQ As Double, Rng As Range
 
 If NgayCong <= 0 Then Exit Function  '***'
 D_LuongBQ = TongLuong / NgayCong
'=  =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   ='
If (ChucVu <> "" And D_LuongBQ > 0) Then
    If (Left(ChucVu, 3) = "BÑH" And D_LuongBQ < (Range("BÑH"))) Then
        Set Rng = Range("BÑH")
    
    ElseIf (Left(ChucVu, 3) = "KCS" And D_LuongBQ < (Range("KCS"))) Then
        Set Rng = Range("KCS")
        
    ElseIf (Left(ChucVu, 2) = "MH") And Right(ChucVu, 2) = "QC" And D_LuongBQ < (Range("KCS")) Then
        Set Rng = Range("MH_QC")
    ElseIf (Left(ChucVu, 2) = "MH") And Right(ChucVu, 2) <> "QC" Then
        Set Rng = Range("MH_TK")
    
    ElseIf (Left(ChucVu, 2) = "TK") And Right(ChucVu, 2) = "TT" Then
        Set Rng = Range("TKE_TT")
    ElseIf (Left(ChucVu, 2) = "TK") And Right(ChucVu, 2) = "TP" Then
        Set Rng = Range("TKE_Tp")
    ElseIf (Left(ChucVu, 2) = "TK") And Right(ChucVu, 2) <> "TT" And Right(ChucVu, 2) <> "TP" Then
        Set Rng = Range("TKE_TV")
    
    ElseIf (Left(ChucVu, 2) = "CN") And Right(ChucVu, 2) = "TT" Then
        Set Rng = Range("CN_TT")
    ElseIf (Left(ChucVu, 2) = "CN") And Right(ChucVu, 2) = "TP" Then
        Set Rng = Range("CN_TP")
    ElseIf (Left(ChucVu, 2) = "CN") And Right(ChucVu, 2) <> "TT" And Right(ChucVu, 2) <> "TP" Then
        Set Rng = Range("CN_TV")
    
    ElseIf (Left(ChucVu, 2) = "PC") And Right(ChucVu, 2) = "TT" Then
        Set Rng = Range("PC_TT")
    ElseIf (Left(ChucVu, 2) = "PC") And Right(ChucVu, 2) = "TP" Then
        Set Rng = Range("PC_TP")
    ElseIf (Left(ChucVu, 2) = "PC") And Right(ChucVu, 2) <> "TT" And Right(ChucVu, 2) <> "TP" Then
        Set Rng = Range("PC_TV")
    
    ElseIf (Left(ChucVu, 2) = "XH") And Right(ChucVu, 2) = "TT" Then
        Set Rng = Range("XH_TT")
    ElseIf (Left(ChucVu, 2) = "XH") And Right(ChucVu, 2) = "TP" Then
        Set Rng = Range("XH_TP")
    ElseIf (Left(ChucVu, 2) = "XH") And Right(ChucVu, 2) <> "TT" And Right(ChucVu, 2) <> "TP" Then
        Set Rng = Range("XH_TV")
    
    ElseIf (Left(ChucVu, 2) = "CÑ") And Right(ChucVu, 2) = "TT" Then
        Set Rng = Range("CÑ_TT")
    ElseIf (Left(ChucVu, 2) = "CÑ") And Right(ChucVu, 2) = "TP" Then
        Set Rng = Range("CÑ_TP")
    ElseIf (Left(ChucVu, 2) = "CÑ") And Right(ChucVu, 2) <> "TT" And Right(ChucVu, 2) <> "TP" Then
        Set Rng = Range("CÑ_TV")
    
    ElseIf (Left(ChucVu, 2) = "PV") And Right(ChucVu, 2) = "TT" Then
        Set Rng = Range("PV_TT")
    ElseIf (Left(ChucVu, 2) = "PV") And Right(ChucVu, 2) = "TP" Then
        Set Rng = Range("PV_TP")
    ElseIf (Left(ChucVu, 2) = "PV") And Right(ChucVu, 2) <> "TT" And Right(ChucVu, 2) <> "TP" Then
        Set Rng = Range("PV_TV")
    
    ElseIf (Left(ChucVu, 2) = "BX") And Right(ChucVu, 2) = "TT" Then
        Set Rng = Range("BX_TT")
    ElseIf (Left(ChucVu, 2) = "BX") And Right(ChucVu, 2) = "TP" Then
        Set Rng = Range("BX_TP")
    ElseIf (Left(ChucVu, 2) = "BX") And Right(ChucVu, 2) <> "TT" And Right(ChucVu, 2) <> "TP" Then
        Set Rng = Range("BX_TV")
    End If
    
    'Còn Cau Lenh Nua Xin Dành Cho Ban!'
    
End If
End Function
 
Upvote 0
Vân chưa có gì thay đổi mà anh

Tôi có làm gì trong đó đâu mà nó thay đổi! Giờ mới làm nè:

Mã:
Function Bulg(chucvu As String, ngaycong As Double, tongluong As Double) As Double
    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 LeftChucVu2 As String, LeftChucVu3 As String, RightChucVu As String
        LeftChucVu2 = Left(chucvu, 2)
        LeftChucVu3 = Left(chucvu, 3)
        RightChucVu = Right(chucvu, 2)
    '-----------------------------------------------------------------
    If LeftChucVu3 = "BÑH" And d_luongBQ < Range("BÑH") Then
        Bulg = (Range("BÑH") - d_luongBQ) * ngaycong
    ElseIf LeftChucVu3 = "KCS" And d_luongBQ < Range("KCS") Then
        Bulg = (Range("KCS") - d_luongBQ) * ngaycong
    End If
    Exit Function
    '-----------------------------------------------------------------
    If LeftChucVu2 = "MH" Then
        If RightChucVu = "QC" Then
            If d_luongBQ < Range("KCS") Then
                Bulg = (Range("MH_QC") - d_luongBQ) * ngaycong
            End If
        Else
            Bulg = (Range("MH_TK") - d_luongBQ) * ngaycong
        End If
    End If
    Exit Function
    '-----------------------------------------------------------------
    Select Case RightChucVu
    Case "TT"
        Select Case LeftChucVu2
            Case "TK": Bulg = (Range("TKE_TT") - d_luongBQ) * ngaycong
            Case "CN": Bulg = (Range("CN_TT") - d_luongBQ) * ngaycong
            Case "PC": Bulg = (Range("PC_TT") - d_luongBQ) * ngaycong
            Case "XH": Bulg = (Range("XH_TT") - d_luongBQ) * ngaycong
            Case "CÑ": Bulg = (Range("CÑ_TT") - d_luongBQ) * ngaycong
            Case "PV": Bulg = (Range("PV_TT") - d_luongBQ) * ngaycong
            Case "BX": Bulg = (Range("BX_TT") - d_luongBQ) * ngaycong
        End Select
    Case "TP"
        Select Case LeftChucVu2
            Case "TK": Bulg = (Range("TKE_Tp") - d_luongBQ) * ngaycong
            Case "CN": Bulg = (Range("CN_TP") - d_luongBQ) * ngaycong
            Case "PC": Bulg = (Range("PC_TP") - d_luongBQ) * ngaycong
            Case "XH": Bulg = (Range("XH_TP") - d_luongBQ) * ngaycong
            Case "CÑ": Bulg = (Range("CÑ_TP") - d_luongBQ) * ngaycong
            Case "PV": Bulg = (Range("PV_TP") - d_luongBQ) * ngaycong
            Case "BX": Bulg = (Range("BX_TP") - d_luongBQ) * ngaycong
        End Select
    Case Else
        Select Case LeftChucVu2
            Case "TK": Bulg = (Range("TKE_TV") - d_luongBQ) * ngaycong
            Case "CN": Bulg = (Range("CN_TV") - d_luongBQ) * ngaycong
            Case "PC": Bulg = (Range("PC_TV") - d_luongBQ) * ngaycong
            Case "XH": Bulg = (Range("XH_TV") - d_luongBQ) * ngaycong
            Case "CÑ": Bulg = (Range("CÑ_TV") - d_luongBQ) * ngaycong
            Case "PV": Bulg = (Range("PV_TV") - d_luongBQ) * ngaycong
            Case "BX": Bulg = (Range("BX_TV") - d_luongBQ) * ngaycong
        End Select
    End Select
End Function

Lưu ý: Tôi chỉ làm theo code bạn đưa lên (không phải xem qua cái file) đúng sai ta tính tiếp, nhưng tôi có một chút thắc mắc là tại sao dùng NAME mà gõ dấu tiếng Việt vào làm chi không biết nữa! Chẳng hạn: Range("CÑ_TV")
 
Upvote 0
Cho mình hỏi cách làm răng cưa như thế nào vây?

Bạn hãy cài IndenterVBA.exe và làm theo hướng dẫn tại http://www.giaiphapexcel.com/forum/...-nghị-các-bạn-gửi-vào-đây&p=459998#post459998
Trước đây tôi chưa có Excel 2010 nên nghĩ rằng nó chỉ chạy được với Excel 2003 về trước (như giới thiệu tại đây). Thực ra nó chạy được tuốt với cả Excel 2010.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu mã chức vụ của bạn thực sự khoa học thì chương trình sẽ ngắn gọn đi rất nhiều

Ví dụ:
Ma|Chức vụ|ĐơnVị
GD|Ban Giám đốc|..
TT|Tổ trưởng|Phòng TK
TF|Tổ fó|Phòng TK
TN|Nhân viên|Phòng TK
..|..|
--=0|)(&&@@|:=\+
 
Upvote 0
Ví dụ:
Ma|Chức vụ|ĐơnVị
GD|Ban Giám đốc|..
TT|Tổ trưởng|Phòng TK
TF|Tổ fó|Phòng TK
TN|Nhân viên|Phòng TK
..|..|
--=0|)(&&@@|:=\+
Vậy bạn có thể sắp sếp lại giúp mình với được ko?

Mỗi chức danh theo từng bộ phận có 1 số tiền khác nhau
Lưu ý: Chỉ phân biêt TT và TP. Còn chức danh TV thì có thể không hẳn là TV không mà có thể là RT, hoặc BT hoặc B1,
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy bạn có thể sắp sếp lại giúp mình với được ko?

Mỗi chức danh theo từng bộ phận có 1 số tiền khác nhau
Lưu ý: Chỉ phân biêt TT và TP. Còn chức danh TV thì có thể không hẳn là TV không mà có thể là RT, hoặc BT hoặc B1,

Sao bạn phải khổ sở với công thức , với VBA vậy

sao không dùng VLOOKUP đơn giản

trong file tôi chỉ sửa 3 mã (của Range range gì đó của bạn)

TKE_TT
TKE_TP
TKE_TV

thành

TK_TT
TK_TP
TK_TV

và thấy thiếu mã PC_PV
nên tạm bổ sung ở dòng 35 (Q35,R35 - tạm lấy 120 000) - đã bôi đỏ nhé

sd công thức thôgn thường,

với M10:
=+VLOOKUP(E10,$Q$10:$R$35,2,0)*J10-K10

xoá hết NAME và Module VBA đi cho nhẹ văn khoẻ nhé

túm lại là bạn kiểm tra lại xem đúng mong muốn không, tôi chỉ suy luận theo code của bạn - nên sai đúng bạn là người kiểm tra

down file kèm về sẽ rõ
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi có làm gì trong đó đâu mà nó thay đổi! Giờ mới làm nè:

Mã:
Function Bulg(chucvu As String, ngaycong As Double, tongluong As Double) As Double
    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 LeftChucVu2 As String, LeftChucVu3 As String, RightChucVu As String
        LeftChucVu2 = Left(chucvu, 2)
        LeftChucVu3 = Left(chucvu, 3)
        RightChucVu = Right(chucvu, 2)
    '-----------------------------------------------------------------
    If LeftChucVu3 = "BÑH" And d_luongBQ < Range("BÑH") Then
        Bulg = (Range("BÑH") - d_luongBQ) * ngaycong
    ElseIf LeftChucVu3 = "KCS" And d_luongBQ < Range("KCS") Then
        Bulg = (Range("KCS") - d_luongBQ) * ngaycong
    End If
    Exit Function
    '-----------------------------------------------------------------
    If LeftChucVu2 = "MH" Then
        If RightChucVu = "QC" Then
            If d_luongBQ < [COLOR=#ff0000]Range("KCS")[/COLOR] Then
                Bulg = (Range("MH_QC") - d_luongBQ) * ngaycong
            End If
        Else
            Bulg = (Range("MH_TK") - d_luongBQ) * ngaycong
        End If
    End If
    Exit Function
    '-----------------------------------------------------------------
    Select Case RightChucVu
    Case "TT"
        Select Case LeftChucVu2
            Case "TK": Bulg = (Range("TKE_TT") - d_luongBQ) * ngaycong
            Case "CN": Bulg = (Range("CN_TT") - d_luongBQ) * ngaycong
            Case "PC": Bulg = (Range("PC_TT") - d_luongBQ) * ngaycong
            Case "XH": Bulg = (Range("XH_TT") - d_luongBQ) * ngaycong
            Case "CÑ": Bulg = (Range("CÑ_TT") - d_luongBQ) * ngaycong
            Case "PV": Bulg = (Range("PV_TT") - d_luongBQ) * ngaycong
            Case "BX": Bulg = (Range("BX_TT") - d_luongBQ) * ngaycong
        End Select
    Case "TP"
        Select Case LeftChucVu2
            Case "TK": Bulg = (Range("TKE_Tp") - d_luongBQ) * ngaycong
            Case "CN": Bulg = (Range("CN_TP") - d_luongBQ) * ngaycong
            Case "PC": Bulg = (Range("PC_TP") - d_luongBQ) * ngaycong
            Case "XH": Bulg = (Range("XH_TP") - d_luongBQ) * ngaycong
            Case "CÑ": Bulg = (Range("CÑ_TP") - d_luongBQ) * ngaycong
            Case "PV": Bulg = (Range("PV_TP") - d_luongBQ) * ngaycong
            Case "BX": Bulg = (Range("BX_TP") - d_luongBQ) * ngaycong
        End Select
    Case Else
        Select Case LeftChucVu2
            Case "TK": Bulg = (Range("TKE_TV") - d_luongBQ) * ngaycong
            Case "CN": Bulg = (Range("CN_TV") - d_luongBQ) * ngaycong
            Case "PC": Bulg = (Range("PC_TV") - d_luongBQ) * ngaycong
            Case "XH": Bulg = (Range("XH_TV") - d_luongBQ) * ngaycong
            Case "CÑ": Bulg = (Range("CÑ_TV") - d_luongBQ) * ngaycong
            Case "PV": Bulg = (Range("PV_TV") - d_luongBQ) * ngaycong
            Case "BX": Bulg = (Range("BX_TV") - d_luongBQ) * ngaycong
        End Select
    End Select
End Function

Lưu ý: Tôi chỉ làm theo code bạn đưa lên (không phải xem qua cái file) đúng sai ta tính tiếp, nhưng tôi có một chút thắc mắc là tại sao dùng NAME mà gõ dấu tiếng Việt vào làm chi không biết nữa! Chẳng hạn: Range("CÑ_TV")





Em đã đưa code vào rồi nhưng nó chi đúng với trường của BĐH và KCS. Các bộ phận còn lại thì không ra kết quả. (Em gởi file đính kèm)
Anh xem giúp em.
Sao mà đoạn này kỳ vậy anh (màu đỏ)
Mã:
If LeftChucVu2 = "MH" Then
        If RightChucVu = "QC" Then
            If d_luongBQ < [COLOR=#FF0000]Range("KCS")[/COLOR] Then
                Bulg = (Range("MH_QC") - d_luongBQ) * ngaycong
            End If
        Else
            Bulg = (Range("MH_TK") - d_luongBQ) * ngaycong
        End If
    End If
    Exit Function
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Theo mình biết, cơ quan bạn đến 70 chức danh khác nhau, tại . . .

http://www.giaiphapexcel.com/forum/showthread.php?78684-Lọc-dữ-liệu-theo-điều-kiện

Bạn hãy lập ra bảng như dưới đây cho 70 chức danh đó đi;

Bộ fận| Chức vụ|Đơn vị|Hệ số bù lương
GSV|?|?|?
Bảo trì NV|NV|Bảo trì|?
Bảo trì TF|Tổ fó|Bảo trì|?
Bảo trì TT|Tổ trưởng|Bảo trì|?
. . .||. . .|

Lúc đó người nào giúp sẽ giải quyết cho bạn 1 lần;
Tránh bạn mỗi bài hỏi lại thêm 1 chút; Sau đó lại đi chổ khác hỏi tiếp
 
Upvote 0
http://www.giaiphapexcel.com/forum/showthread.php?78684-Lọc-dữ-liệu-theo-điều-kiện

Bạn hãy lập ra bảng như dưới đây cho 70 chức danh đó đi;

Bộ fận| Chức vụ|Đơn vị|Hệ số bù lương
GSV|?|?|?
Bảo trì NV|NV|Bảo trì|?
Bảo trì TF|Tổ fó|Bảo trì|?
Bảo trì TT|Tổ trưởng|Bảo trì|?
. . .||. . .|

Lúc đó người nào giúp sẽ giải quyết cho bạn 1 lần;
Tránh bạn mỗi bài hỏi lại thêm 1 chút; Sau đó lại đi chổ khác hỏi tiếp
Mình cảm ơn bạn! Nhưng bạn hiểu nhầm ý rồi. Những chức danh trong bảng của Bạn thì đâu có cần bù. Họ hưởng lương khoán mà.
Minh gởi bảng ví du về qui định bù


MUCBU.jpg
 

File đính kèm

  • MUCBU.jpg
    MUCBU.jpg
    19.4 KB · Đọc: 45
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em đã đưa code vào rồi nhưng nó chi đúng với trường của BĐH và KCS. Các bộ phận còn lại thì không ra kết quả. (Em gởi file đính kèm)
Anh xem giúp em.

Tôi hỏi bạn nhé, ở cột E có mã công việc là TK-TT, ở cột P (trong bảng tra mức bù) cũng có TK-TT, nói chung là cột E có mã nào, thì cột P cũng có mã đó, vậy tại sao không dùng hàm VLOOKUP để tra bảng cho nhanh, cần gì phải tính LEFT(CV,2), RIGHT(CV,2) làm chi vậy?
 
Upvote 0
Các anh chị trong diễn đàn cho em hỏi: em đang làm file (có lẽ cũng do bấm nhầm phím nào đó) mà tự nhiên chỉ 1 click chuột thôi nhưng nó cứ tự bôi đen nhiều ô, có khi là 3 ô, có khi là 4 ô, nhưng chỉ ở trong file đó thôi, nếu em mở file mới thì lại ko bị thế (nên em đoán là do em bấm nhầm phím nào đó khi đang làm). Có lần em bấm lung tung rồi tắt đi khởi động lại file đó thì lại trở về bt, nhưng có khi thì chẳng được.

Vậy nhờ các bác/anh/chị trên diễn đàn chỉ giúp em nguyên nhân và cách chữa với ạ.

Em cảm ơn nhiều!

PLHT

Mình thì chỉ mong có cao thủ giúp được mình làm code để có cái lỗi như bạn.

Mình đang tìm cái code tự động bôi đen khoảng 5 ô trên một dòng.
 
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
 
Upvote 0
Mình thì chỉ mong có cao thủ giúp được mình làm code để có cái lỗi như bạn.

Mình đang tìm cái code tự động bôi đen khoảng 5 ô trên một dòng.
Cái vụ này thì dễ ẹc à, chỉ cần như vầy thôi:
[GPECODE=vb]Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.Resize(5).Select
End Sub[/GPECODE]
(Không biết có đúng ý bạn không nhỉ?!)
 
Upvote 0
Mình thì chỉ mong có cao thủ giúp được mình làm code để có cái lỗi như bạn.

Mình đang tìm cái code tự động bôi đen khoảng 5 ô trên một dòng.
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")
 

File đính kèm

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

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é!
 
Upvote 0
Cái vụ này thì dễ ẹc à, chỉ cần như vầy thôi:
[GPECODE=vb]Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.Resize(5).Select
End Sub[/GPECODE]
(Không biết có đúng ý bạn không nhỉ?!)
Đọc bài của bác xong mới thấy hình như em suy nghĩ rất máy móc!!!
 
Upvote 0
Mình cảm ơn bạn! Nhưng bạn hiểu nhầm ý rồi. Những chức danh trong bảng của Bạn thì đâu có cần bù. Họ hưởng lương khoán mà.
Minh gởi bảng ví du về qui định bù

View attachment 100836
Đã có bảng để dò thì dùng hàm Excel cũng được mà, Bạn xem công thức trong cột N.
Hay bạn muốn hàm tự tạo thì công thức trong cột O, cũng cùng cách dò tìm thôi.
Nếu kết quả chưa đúng thì giải thích lại cách tính toán.
Yêu cầu: Muốn bù lương cho mã nào thì mã đó phải có trong cột R
 

File đính kèm

Upvote 0
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

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

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

File đính kèm

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
Upvote 0
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!

Thì tôi đã thủ sẳn cho bạn cái này rồi đó: Application.Volatile

Bỏ cái dấu nháy ra mà dùng nhé!
 
Upvote 0
Code điều kiện để tính thâm niên trong công ty

Em có code điều kiện để tính thâm niên trong công ty, em viêt nó dai dòng quá, nay nhờ các anh chi giúp em rút gon nó lại.
'Dieu kien tinh tham nien =====================================
[GPECODE=vb]Function DIEUKIEN(ByVal s_ghichu As String, d_Namcongtac As Double, _
s_Chuyenmon As String, s_Trinhdo As String) As Double
If d_Namcongtac >= 4 And s_ghichu <> "Chuyeån" And s_ghichu <> "Nghæ vieäc" Then
If StrComp(Trim(s_ghichu), "CC", vbBinaryCompare) = 0 Or _
(((s_Trinhdo = "Ñaïi hoïc") Or (s_Trinhdo = "Cöû nhaân")) And (s_Chuyenmon <> "K")) Then
DIEUKIEN = 1
Else
DIEUKIEN = 2
End If
Else
DIEUKIEN = 0
End If
End Function
[/GPECODE]
Chân thành cảm ơn các anh / chị nhiều trên Giải pháp Excel rất nhiều
 
Upvote 0
Em có code điều kiện để tính thâm niên trong công ty, em viêt nó dai dòng quá, nay nhờ các anh chi giúp em rút gon nó lại.
'Dieu kien tinh tham nien =====================================
[GPECODE=vb]Function DIEUKIEN(ByVal s_ghichu As String, d_Namcongtac As Double, _
s_Chuyenmon As String, s_Trinhdo As String) As Double
If d_Namcongtac >= 4 And s_ghichu <> "Chuyeån" And s_ghichu <> "Nghæ vieäc" Then
If StrComp(Trim(s_ghichu), "CC", vbBinaryCompare) = 0 Or _
(((s_Trinhdo = "Ñaïi hoïc") Or (s_Trinhdo = "Cöû nhaân")) And (s_Chuyenmon <> "K")) Then
DIEUKIEN = 1
Else
DIEUKIEN = 2
End If
Else
DIEUKIEN = 0
End If
End Function
[/GPECODE]
Chân thành cảm ơn các anh / chị nhiều trên Giải pháp Excel rất nhiều

Bạn mô tả ra chứ post nguyên đoạn code như vậy ai kiên nhẫn mà ngồi dịch. Ngoài ra nếu code bạn sai lại đi làm theo cái sai à.
 
Upvote 0

File đính kèm

Upvote 0
EM gởi file lên, em có mô tả trong file anh xem giúp em
Code không cần ngắn mà quan trọng là tốc độ tối ưu. Code của bạn như vậy là được rồi, chỉ sửa lại một chút là bỏ hàm StrComp đi và thay bằng một biểu thức so sánh bằng bình thường là được.
 
Upvote 0
Các bạn cho hỏi:
Cho i là số nguyên, làm thế nào để xác định nhanh i có thuộc tập hợp các số {1,2,3,4,5} mà không phải dùng vòng lặp.

--------------------------------
Hồi nãy quên, giờ biết rồi, lẫn thẫn ghê.
Phải vậy không các bạn: MsgBox (i Like "[0-5]")
 
Lần chỉnh sửa cuối:
Upvote 0
Các bạn cho hỏi:
Cho i là số nguyên, làm thế nào để xác định nhanh i có thuộc tập hợp các số {1,2,3,4,5} mà không phải dùng vòng lặp.

Có phải anh muốn nói, nếu i = 6 thì i không thuộc tập hợp {1,2,3,4,5} này phải không?

Tôi không nghĩ là không dùng vòng lặp mà giải quyết được vấn đề này.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Xin lỗi mình chưa hỏi rõ ý, Ý mình là một dãy liên tục (dùng vòng lặp được, không cần đến mảng).

OK, nếu vậy thì được, còn không thì cứ sử dụng số đầu với số cuối, nếu i lớn hơn hoặc bằng số đầu và nhỏ hơn hoặc bằng số cuối là được.

Đúng vậy, nhưng mình dùng like thấy OK mà.
MsgBox (i Like "[1-5]")

Cũng nói thêm, nếu số đầu và số cuối là một giá trị bất kỳ (một biến) thì anh làm như thế này là ổn:

Sub test()
Dim i, f, e
i = 10
f = 2
e = 9
MsgBox (i Like "[" & f & "-" & e & "]")
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thì dùng WorksheetFunction.Match cũng được vậy

Đúng là thế Thầy ạ, nếu nó không lỗi thì nó nằm trong tập hợp đó.

Đúng vậy, nhưng mình dùng like thấy OK mà.
MsgBox (i Like "[1-5]")

Anh ơi, em kiểm tra rồi, cái vụ Like này nó chỉ đúng từ 0 đến 9 thôi nhé (Any single digit (0–9)). Ngoài ra là sai bét hết đó!

Vì thế anh phải làm 1 cái hàm để kiểm tra số liên tục thôi:

Mã:
Function FindSubSet(ByVal Item As Long, ByVal StartNumber As Long, ByVal EndNumber As Long) As Boolean
    If StartNumber > EndNumber Then
        FindSubSet = (Item >= EndNumber And Item <= StartNumber)
    Else
        FindSubSet = (Item >= StartNumber And Item <= EndNumber)
    End If
End Function

Thủ tục kiểm tra:

Mã:
Sub test2()
    MsgBox FindSubSet(9, 90, -90)
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Chào bác GPEX
giúp em chút với.
e có file yêu cầu o sheet note, data o sheet Source.
E đã làm macro khi nhấn nút rồi nhưng báo lỗi, mới học làm macro nên không biết tại sao.
Nhờ a giúp với.
Cảm ơn anh.

http://www.mediafire.com/view/?ssb9ycuubpta9s9
Mong bác chỉ bảo thêm.
Cám ơn bác rất nhiều
 
Upvote 0
Báo lỗi màu vàng tại dong đầu tiên : =>Sub auto_open()
mình có sửa mấy lần nhưng vẫn báo lỗi tại cuối code: End sub
mong đc giúp đỡ

anh này đang cố gắng bẻ phần mềm của bác Vũ Nghĩa đây. đây là đoạn code lấy ID máy và can thiệp một số thao tác để có được một đoạn seri khác.
 
Lần chỉnh sửa cuối:
Upvote 0
Xin được trợ giúp code

Xin chào các anh, chị, các bạn! nhờ các bạn giúp mình đoạn code cho file mình gửi kèm với.
nó là dạng hàm if.
mình có làm thử nhưng không biết sai như thế nào cụ thể hàm if như sau: =IF(F6>0,G6&H6,"")
mình muốn chuyển hàm này thành code mong nhận được giúp đỡ.
 

File đính kèm

Upvote 0
Xin chào các anh, chị, các bạn! nhờ các bạn giúp mình đoạn code cho file mình gửi kèm với.
nó là dạng hàm if.
mình có làm thử nhưng không biết sai như thế nào cụ thể hàm if như sau: =IF(F6>0,G6&H6,"")
mình muốn chuyển hàm này thành code mong nhận được giúp đỡ.

Trong VB có 1 hàm gần tương tự như hàm If là hàm IIF (<------- bạn cân nhắc và sử dụng nhé __--__)
[GPECODE=vb][D6] = IIf([F6] > 0, [G6] & [H6], "")[/GPECODE]
 
Upvote 0
Đề nghị bạn Namkpac xóa hộ code trên, tôi chủ yếu muốn tạo file có các thông số đó để khỏi viết tay thôi, dãy số có đến 48 ký tự cơ mà, chứ đoạn code đã **** ngay từ phút đầu tiên rồi,thank
 
Upvote 0
bạn biết code chèn slide hình vào userform không, chỉ mình với
 
Upvote 0
Status
Không mở trả lời sau này.

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

Back
Top Bottom