Code điền cho đủ 7 ký tự

Liên hệ QC

phuyen89

Thành viên tích cực
Tham gia
20/11/08
Bài viết
870
Được thích
334
Nghề nghiệp
Student
Em có viết code điền cho đủ ký tự trong cùng một cột.Nhưng có 01 nhược điểm sau.
Khi đã chạy xong rồi.Em Xóa 01 số trong dãy số đó và chạy lại thì lại không được.Em đang học Code mong Anh/Chị giúp đỡ.
PHP:
Sub FillInvolr()
Dim Rng As Range
    For Each Rng In Range("B2:B2164")
        Sheets("HD").Activate
        If Len(Rng) = 7 Then Exit For
        If Len(Rng) = 1 Then
        Rng = "000000" & Rng
    ElseIf Len(Rng) = 2 Then
        Rng = "00000" & Rng
    ElseIf Len(Rng) = 3 Then
        Rng = "0000" & Rng
    ElseIf Len(Rng) = 4 Then
        Rng = "000" & Rng
    Else
        Rng = "00" & Rng
    End If
    Next Rng
End Sub
 

File đính kèm

  • Dien So HD.xls
    21.5 KB · Đọc: 13
1. sau khi bạn chạy code xong => thỏa mãn chiều dài cột B đều có 7 ký tự
2. bạn tiếp tục chạy lần 2( giả sữ bạn sữa lại cột B 1 vài chỗ cho nó ko đúng định dạng nữa ) thì ngay tại chỗ " If len(Rng) =7 then Exit for " thì vào dòng B2, nó thấy thằng này có chiều dài =7 => nó thoát ra khỏi vòng lập luôn mà không đi làm những thằng khác . bạn nên bỏ đoạn code chỗ này
3. Bạn nên dùng Code như sau:
ìf len(Rng)<7 then
format(Rng,"0000000")
end if
thì hay hơn
 
Upvote 0
1. sau khi bạn chạy code xong => thỏa mãn chiều dài cột B đều có 7 ký tự
2. bạn tiếp tục chạy lần 2( giả sữ bạn sữa lại cột B 1 vài chỗ cho nó ko đúng định dạng nữa ) thì ngay tại chỗ " If len(Rng) =7 then Exit for " thì vào dòng B2, nó thấy thằng này có chiều dài =7 => nó thoát ra khỏi vòng lập luôn mà không đi làm những thằng khác . bạn nên bỏ đoạn code chỗ này
3. Bạn nên dùng Code như sau:
ìf len(Rng)<7 then
format(Rng,"0000000")
end if
thì hay hơn
Rất cảm ơn Quocphuoc88 đã tư vấn.
Mình cứ nghĩ là nó sẽ duyệt qua hết Vùng Range Nếu thoả mãn thì nó thực hiện nhữnh khối lệnh dưới, còn không thì nó bỏ qua chứ.
Vậy thì làm sao để xoá một hoặc vào dòng như vậy thì nhấn lấn 2 nó vẫn chạy được.
Còn nếu bỏ nó đi thì nó lại thêm tiếp vào cho mình, thành ra kết qua sai.
 
Upvote 0
Mã:
Sub FillInvolr()
Dim Rng As Range
With Sheet1
    For Each Rng In .Range("B2:B" & .Range("B65500").End(xlUp).Row)
        If Len(Rng) < 7 Then
            Rng = Format(Rng, "0000000")
        End If
    Next
End With
End Sub

Mình có chỉnh chổ vùng chọn cần làm. Dữ liệu tới đâu mình làm tới đó chứ bạn dự trù trước tới 2000 dòng ( trong khi đó dữ liệu mình có 13 dòng ) thì hơi phí
 
Upvote 0
Mã:
Sub FillInvolr()
Dim Rng As Range
With Sheet1
    For Each Rng In .Range("B2:B" & .Range("B65500").End(xlUp).Row)
        If Len(Rng) < 7 Then
            Rng = Format(Rng, "0000000")
        End If
    Next
End With
End Sub

Mình có chỉnh chổ vùng chọn cần làm. Dữ liệu tới đâu mình làm tới đó chứ bạn dự trù trước tới 2000 dòng ( trong khi đó dữ liệu mình có 13 dòng ) thì hơi phí

For Each Rng In .Range("B2:B" & .Range("B65500").End(xlUp).Row)

Xin hỏi cho .Row thay bằng .Select được không bạn?
Cái method Format có phải giống như chúng ta vào Number chọn Custom-->Type rồi tùy chọn phải không ạ?
 
Upvote 0
Thất sự nếu đã dùng hàm format thì không cần phải IF Iếc gì cả. Format tự động biết nếu đầu vào dài hơn 7 ký tự thì nó để nguyên

Tuy nhiên, format chỉ làm việc với dữ liệu số, hoặc có thể chuyển thành số (ví dụ 123 hoặc "123"). Gặp dữ liệu không thể chuyển thành số thì nó giữ nguyên. Format"ABC", "0000000") = "ABC"; không phải "0000ABC"
 
Upvote 0
Em có viết code điền cho đủ ký tự trong cùng một cột.Nhưng có 01 nhược điểm sau.
Khi đã chạy xong rồi.Em Xóa 01 số trong dãy số đó và chạy lại thì lại không được.Em đang học Code mong Anh/Chị giúp đỡ.
PHP:
Sub FillInvolr()
Dim Rng As Range
    For Each Rng In Range("B2:B2164")
        Sheets("HD").Activate
        If Len(Rng) = 7 Then Exit For
        If Len(Rng) = 1 Then
        Rng = "000000" & Rng
    ElseIf Len(Rng) = 2 Then
        Rng = "00000" & Rng
    ElseIf Len(Rng) = 3 Then
        Rng = "0000" & Rng
    ElseIf Len(Rng) = 4 Then
        Rng = "000" & Rng
    Else
        Rng = "00" & Rng
    End If
    Next Rng
End Sub
Sub của bạn viết như vầy cũng đủ rồi:
PHP:
Sub FillInvolr()
Dim Rng As Range
Range([B1], [B65536].End(xlUp)).NumberFormat = "@"
For Each Rng In Range([B1], [B65536].End(xlUp))
    Rng.Value = Format(Rng, "0000000")
Next Rng
End Sub
 
Upvote 0
Web KT
Back
Top Bottom