Hàm tính thời gian cho từng người theo ngày (1 người xem)

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

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

hml89

Thành viên tiêu biểu
Tham gia
14/9/12
Bài viết
526
Được thích
392
Giới tính
Nam
Kính gửi anh,chị,em trong diễn đàn.
Mọi người cho em xin giúp đỡ tính thời gian làm việc cho từng người theo ngày với ạ.
Chi tiết em xin gửi file đính kèm.

Em cám ơn mọi người. Chúc mọi người thứ bảy vui hết sảy ạ. :D
 

File đính kèm

Bạn thử xem đã đúng ý chưa. Dữ liệu bạn tổng hợp ỏ file đính kèm sai nhé. Bạn cung cấp thêm dữ liệu và nhấn nút để xem kết quả.

Option Base 1
Sub TACH()
Dim dic As New Scripting.Dictionary
Dim s As String
Dim TU As String
Dim ArrN()
Dim Arr() As Variant
Dim KQ(), Nrr()
Dim n As Integer, m As Integer
Dim i As Integer
Dim k As Integer
Dim d As Long
Dim j&
Dim H&, Z&, c&, t&, f&
With Sheet1

d = .Range("A" & .Rows.Count).End(xlUp).Row
ArrN = .Range("A1:C" & d).Value
ReDim Arr(1 To d + 1, 1 To 3)
For i = 2 To d
s = WorksheetFunction.Substitute(.Cells(i, 1), ",", "")
n = Len(s)
H = H + n
Z = Z + 1
Arr(Z, 1) = s

For c = 2 To 3
Arr(Z, c) = ArrN(i, c)
Next c
Next i
ReDim KQ(1 To H, 1 To d)
On Error Resume Next
.Range("H2:IVA2").ClearContents
For k = 1 To UBound(Arr)
If Not dic.Exists(Arr(k, 3)) Then
.Cells(2, 100).End(xlToLeft).Offset(0, 1) = Arr(k, 3)
End If
Next k
For k = 1 To UBound(Arr)
f = Application.WorksheetFunction.Match(.Cells(k + 1, 3), .Range("G2:R2"))
n = Len(Arr(k, 1))
For j = 1 To n
DK = Mid(Trim(Arr(k, 1)), j, 1)
If Not dic.Exists(DK) Then
t = t + 1
dic.Add DK, t
KQ(t, 1) = DK
KQ(t, f) = Arr(k, 2) / n
Else
r = dic.Item(DK)
KQ(r, f) = KQ(r, f) + Arr(k, 2) / n
End If
Next j
Next k
.[G10].Resize(H, d) = KQ
End With
MsgBox " HÃY GUI LOI CAM ON ÐÊN BQT DIÊN ÐÀN VÀ CÁ NHAN CÁC ANH NDU, PTM, VETMINI,HUUTHANG,HIEUCD,SA_DQ....NHÉ!"
End Sub
 

File đính kèm

Bạn thử xem đã đúng ý chưa. Dữ liệu bạn tổng hợp ỏ file đính kèm sai nhé. Bạn cung cấp thêm dữ liệu và nhấn nút để xem kết quả.

Option Base 1
Sub TACH()
Dim dic As New Scripting.Dictionary
Dim s As String
Dim TU As String
Dim ArrN()
Dim Arr() As Variant
Dim KQ(), Nrr()
Dim n As Integer, m As Integer
Dim i As Integer
Dim k As Integer
Dim d As Long
Dim j&
Dim H&, Z&, c&, t&, f&
With Sheet1

d = .Range("A" & .Rows.Count).End(xlUp).Row
ArrN = .Range("A1:C" & d).Value
ReDim Arr(1 To d + 1, 1 To 3)
For i = 2 To d
s = WorksheetFunction.Substitute(.Cells(i, 1), ",", "")
n = Len(s)
H = H + n
Z = Z + 1
Arr(Z, 1) = s

For c = 2 To 3
Arr(Z, c) = ArrN(i, c)
Next c
Next i
ReDim KQ(1 To H, 1 To d)
On Error Resume Next
.Range("H2:IVA2").ClearContents
For k = 1 To UBound(Arr)
If Not dic.Exists(Arr(k, 3)) Then
.Cells(2, 100).End(xlToLeft).Offset(0, 1) = Arr(k, 3)
End If
Next k
For k = 1 To UBound(Arr)
f = Application.WorksheetFunction.Match(.Cells(k + 1, 3), .Range("G2:R2"))
n = Len(Arr(k, 1))
For j = 1 To n
DK = Mid(Trim(Arr(k, 1)), j, 1)
If Not dic.Exists(DK) Then
t = t + 1
dic.Add DK, t
KQ(t, 1) = DK
KQ(t, f) = Arr(k, 2) / n
Else
r = dic.Item(DK)
KQ(r, f) = KQ(r, f) + Arr(k, 2) / n
End If
Next j
Next k
.[G10].Resize(H, d) = KQ
End With
MsgBox " HÃY GUI LOI CAM ON ÐÊN BQT DIÊN ÐÀN VÀ CÁ NHAN CÁC ANH NDU, PTM, VETMINI,HUUTHANG,HIEUCD,SA_DQ....NHÉ!"
End Sub
1622280501566.png
Cám ơn bạn. Mình có chạy thì bị lỗi như này.
Ui, mà bạn là thành viên mới nè. Bạn giỏi thế!
 
Do không tim thấy thư viện để chay Dic . Bạn hãy vào cửa sổ VBE (alt+ f11), khi cửa sổ VBE hiện ra, vào thẻ Tools\Refesences trong của sổ Avaible Refesences háy tim đến và tích chọn vào mục Microsoft Scripling Runtime và nhấn OK là được.
Bạn có thể thêm nhiều người, nhiều ngày (tức là thêm nhiều dòng dữ liệu) để chạy thử. Lưu ý không được để ô G2 = " " nhé.
Mình thấy trên diễn đàn Anh VetMini và anh Quang Hải cũng có bài viết tương tự nhưng dùng hàm Sumproduc hay gì đó. Bạn có thể tham khảo thêm
 
Do không tim thấy thư viện để chay Dic . Bạn hãy vào cửa sổ VBE (alt+ f11), khi cửa sổ VBE hiện ra, vào thẻ Tools\Refesences trong của sổ Avaible Refesences háy tim đến và tích chọn vào mục Microsoft Scripling Runtime và nhấn OK là được.
Bạn có thể thêm nhiều người, nhiều ngày (tức là thêm nhiều dòng dữ liệu) để chạy thử. Lưu ý không được để ô G2 = " " nhé.
Mình thấy trên diễn đàn Anh VetMini và anh Quang Hải cũng có bài viết tương tự nhưng dùng hàm Sumproduc hay gì đó. Bạn có thể tham khảo thêm
Khi mình post bài xong thì mình có đọc qua 1 bài, thấy cũng na ná nhau. Nhưng mình không thể xóa được bài đi. Với lại bài của mình có 2 điều kiện ấy bạn ạ. Nên mình vẫn mong muốn nhận được sự giúp đỡ.
Chúc bạn buổi tối vui vẻ nha.
Bài đã được tự động gộp:

Do không tim thấy thư viện để chay Dic . Bạn hãy vào cửa sổ VBE (alt+ f11), khi cửa sổ VBE hiện ra, vào thẻ Tools\Refesences trong của sổ Avaible Refesences háy tim đến và tích chọn vào mục Microsoft Scripling Runtime và nhấn OK là được.
Bạn có thể thêm nhiều người, nhiều ngày (tức là thêm nhiều dòng dữ liệu) để chạy thử. Lưu ý không được để ô G2 = " " nhé.
Mình thấy trên diễn đàn Anh VetMini và anh Quang Hải cũng có bài viết tương tự nhưng dùng hàm Sumproduc hay gì đó. Bạn có thể tham khảo thêm
1622299711833.png
1622299766982.png
Hình như là không phải do lỗi này bạn ạ? :rolleyes::rolleyes:
 
Lần chỉnh sửa cuối:
Do không tim thấy thư viện để chay Dic . Bạn hãy vào cửa sổ VBE (alt+ f11), khi cửa sổ VBE hiện ra, vào thẻ Tools\Refesences trong của sổ Avaible Refesences háy tim đến và tích chọn vào mục Microsoft Scripling Runtime và nhấn OK là được.
Bạn có thể thêm nhiều người, nhiều ngày (tức là thêm nhiều dòng dữ liệu) để chạy thử. Lưu ý không được để ô G2 = " " nhé.
Mình thấy trên diễn đàn Anh VetMini và anh Quang Hải cũng có bài viết tương tự nhưng dùng hàm Sumproduc hay gì đó. Bạn có thể tham khảo thêm
1622300634764.png
Mình có làm như hướng dẫn của anh ndu thì được rồi bạn nhé. Cám ơn bạn.
 
View attachment 259673
Của mình của sổ Available References nó như thế này và sub chạy êm ru. Dòng thứ 5: của mình nó không có dòng MISSING. BẠN KIỂM TRA LẠI XEM NHÉ.
Bài đã được tự động gộp:

View attachment 259674
Mình có làm như hướng dẫn của anh ndu thì được rồi bạn nhé. Cám ơn bạn.
NHỚ THÊM DỮ LIỆU VÀO RỒI CHẠY CODE NHÉ. CHÚC THÀNH CÔNG.
 
Biến i là kiểu Integer, d là kiểu Long. Vậy là phá sản rồi.
Không phá sản được đâu, số dòng của Excel chỉ tầm hàng triệu, biến Integer tới hàng tỷ mà lo gì!

P/s: Tuy nhiên mọi người cũng cần chú ý điểm này, các biến có liên quan nhau cần phải đồng bộ.
 
Biến i là kiểu Integer, d là kiểu Long. Vậy là phá sản rồi.
TÔI HỌC VBA CÓP NHẶT TRÊN DIỄN ĐÀN, NÊN CÓ NHIỀU CHỖ KHÔNG HIỂU ĐƯỢC BẢN CHẤT MÀ CHỈ BIẾT ĐƯA VÀO THẤY CHẠY ĐƯỢC LÀ OK RỒI.
CHÂN THÀNH CẢM ƠN CÁC ANH ĐÃ CHỈ BẢO, QUA BÀI NÀY TÔI CÓ ĐƯỢC THÊM 1 KIẾN THỨC BỔ ÍCH RỒI.
 
TÔI HỌC VBA CÓP NHẶT TRÊN DIỄN ĐÀN, NÊN CÓ NHIỀU CHỖ KHÔNG HIỂU ĐƯỢC BẢN CHẤT MÀ CHỈ BIẾT ĐƯA VÀO THẤY CHẠY ĐƯỢC LÀ OK RỒI.
CHÂN THÀNH CẢM ƠN CÁC ANH ĐÃ CHỈ BẢO, QUA BÀI NÀY TÔI CÓ ĐƯỢC THÊM 1 KIẾN THỨC BỔ ÍCH RỒI.
Sau khi em sửa hết về kiểu long, em có thấy kết quả chạy nhanh hơn, anh Hoàng Trọng Nghĩa và anh befaint đều là các thành viên kì cựu và rất giỏi. Các anh ấy có nhiều bài viết cũng như gỡ rối cho rất nhiều thành viên ạ, chẳng qua là em học không tốt, nên nhiều bài viết bổ ích em lại không tiếp thu được ạ.

Em xin chân thành cảm ơn @HUONGLIEN6577 , anh @Hoàng Trọng Nghĩa và anh @befaint đã giúp đỡ em.
Chúc các anh, chị cuối tuần vui vẻ ạ.
 
TÔI HỌC VBA CÓP NHẶT TRÊN DIỄN ĐÀN, NÊN CÓ NHIỀU CHỖ KHÔNG HIỂU ĐƯỢC BẢN CHẤT MÀ CHỈ BIẾT ĐƯA VÀO THẤY CHẠY ĐƯỢC LÀ OK RỒI.
CHÂN THÀNH CẢM ƠN CÁC ANH ĐÃ CHỈ BẢO, QUA BÀI NÀY TÔI CÓ ĐƯỢC THÊM 1 KIẾN THỨC BỔ ÍCH RỒI.
Bạn cần học thêm 2 điều quan trọng hơn:
1. cách gỡ bàn phím khi phím caplock bị kẹt
2. tuân thủ luật diễn đàn, chủ yếu lần này là về "hình thức bài viết"
 
Bạn phá sản tập 3
Cũng như tác giả bài #11, bạn đã quên nêu cái ngữ cảnh. Cái hình của bạn không nói ở đâu ra, và không nói áp dụng vào đâu.

Ngữ cảnh ở đây là VBA. Cái hình ở bài #10 đúng với 3 kiểu biến số nguyên khai báo trong VBA (còn vài kiểu nữa).
Tác giả bài #11 xem tài liệu trên mạng nhưng quên mất cái ngữ cảnh là hệ thống IBM.

Trong VBA đời mới, biến kiểu Long hiệu quả hơn Integer một chút. Nhưng tôi tin rằng "thấy kết quả chạy nhanh hơn" như bài #15 là tưởng tượng. Nhanh hơn khoảng một chớp mắt chỉ có thánh mới thấy.
Nói chung thì bây giờ, cứ cái nào số nguyên thì nên khai báo Long , khoẻ ru. Cho đến khi nào bị vấn đề về bộ nhớ mời cần nghĩ đến Integer và Byte. Mà ở đây quý vị hầu hết chỉ viết code gói trọn trong một Sub, chuyện đầy bộ nhớ của ngăn xếp rất ít khi xảy ra. Vì vậy chỉ cần lưu ý mảng số nguyên.
 
Kính gửi anh,chị,em trong diễn đàn.
Mọi người cho em xin giúp đỡ tính thời gian làm việc cho từng người theo ngày với ạ.
Chi tiết em xin gửi file đính kèm.

Em cám ơn mọi người. Chúc mọi người thứ bảy vui hết sảy ạ. :D
Góp thêm bằng công thức:
Mã:
H3=IF($G3="","",IFERROR(LOOKUP(2,1/(H$2=$C$2:$C$12)/(SEARCH($G3,$A$2:$A$12)),$B$2:$B$12/LEN(SUBSTITUTE($A$2:$A$12,",",""))),""))
Enter.

Thân
 
Web KT

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

Back
Top Bottom