Sao bạn không điền bằng tay STT đúng vào file để mọi người hiểu ý muốn của bạnXin chào ACE trên GPE !
Tôi có macro đánh STT nhưng hiện tại việc đánh STT không đúng. Nhờ mọi người giúp đỡ chỉnh giúp macro chỉ đánh STT các hạng mục không trùng nhau. Tôi xin cảm ơn !(có file gửi kèm theo).
Sub STT()
Dim SrcRng As Range, sArray, Arr(), Dic As Object
Dim lR As Long, r As Long, i As Long, WF As WorksheetFunction
On Error Resume Next
Set SrcRng = Range("A12:C1000")
Set WF = Application.WorksheetFunction
Set Dic = CreateObject("Scripting.Dictionary")
sArray = SrcRng.Value
ReDim Arr(1 To UBound(sArray, 1), 1 To 1)
For lR = 1 To UBound(sArray)
If CStr(sArray(lR, 2)) <> "" Then
lCount = lCount + 1
If CStr(sArray(lR, 3)) = "" Then
n = 0
r = r + 1
Arr(lR, 1) = WF.Roman(r)
Else
tmp = CStr(sArray(lR, 2))
If Not Dic.Exists(tmp) Then
Dic.Add tmp, lR
n = n + 1
Arr(lR, 1) = n
End If
End If
End If
Next
If lCount Then SrcRng.Resize(lCount, 1).Value = Arr
End Sub
Vậy kết luận cuối cùng là bạn đã thử code tôi viết ở trên chưa? Kết quả thế nào?Tôi có đánh STT bằng tay ở sheet DT(1) bên cạnh mà. Những mục trùng nhau có bôi màu vàng.
Bạn cho hỏi: Có khi nào các hạng mục con ở 2 mục lớn lại trùng nhau không?Xin cảm ơn anh ndu ! Tôi đã thử code anh viết giúp. Kết quả như ý muốn. Chân thành cảm ơn anh !
Sub STT()
Dim SrcRng As Range, sArray, Arr(), Dic As Object
Dim lR As Long, r As Long, i As Long, WF As WorksheetFunction
On Error Resume Next
Set SrcRng = Range("A12:C1000")
Set WF = Application.WorksheetFunction
sArray = SrcRng.Value
ReDim Arr(1 To UBound(sArray, 1), 1 To 1)
For lR = 1 To UBound(sArray)
If CStr(sArray(lR, 2)) <> "" Then
lCount = lCount + 1
If CStr(sArray(lR, 3)) = "" Then
Set Dic = CreateObject("Scripting.Dictionary")
n = 0
r = r + 1
Arr(lR, 1) = WF.Roman(r)
Else
tmp = CStr(sArray(lR, 2))
If Not Dic.Exists(tmp) Then
Dic.Add tmp, lR
n = n + 1
Arr(lR, 1) = n
End If
End If
End If
Next
If lCount Then SrcRng.Resize(lCount, 1).Value = Arr
End Sub
Xin chào ACE trên GPE !
Tôi có macro đánh STT nhưng hiện tại việc đánh STT không đúng. Nhờ mọi người giúp đỡ chỉnh giúp macro chỉ đánh STT các hạng mục không trùng nhau. Tôi xin cảm ơn !(có file gửi kèm theo).
Trời ơi! Số La Mã mà bạn đánh kiểu vậy à? 20 La Mã là 20 chữ I chắc?Bạn thử phương pháp đơn giản này xem sao
Sub STT()
[a12:a1000].Clear
n = [b65000].End(3).Row
LaMa = "I"
For a = 12 To n
If Cells(a, 3) = "" Then
Cells(a, 1) = LaMa
LaMa = LaMa & "I"
b = 1
ElseIf Cells(a, 2) = Cells(a - 1, 2) Then
Cells(a, 1) = ""
Else
Cells(a, 1) = b
b = b + 1
End If
Next
End Sub
Trời ơi! Số La Mã mà bạn đánh kiểu vậy à? 20 La Mã là 20 chữ I chắc?
Ngoài ra, nếu 2 hạng mục con trùng nhau nhưng không nằm gần nhau thì bạn tính sao?
Ẹc... Ẹc...
Tạm được, nhưng chưa giải quyết được vấn đề 2 mục con giống nhau nhưng không nằm gần nhauGiờ anh nói mình mới để ý, đúng là khả năng mình còn kém thiệt, không nhìn thấy xa hơn. Minh sẽ mò mẫm xem có làm được không. Không biết thế này có đúng không, cảm ơn anh đã nhắc nhở
Sub STT()
[a12:a1000].Clear
n = [b65000].End(3).Row
LaMa = 1
For a = 12 To n
If Cells(a, 3) = "" Then
Cells(a, 1) = Application.Roman(LaMa)
LaMa = LaMa + 1
b = 1
ElseIf Cells(a, 2) = Cells(a - 1, 2) Then
Cells(a, 1) = ""
Else
Cells(a, 1) = b
b = b + 1
End If
Next
End Sub
Thử công thức này coi sao nha
=IF(OR(A2="-",A2=0),"",MAX($B$1:B1)+1)
Cái đó tôi có thấy nhưng tôi nghĩ không cần... Việc format này hãy giao cho Conditional Formating làm sẽ nhanh hơnChào bạn ndu !
2. Macro của mình có tô đậm STT là chữ lama và cho màu đỏ, nhờ bạn chuyển lại giúp
Conditional Formating bạn làm bằng tay cơ mà, đâu có liên quan gì đến code chứXịn chào bạn ndu !
Do chưa biết cách kết hợp giữa đoạn code bạn mới viết với Conditional Formating nên tôi đã chạy macro cũ(đoạn code đã gửi bạn), sau đó mới chạy đoạn code của bạn mới viết. Cũng hơi bất tiện. Nếu có thể được, nhờ bạn giúp đỡ cho việc đánh STT được hoàn chỉnh. Xin cảm ơn bạn !