MinhKhai
Giải pháp Ếc-xào
- Tham gia
- 16/4/08
- Bài viết
- 937
- Được thích
- 571
Thử thay:Có 1 tình huống nhỏ là nếu cột ID bị tác động, kiểu dữ liệu đang là text chuyển sang là number lúc này code nhận thành 2 ID khác nhau. Các anh chị có thể bẫy lỗi phần này được không ?
Mình thấy bạn cũng học code lâu rồi, có tìm hiểu về ADO, SQL rất nhiều mình nghĩ mấy cái này đâu khó gì với bạn đâuCó 1 tình huống nhỏ là nếu cột ID bị tác động, kiểu dữ liệu đang là text chuyển sang là number lúc này code nhận thành 2 ID khác nhau. Các anh chị có thể bẫy lỗi phần này được không ?
Mình dùng Excel nhưng chỉ dùng ở mức cơ bản thôi. Công việc hàng ngày cũng ít dùng Excel mà toàn thao tác trên phần mềm. Trước mình có hỏi về ADO, SQL là do các phần mềm đều dùng SQL Server database. Lấy được dữ liệu trực tiếp từ SQL Server ra Excel nên cảm thấy hứng thú và tự hào lắm. Hiện tại Excel phiên bản mới (Office 2019, Offce365) hỗ trợ lấy dữ liệu từ các nguồn database khá dễ dàng nên cũng lơ là ADO hơn.Mình thấy bạn cũng học code lâu rồi, có tìm hiểu về ADO, SQL rất nhiều mình nghĩ mấy cái này đâu khó gì với bạn đâu
Lỗi phần này thì mình sẽ chuyển nó về cùng dạng text, muốn làm điều đó thì theo code bạn @HUONGHCKT phần DK=Arr(i, 1) bạn sửa thành DK = CStr(Arr(i, 1))
Sửa: Nãy không thấy trả lời của bác @Phuocam
Ý bác là lấy trường thời gian thay cho trường ID để pass qua vấn đề text hay number phải không ?1 máy quét 1 thời điểm chỉ có 1 ID => bài này có thể thống kê theo cột Time, => cùng 1 ID, dù là text hay number cũng ra kết quả như nhau
Nhờ bạn giải thích giúp cách khai báo t&, d&. Mình chưa thấy cách khai báo thế này bao giờSub NOI()
Dim Arr(), KQ(), DK, dic As Object
Dim i As Long, j As Long, t&, d&
- Mình lấy cả trường hợp ID không có Email để có thể kiểm tra vì một lý do nào đấy (có thể do lỗi, có thể do sót) còn có hướng khắc phục.Code của Hoàng Tuấn 868 đã xử lý theo tình huống giữ lại ID khi trường email rỗng,
Mình hiểu là t&,d& là kiểu varian, Còn Dim KQ(), Arr() là khai báo mảng chưa biết rõ kích thước, DK để trống thì được coi là mặc định Varian.Nhờ bạn giải thích giúp cách khai báo t&, d&. Mình chưa thấy cách khai báo thế này bao giờ
Ngoài ra việc khai báo dạng Dim Arr(), KQ(), DK, dic As Object thì Arr(), KQ(), DK, dic đều là Object à, thay vì: Dim Arr() As Object, KQ() As Object, DK As Object, dic As Object
t& là khai báo tắt của t As Long. Danh sách các kiểu biến có thể khai báo tắt như sau:Nhờ bạn giải thích giúp cách khai báo t&, d&. Mình chưa thấy cách khai báo thế này bao giờ
Ngoài ra việc khai báo dạng Dim Arr(), KQ(), DK, dic As Object thì Arr(), KQ(), DK, dic đều là Object à, thay vì: Dim Arr() As Object, KQ() As Object, DK As Object, dic As Object
Với dữ liệu trong file bài 1: 1 thời điểm chỉ có 1 ID => thống kê theo cột "ID" hay "Time"cái nào cũng ra kết quả như nhau cả thôi.Bài đã được tự động gộp:
Ý bác là lấy trường thời gian thay cho trường ID để pass qua vấn đề text hay number phải không ?
Sub GPE_hehehe()
Dim i&, k&, Data(), KetQua(), Dic As Object
On Error Resume Next
Data = Range(Sheets("Data").[A1], Sheets("Data").[A100000].End(3)).Resize(, 4)
ReDim KetQua(1 To UBound(Data), 1 To 3)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Data)
If Data(i, 2) <> Empty Then
If Not Dic.exists(CStr(Data(i, 1))) Then
k = k + 1
Dic(CStr(Data(i, 1))) = k
KetQua(k, 1) = Data(i, 1)
KetQua(k, 2) = Data(i, 2)
KetQua(k, 3) = Data(i, 3)
Else
KetQua(Dic.Item(CStr(Data(i, 1))), 2) = KetQua(Dic.Item(CStr(Data(i, 1))), 2) & "," & Data(i, 2)
End If
End If
Next
Sheets("KetQua").[A1].Resize(i - 1, 3) = KetQua
Sheets("KetQua").Activate
End Sub