- Tham gia
- 31/3/20
- Bài viết
- 180
- Được thích
- 43
Chuyện nhỏ. Tiết kiệm được một cái mảng tổ bố (cho bộ nhớ) mới là quan trọng.Tiết kiệm được 1 dòng Redim.
Dùng 1 mảng:
Dim a As Variant, aNum As Long
Dim i As Long
' lưu ý: 2 cột
a = Range("B3:C" & Cells(Rows.Count, "B").End(xlUp).Row).Value
With CreateObject("Scripting.dictionary")
For i = 1 To UBound(a)
If a(i, 1) <> "" Then ' thớt mới thêm điều kiện này. Trước đó không có. File mẫu cũng không có
If Not .Exists(a(i, 1)) Then
aNum = aNum + 1 ' tổng số dòng kết quả
.Add (a(i, 1)), aNum
a(aNum, 1) = a(i, 1)
a(aNum, 2) = 1
Else
a(.Item(a(i, 1)), 2) = a(.Item(a(i, 1)), 2) + 1
End If
End If
Next i
End With
Range("D3").Resize(aNum, 2).Value = a
Dùng đít sần chỉ để đếm:
(lưu ý: Application.Transpose có giới hạn của nó. Khi dùng nên cẩn thận. Code chỉ có tính chất minh họa)
a = Range("B3:C" & Cells(Rows.Count, "B").End(xlUp).Row).Value
With CreateObject("Scripting.dictionary")
For i = 1 To UBound(a)
If a(i, 1) <> "" Then .Item(a(i, 1)) = .Item(a(i, 1)) + 1
Next i
Range("D3").Resize(.Count).Value = Application.Transpose(.Keys())
Range("E3").Resize(.Count).Value = Application.Transpose(.Items())
End With
Sub dadad()
Dim a As Variant, aNum As Long
Dim i As Long
a = Range("B3:C" & Cells(Rows.Count, "B").End(xlUp).Row).Value
With CreateObject("Scripting.dictionary")
For i = 1 To UBound(a)
If a(i, 1) <> "" Then ' th?t m?i thêm di?u ki?n này. Tru?c dó không có. File m?u cung không có
If Not .Exists(a(i, 1)) Then
aNum = aNum + 1 ' t?ng s? dòng k?t qu?
.Add (a(i, 1)), aNum
a(aNum, 1) = a(i, 1)
a(aNum, 2) = 1
Else
a(.Item(a(i, 1)), 2) = a(.Item(a(i, 1)), 2) + 1
End If
End If
Next i
End With
Range("D3:E1000").ClearContents
Range("D3").Resize(aNum, 2).Value = a
End Sub
Thử chi. Từ o-ka dến 100% xa lắm. Phải tét 1000 lần trong phòng thí nghiệm.Bạn thêm dòng .CompareMode = vbBinaryCompare dưới dòng With Đít thử
Thử chi. Từ o-ka dến 100% xa lắm. Phải tét 1000 lần trong phòng thí nghiệm.
Sub Codelocdem()
Dim a As Variant, aNum As Long
Dim i As Long
a = Range("B3:C5000").Value
With CreateObject("Scripting.dictionary")
.CompareMode = vbTextCompare ' BO DONG NAY de phan biet chu hoa chu thuong
For i = 1 To UBound(a)
If a(i, 1) <> "" Then
If Not .Exists(a(i, 1)) Then
aNum = aNum + 1
.Add (a(i, 1)), aNum
a(aNum, 1) = a(i, 1)
a(aNum, 2) = 1
Else
a(.Item(a(i, 1)), 2) = a(.Item(a(i, 1)), 2) + 1
End If
End If
Next i
End With
Range("D3:E1000").ClearContents
Range("D3").Resize(aNum, 2).Value = a
End Sub
Bạn nhập tên như vậy nhưng excel nó tự động chuyển thành sang dạng lỗi.Bạn nhập vào với định dạng text là được.Mà đây là code viết cho bạn không việc gì phải thông báo tin buồn.Nếu muốn sửa thì thêm câu lệnh kiểm tra là được.Đã test rất Kỷ và Thông báo 1 tin buồn. Code vẫn bị lổi khi tôi cố tinh nhập 1 text có tên là #NAME?
( Đó là 1 tên tôi tự gõ từ bàn phím chứ không phải là 1 công thức sai cú pháp trả về )
View attachment 239263
Mã:Sub Codelocdem() Dim a As Variant, aNum As Long Dim i As Long a = Range("B3:C5000").Value With CreateObject("Scripting.dictionary") .CompareMode = vbTextCompare ' BO DONG NAY de phan biet chu hoa chu thuong For i = 1 To UBound(a) If a(i, 1) <> "" Then If Not .Exists(a(i, 1)) Then aNum = aNum + 1 .Add (a(i, 1)), aNum a(aNum, 1) = a(i, 1) a(aNum, 2) = 1 Else a(.Item(a(i, 1)), 2) = a(.Item(a(i, 1)), 2) + 1 End If End If Next i End With Range("D3:E1000").ClearContents Range("D3").Resize(aNum, 2).Value = a End Sub
tÔI muốn nó đúng với bất cứ Text nào . Ví dụ như hình bên dưới
View attachment 239266
Nó thực sự đúng với bất cứ "Text" nào....
tÔI muốn nó đúng với bất cứ Text nào . ...
Mình có đọc bài của bạn. Mình thấy cái cách bạn hỏi, phản hồi với các anh chị thật chán bạn ạ. Mình ở tư thế đi nhờ sự trợ giúp mà bạn ăn nói chả có đầu có đũa gì cả.Đã test rất Kỷ và Thông báo 1 tin buồn. Code vẫn bị lổi khi tôi cố tinh nhập 1 text có tên là #NAME?
( Đó là 1 tên tôi tự gõ từ bàn phím chứ không phải là 1 công thức sai cú pháp trả về )
View attachment 239263
Mã:Sub Codelocdem() Dim a As Variant, aNum As Long Dim i As Long a = Range("B3:C5000").Value With CreateObject("Scripting.dictionary") .CompareMode = vbTextCompare ' BO DONG NAY de phan biet chu hoa chu thuong For i = 1 To UBound(a) If a(i, 1) <> "" Then If Not .Exists(a(i, 1)) Then aNum = aNum + 1 .Add (a(i, 1)), aNum a(aNum, 1) = a(i, 1) a(aNum, 2) = 1 Else a(.Item(a(i, 1)), 2) = a(.Item(a(i, 1)), 2) + 1 End If End If Next i End With Range("D3:E1000").ClearContents Range("D3").Resize(aNum, 2).Value = a End Sub
tÔI muốn nó đúng với bất cứ Text nào . Ví dụ như hình bên dưới
View attachment 239266
Ủa bạn chưa biết hả.Mình có đọc bài của bạn. Mình thấy cái cách bạn hỏi, phản hồi với các anh chị thật chán bạn ạ. Mình ở tư thế đi nhờ sự trợ giúp mà bạn ăn nói chả có đầu có đũa gì cả.
Trong C++ bất cứ ký tự nào nhập được trong từ Inphut bàn phím được tạm gọi là Text. bác nên đi học lại đi. Phát biểu trật lất mà đòi dạy đời người taNó thực sự đúng với bất cứ "Text" nào.
Báo "tin buồn" cho bạn là bạn làm việc với Excel bao lâu nay mà không biết cách phân biệt thế nào là một "Text".
Về học lại Excel, cách gõ text, và mặc định trước khi đua đòi cốt kiếc VBA.
Mình có đọc bài của bạn. Mình thấy cái cách bạn hỏi, phản hồi với các anh chị thật chán bạn ạ. Mình ở tư thế đi nhờ sự trợ giúp mà bạn ăn nói chả có đầu có đũa gì cả.
[/QUOTE
Không liên quan đến bạn. Bạn lượn đi cho khác cho nước trong cái
Next đi chổ khác dùm cái. Không biết đầu đuôi mà phán như đúng rồiMình có đọc bài của bạn. Mình thấy cái cách bạn hỏi, phản hồi với các anh chị thật chán bạn ạ. Mình ở tư thế đi nhờ sự trợ giúp mà bạn ăn nói chả có đầu có đũa gì cả.
hi. Cách bạn ăn nói biết bạn là người thế nào rồi, ra xã hội mà có thái độ này chả ai chơi với đâu bạn ạ. Học là người khó lắm, có nhiều người gần hết nửa đời vẫn phải học lại từ đầu bài học làm người.Trong C++ bất cứ ký tự nào nhập được trong từ Inphut bàn phím được tạm gọi là Text. bác nên đi học lại đi. Phát biểu trật lất mà đòi dạy đời người ta
Bài đã được tự động gộp:
Bài đã được tự động gộp:
Next đi chổ khác dùm cái. Không biết đầu đuôi mà phán như đúng rồi
Báo "tin buồn" cho bạn là bạn làm việc với Excel bao lâu nay mà không biết cách phân biệt thế nào là một "Text".Ủa bạn chưa biết hả.
Người ta không có "nhờ". Thực sự ra là người ta tạo cơ hội cho các thành viên khác trên GPE "tích đức". Và vì vậy, người ta có quyền trịch thượng và các người khác muốn tu công tích đức (tôi không có nói lái nhé) có bổn phận phải chìu chuộng.
Ở đây ai cũng biết danh thớt này.
Rừng nào cọp nấy. Ở với Excel thì nói theo ngữ cảnh Excel. Dốt Excel còn bày đặt đem cái khác ra loè thiên hạ.Trong C++ bất cứ ký tự nào nhập được trong từ Inphut bàn phím được tạm gọi là Text. bác nên đi học lại đi. Phát biểu trật lất mà đòi dạy đời người ta
Cao thủ C++ này làm việc dự án tỷ đồng. Nhưng lại đi nhặt các code miễn phí trên mạng để sử dụng.hi. Cách bạn ăn nói biết bạn là người thế nào rồi, ra xã hội mà có thái độ này chả ai chơi với đâu bạn ạ. Học là người khó lắm, có nhiều người gần hết nửa đời vẫn phải học lại từ đầu bài học làm người.
Không tốn tiền bạc và cũng không tốn công, tốn sức mà lụm lúa thì quá thơm đi chứ.Cao thủ C++ này làm việc dự án tỷ đồng. Nhưng lại đi nhặt các code miễn phí trên mạng để sử dụng.
Diễn đàn giờ hiếm người như này lắm. Cần bảo tồn bạn à
Tôi mách code cho tác giả bài #8. Thớt thực ra chỉ mót lúa.Không tốn tiền bạc và cũng không tốn công, tốn sức mà lụm lúa thì quá thơm đi chứ.