Hỏi về Code tự động tạo Mã số ?

Liên hệ QC

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,469
Nghề nghiệp
Công chức
Chào các bạn ! Tôi viết Code để tự động tạo mã số nhưng gặp vướng mắc không lấy được số 0 sau các số hàng chục, hàng trăm vd 0.010 thì chỉ lấy được là 0.01. Bạn nào biết cách khắc phục xin chỉ giúp. Thanks !

Mã:
Sub MaSo()
Application.ScreenUpdating = 0
On Error Resume Next
    With Sheets("Data")
        Set cln = .[b4]
        EnR = cln.Offset(60000, 3).End(3).Row - cln.Row + 1
        With cln.Resize(EnR)
            .ClearContents
            .NumberFormat = "#,##0.000"
        End With
        cln.Offset(, 3).Resize(EnR).SpecialCells(2).Offset(, -3) _
        = "=MAX(R[-1]C" & cln.Column & ":R" & cln.Row & "C)+ 0.001"
        With cln.Resize(EnR)
            .Value = .Value
            .Replace "0.", "Ms_"
        End With
    End With
End Sub
 

File đính kèm

Mình thấy sửa code của Trung Chinh có nhiều vấn đề, vậy mình tham gia đoạn code khác ngắn gọn hơn:

Mã:
Sub MaSo()
Application.ScreenUpdating = 0
On Error Resume Next
    With Range(Sheet1.[B4], Sheet1.[E65536].End(3).Offset(, -3))
    .Resize(, 2).ClearContents
    .Formula = "=IF(RC[2]="""",""Ms_"" & RIGHT(""00"" & COUNTIF(R4C4:RC[2],""""),3),"""")"
    .Value = .Value
    End With
End Sub
 
Upvote 0
Mình thấy sửa code của Trung Chinh có nhiều vấn đề, vậy mình tham gia đoạn code khác ngắn gọn hơn:

Mã:
Sub MaSo()
Application.ScreenUpdating = 0
On Error Resume Next
    With Range(Sheet1.[B4], Sheet1.[E65536].End(3).Offset(, -3))
    .Resize(, 2).ClearContents
    .Formula = "=IF(RC[2]="""",""Ms_"" & RIGHT(""00"" & COUNTIF(R4C4:RC[2],""""),3),"""")"
    .Value = .Value
    End With
End Sub
Ẹc... Ẹc... Cách của anh ngắn gọn lắm
Em góp 1 cách dùng hàm TEXT thay cho RIGHT và COUNTA thay cho COUNTIF
PHP:
Sub Test()
  With Sheets("Data")
    With .Range(.[E5], .[E65536].End(xlUp)).Offset(, -3)
      .Value = "=IF(RC[3]="""","""",""Ms_""&TEXT(COUNTA(R5C[3]:RC[3]),""000""))"
      .Value = .Value
    End With
  End With
End Sub
 
Upvote 0
Mình thấy sửa code của Trung Chinh có nhiều vấn đề, vậy mình tham gia đoạn code khác ngắn gọn hơn:

Mã:
Sub MaSo()
Application.ScreenUpdating = 0
On Error Resume Next
    With Range(Sheet1.[B4], Sheet1.[E65536].End(3).Offset(, -3))
    .Resize(, 2).ClearContents
   [B][COLOR="red"] .Formula = "=IF(RC[2]="""",""Ms_"" & RIGHT(""00"" & COUNTIF(R4C4:RC[2],""""),3),"""")"[/COLOR][/B]
    .Value = .Value
    End With
End Sub

Cảm ơn Sealand. Cách của bạn rất hay và đáp ứng được yêu cầu. Tuy nhiên phải sửa lại công thức cho tham chiếu đến cột E thì mới đúng hoàn toàn

Mã:
Sub MaSo2()
Application.ScreenUpdating = 0
On Error Resume Next
    With Range(Sheet1.[B4], Sheet1.[E65536].End(3).Offset(, -3))
    .Resize(, 2).ClearContents
    [B][COLOR="red"].Formula = "=IF(RC[3]="""","""",""Ms_"" & RIGHT(""00"" & COUNTIF(R4C5:RC[3],""*""),3))"[/COLOR][/B]
    .Value = .Value
    End With
End Sub

P/s Cảm ơn Ndu ! Code của bạn OK (đúng là cao siêu tới mức đơn giản nhất)
Sub Test()
With Sheets("Data")
With .Range(.[E5], .[E65536].End(xlUp)).Offset(, -3)
.Value = "=IF(RC[3]="""","""",""Ms_""&TEXT(COUNTA(R5C[3]:RC[3]),""000""))"
.Value = .Value
End With
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nhân thể, mình cũng thấy con số trong kết quả của code do Trung Chinh viết nếu không thay chuỗi mà nhân với 10.000 thì nó lại cho kết quả không như ta nghĩ. Lý do là ở đó. Trung Chinh dùng Format cell thực ra chỉ là hiển thị thôi chứ giá trị thực của nó lại khác. Ngay cả hàm Text để chuyển sang chuỗi cũng bị lỗi.
 
Upvote 0
Web KT

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

Back
Top Bottom