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
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
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 đỡ.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
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
NHỚ THÊM DỮ LIỆU VÀO RỒI CHẠY CODE NHÉ. CHÚC THÀNH CÔNG.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.
Dim i As Integer
Dim d As Long
'...
d = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To d
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ì!Biến i là kiểu Integer, d là kiểu Long. Vậy là phá sản rồi.
Thế vậy với dữ liệu này, em cho hết về long thì có được không ạ?Biến i là kiểu Integer, d là kiểu Long. Vậy là phá sản rồi.
Đúng rồi bạn ơi, tôi hiếm khi dùng biến Integer mà dùng biến Long, bởi chữ Long dễ viết hơn mà! kakaThế vậy với dữ liệu này, em cho hết về long thì có được không ạ?
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.Biến i là kiểu Integer, d là kiểu Long. Vậy là phá sản 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 ạ.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: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 phá sản tập 3Anh phá sản tập 2.
...
Góp thêm bằng công thức: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 ạ.![]()
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,",",""))),""))
Em cám ơn anh nhiều ạ.Góp thêm bằng công thức:
Enter.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,",",""))),""))
Thân