Hỏi về cách điền số thứ tự theo điều kiện? (1 người xem)

  • Thread starter Thread starter KUMI
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

KUMI

Bụi phấn
Tham gia
17/1/12
Bài viết
564
Được thích
571
Xin chào Thầy Cô & Anh Chị trong GPE!

Hiện em đang vướng mắc về một vấn đề đánh số thứ tự,cụ thể như sau:

Em muốn đánh số thứ tự trong cột A, cụ thể là từ ô A3 trở xuống.
Và vùng trong cột A từ ô A3 trở xuống này sẽ có một ô bất kỳ có dữ liệu.

Câu hỏi của Em đặt ra là làm thế nào để đánh số thứ tự từ 1 đến n cho vùng dữ liệu từ ô A3: đến ô chứa dữ liệu đó ạ!

Thầy Cô và Anh Chị giúp đỡ em với!
Xin cảm ơn!
 
Thử chạy code này xem sao nhé :
PHP:
Sub STT()
Dim i As Long
i = 3
Do
    Cells(i, 1) = i - 2
    i = i + 1
Loop Until Cells(i, 1) <> ""
End Sub
 
Upvote 0
Nếu ngay từ đầu, A3 có dữ liệu thì... CHẾT
Hi,Thầy! vấn đề này với trường hợp của con là sẽ không bao giờ sảy ra.
Vì vùng con muốn đánh số thứ tự con sẽ cài một câu lệnh clear trước sau khi đặt số thứ tự.

còn Ô có dữ liệu bất kỳ đó chính là ô con đã gán cho một giá trị từ trước.

Sở dĩ con không xác định được cái ô đã gán dữ liệu bất kỳ này sẽ nằm chính xác ở vị trí nào để mà điền số thứ tự vì trước đấy con có thực hiện một chức năng xóa các dòng giá trị = 0 hoặc là ="".

Chính vì vậy con mới đặt câu hỏi cho chủ đề này.
Cảm ơn nhận xét của Thầy, đó là rất đúng nhưng với trường hợp của con sẽ không có chuyện đó. Hì.

Nhân đây thầy có cách nào khác thì Thầy chia sẻ nhé Thầy!
 
Upvote 0
Nhân đây thầy có cách nào khác thì Thầy chia sẻ nhé Thầy!
Sao cũng được mà KUMI, bẫy thêm 1 câu lệnh thôi, cho cả 2 code, thống nhất [A3] <>"" thì thoát sub nhé :
PHP:
Sub STT()
If [A3] <> "" Then Exit Sub
Range("A4:A" & [A4].End(xlDown).Row).Offset(-1) = [row(A:A)]
End Sub
 
Upvote 0
Sao cũng được mà KUMI, bẫy thêm 1 câu lệnh thôi, cho cả 2 code, thống nhất [A3] <>"" thì thoát sub nhé :
PHP:
Sub STT()
If [A3] <> "" Then Exit Sub
Range("A4:A" & [A4].End(xlDown).Row).Offset(-1) = [row(A:A)]
End Sub
Mình là đang chở Bé Còi nghĩ đến code này đây!
Do với Loop chi cho rách việc
Ẹc... Ẹc...
 
Upvote 0
Sao cũng được mà KUMI, bẫy thêm 1 câu lệnh thôi, cho cả 2 code, thống nhất [A3] <>"" thì thoát sub nhé :
PHP:
Sub STT()
If [A3] <> "" Then Exit Sub
Range("A4:A" & [A4].End(xlDown).Row).Offset(-1) = [row(A:A)]
End Sub

Lẽ ra bé Còi chỉ cần như thế này là được chứ nhỉ?

Cần chi If iếc gì cho mệt, muốn A3 có dữ liệu hay không cũng "makeno"!

Mã:
Sub STT()
    Range("[COLOR=#ff0000][B]A3[/B][/COLOR]:A" & [[B][COLOR=#ff0000]A3[/COLOR][/B]].End(xlDown)[COLOR=#0000cd][B].Row - 1[/B][/COLOR]) = [row(A:A)]
End Sub
 
Upvote 0
Vâng đúng vậy! Như bài 5 em đã trình bày >> khỏi if
 
Upvote 0
Sao cũng được mà KUMI, bẫy thêm 1 câu lệnh thôi, cho cả 2 code, thống nhất [A3] <>"" thì thoát sub nhé :

Quỡn quỡn mình cũng có một đề nghị một code về FillSeries so với dùng row(A:A) xem sao!

Code của bé Còi:

Mã:
Sub STT()
    If [A3] <> "" Then Exit Sub
    Range("A4:A" & [A4].End(xlDown).Row).Offset(-1) = [row(A:A)]
End Sub

Code của HTN (dài dòng quá phải không nhỉ?):

Mã:
Sub FillSeries()
    
    Dim sRng As Range, lRow As Long
    lRow = Range("A3").End(xlDown).Row - 1
    Select Case lRow
    Case Is = 3
        Range("A3") = 1
    Case Is = 4
        Range("A3") = 1
        Range("A4") = 2
    Case Else
        Set sRng = Range("A3:A4")
        sRng(1) = 1: sRng(2) = 2
        sRng.AutoFill Destination:=Range("A3:A" & lRow), Type:=xlFillValues
    End Select

End Sub

Và các code thử: Thử nghiệm với Excel 2007 trở về sau:

Mã:
Sub TestSTT()
    Range("A3:A1048576").ClearContents
    Range("A1048575") = "Nghia dep trai"
    Dim T As Double
    T = Timer
    Call STT
    MsgBox Timer - T
End Sub

''-------------------------------------------------------------

Sub TestFillSeries()
    Range("A3:A1048576").ClearContents
    Range("A1048575") = "Nghia dep trai"
    Dim T As Double
    T = Timer
    Call FillSeries
    MsgBox Timer - T
End Sub

Các bạn thử test xem nhé!
 
Upvote 0
Xin hỏi thêm về vấn đề hạn chế vùng đánh số thứ tự:

Vẫn câu hỏi như đã nêu ở bài 1.
Nhưng em muốn hạn chế từ ô A3: A100
Thì code phải sửa thế nào ạ!
Xin cảm ơn!
 
Upvote 0
Quỡn quỡn mình cũng có một đề nghị một code về FillSeries so với dùng row(A:A) xem sao!

Code của bé Còi:

Mã:
Sub STT()
    If [A3] <> "" Then Exit Sub
    Range("A4:A" & [A4].End(xlDown).Row).Offset(-1) = [row(A:A)]
End Sub

Code của HTN (dài dòng quá phải không nhỉ?):

Mã:
Sub FillSeries()
    
    Dim sRng As Range, lRow As Long
    lRow = Range("A3").End(xlDown).Row - 1
    Select Case lRow
    Case Is = 3
        Range("A3") = 1
    Case Is = 4
        Range("A3") = 1
        Range("A4") = 2
    Case Else
        Set sRng = Range("A3:A4")
        sRng(1) = 1: sRng(2) = 2
        sRng.AutoFill Destination:=Range("A3:A" & lRow), Type:=xlFillValues
    End Select

End Sub

Và các code thử: Thử nghiệm với Excel 2007 trở về sau:

Mã:
Sub TestSTT()
    Range("A3:A1048576").ClearContents
    Range("A1048575") = "Nghia dep trai"
    Dim T As Double
    T = Timer
    Call STT
    MsgBox Timer - T
End Sub

''-------------------------------------------------------------

Sub TestFillSeries()
    Range("A3:A1048576").ClearContents
    Range("A1048575") = "Nghia dep trai"
    Dim T As Double
    T = Timer
    Call FillSeries
    MsgBox Timer - T
End Sub

Các bạn thử test xem nhé!
OK rồi ạ! Với bài 11 của Anh Nghĩa thì em đã hiểu bài 12!
Anh Nghĩa trả lời nhanh quá, gửi bài xong em mới thấy bài 11 của Anh!
Cảm ơn Anh!
 
Upvote 0
Vẫn câu hỏi như đã nêu ở bài 1.
Nhưng em muốn hạn chế từ ô A3: A100
Thì code phải sửa thế nào ạ!
Xin cảm ơn!

Với tôi thì code sẽ như sau:

Mã:
Sub FillSeries()
    
    Dim sRng As Range, lRow As Long
    lRow = Range("[COLOR=#ff0000][B]A101[/B][/COLOR]").End(xlUp).Row - 1
    Select Case lRow
    Case Is < 3
        Exit Sub
    Case Is = 3
        Range("A3") = 1
    Case Is = 4
        Range("A3") = 1
        Range("A4") = 2
    Case Else
        Set sRng = Range("A3:A4")
        sRng(1) = 1: sRng(2) = 2
        sRng.AutoFill Destination:=Range("A3:A" & lRow), Type:=xlFillValues
    End Select

End Sub
 
Upvote 0
Với tôi thì code sẽ như sau:

Mã:
Sub FillSeries()
    
    Dim sRng As Range, lRow As Long
    lRow = Range("A101").End(xlUp).Row - 1
    Select Case lRow
    Case Is < 3
        Exit Sub
[B][COLOR=#B22222]    Case Is = 3
        Range("A3") = 1
    Case Is = 4
        Range("A3") = 1
        Range("A4") = 2
    Case Else
        Set sRng = Range("A3:A4")
        sRng(1) = 1: sRng(2) = 2[/COLOR][/B]
        sRng.AutoFill Destination:=Range("A3:A" & lRow), Type:=xlFillValues
    End Select

End Sub

Em chưa hiểu mục đích của đoạn code trên ,Phiền Anh Nghĩa có coment bên cạnh những dòng code trên có tác dụng gì không ạ?

Em cũng mới nghĩ ra một cách kiểu này:
Mã:
Sub Stt()
    If Application.WorksheetFunction.CountA([A3:A100]) > 0 Then
        Range("A4:A" & [A101].End(xlUp).Row).Offset(-1) = [row(A:A)]
    Else
        Exit Sub
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em chưa hiểu mục đích của đoạn code trên ,Phiền Anh Nghĩa có coment bên cạnh những dòng code trên có tác dụng gì không ạ?

Em cũng mới nghĩ ra một cách kiểu này:
Mã:
Sub Stt()
    If Application.WorksheetFunction.CountA([A3:A100]) > 0 Then
        Range("A4:A"
 
Lần chỉnh sửa cuối:
Upvote 0
..............

Nhưng nếu bạn vẫn muốn dùng row(A:A) thì tôi nghĩ bạn nên dùng code này:

Mã:
Sub STT()
    Dim lRow As Long
    lRow = [A3].End(xlDown).Row - 1
    If lRow > 100 Then Exit Sub
[COLOR=#0000ff]    Range("A3:A" & lRow) = [row(A:A)][/COLOR]
End Sub

Rất hay! Xin cảm ơn Ếch Xanh !!!
 
Upvote 0

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

Back
Top Bottom