Xin được giúp đỡ code đánh số thứ tự không liên tục và có điều kiện

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Em chào các thầy, các anh/chị và toàn thể các bạn!
Em xin được nhờ đánh code số thứ tự không liên tục và có điều kiện như sau:
Nếu như vậy thì phải diễn giải lại là :
1/ Nếu ô của cột liền sau cột Stt mà có ký tự thì số thứ tự tương ứng của dòng đó sẽ không được điền (kể cả ô ở cột "Nội dung" có hay không có ký tự.
2/ Nếu ô ở cột C không chứa ký tự và ô cở cột D tương ứng ký tự có mã màu RGB (0,0,255) thì số thứ tự dòng đó sẽ bị bỏ trống và số thứ tự tiếp theo sẽ được đliền là số liền trước ngay trên số ô có số thứ tự để trống.

Ghi chú: Các thầy, anh/chị giúp em có thể linh động để sửa code cho dễ khi thay đối vị trí cột cần đánh số thứ tự
(ví dụ như bài em đăng cần đánh số thứ tứ ở cột D tương ứng với vùng xét điều kiện để điền số thứ tự là từ cột D đến cột F
giờ trong file khác em muốn điền số thứ tự ở cột B chả hạn tương ứng với vùng xét điều kiện để điền số thứ tự là từ cột B đến cột D)
Em xin cảm ơn!
2019-09-25_155823.pnganh.png2019-09-25_155823.pnganh.png
 

File đính kèm

Lần chỉnh sửa cuối:

quanluu1989

Thành viên gắn bó
Tham gia ngày
11 Tháng tư 2013
Bài viết
2,053
Được thích
1,145
Điểm
560
Nơi ở
Nam Định/Thái Nguyên
Em chào các thầy, các anh/chị và toàn thể các bạn!
Em xin được nhờ đánh code số thứ tự không liên tục và có điều kiện như sau:
1) Số thứ tự được đánh ở cột D và bắt đầu từ số 1 (liền ngay dưới ô chứa "Stt")
2) Xét ở cột E mà ô nào đó có chứa ký tự thì số thứ tự sẽ bắt đầu lại từ số 1
3) Nếu ô nào đó ở cột E và cột F đều không có ký tự thì số thứ tự ở ô trong cột D tương ứng sẽ bị bỏ trống
và số thứ tự tiếp theo sẽ được đánh kế tiếp với số đã điền trước đó.

Ghi chú: Các thầy, anh/chị giúp em có thể linh động để sửa code cho dễ khi thay đối vị trí cột cần đánh số thứ tự
(ví dụ như bài em đăng cần đánh số thứ tứ ở cột D tương ứng với vùng xét điều kiện để điền số thứ tự là từ cột D đến cột F
giờ trong file khác em muốn điền số thứ tự ở cột B chả hạn tương ứng với vùng xét điều kiện để điền số thứ tự là từ cột B đến cột D)
Em xin cảm ơn!
View attachment 225631View attachment 225631
D4 = danhstt(E4,F4) -> keo xuong

Mã:
Function danhstt(cel1 As Range, cel2 As Range)

        If cel2 <> "" Then
            danhstt = Val(cel1.Offset(-1, -1)) + 1
        Else
            danhstt = ""
        End If

End Function
 
Lần chỉnh sửa cuối:

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
tạm viết trên điện thoại xem có chuẩn không

function danhstt(cel1 as range, cel2 as range)
if ucase(cel1.offset(-1,-1) )="STT" then
danhstt=1
else
if cel1 <> "" and cel2 <> "" then
danhstt= cel1.offset(-1,-1) + 1
else
danhstt=""
end if
end if
end function
Đây là hàm tự tạo, nhưng điền thế nào vậy anh?
 

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
em xe. code chuẩn chưa? anh có sửa lại code nhé
Dạ được rồi anh ạ! em cám ơn anh nhiều!
Bài đã được tự động gộp:

Bài đã được tự động gộp:

em xe. code chuẩn chưa? anh có sửa lại code nhé
Anh ơi, vẫn có vấn đề chút ạ! khi xóa từ "HM" ở ô E17 đi thì số thứ tự được đánh không tự động điền lại cho đúng quy luật và khi đánh lại công thức để điền lại số thứ tự thì kết quả vẫn như vậy.
loi2.png
 
Lần chỉnh sửa cuối:

quanluu1989

Thành viên gắn bó
Tham gia ngày
11 Tháng tư 2013
Bài viết
2,053
Được thích
1,145
Điểm
560
Nơi ở
Nam Định/Thái Nguyên
Dạ được rồi anh ạ! em cám ơn anh nhiều!
Bài đã được tự động gộp:


Bài đã được tự động gộp:


Anh ơi, vẫn có vấn đề chút ạ! khi xóa từ "HM" ở ô E17 đi thì số thứ tự được đánh không tự động điền lại cho đúng quy luật và khi đánh lại công thức để điền lại số thứ tự thì kết quả vẫn như vậy.
View attachment 225639
Mã:
Function danhstt(cel1 As Range, cel2 As Range)
    Dim f_mark
    If cel2 <> "" Then
        If cel1.Offset(-1, -1) <> "" Then
            danhstt = Val(cel1.Offset(-1, -1)) + 1
        Else
            f_mark = cel1.End(xlUp).Row
            danhstt = Application.WorksheetFunction.Max(cel1.Offset(f_mark - cel1.Row, -1).Resize(cel1.Row - f_mark - 1, 1)) + 1
        End If
    Else
        danhstt = ""
    End If
End Function
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,276
Được thích
10,344
Điểm
1,860
Thêm 1 tham khảo:
PHP:
Sub DienSoThuTuTheoDieuKien()
 Dim J As Long, STT As Integer, Rws As Long
 
 For J = 4 To [F65500].End(xlUp).Row
    With Cells(J, "E")
        If Cells(J, "E").Value = "" Then
            If Len(.Offset(, 1).Value) < 10 Then
            Else
                STT = STT + 1:              Cells(J, "D").Value = STT
            End If
        Else
            STT = 0
        End If
    End With
 Next J
End Sub
 

quanluu1989

Thành viên gắn bó
Tham gia ngày
11 Tháng tư 2013
Bài viết
2,053
Được thích
1,145
Điểm
560
Nơi ở
Nam Định/Thái Nguyên
Thêm 1 tham khảo:
PHP:
Sub DienSoThuTuTheoDieuKien()
Dim J As Long, STT As Integer, Rws As Long

For J = 4 To [F65500].End(xlUp).Row
    With Cells(J, "E")
        If Cells(J, "E").Value = "" Then
            If Len(.Offset(, 1).Value) < 10 Then
            Else
                STT = STT + 1:              Cells(J, "D").Value = STT
            End If
        Else
            STT = 0
        End If
    End With
Next J
End Sub
Với code này của chú thì là code cố định rồi ạ, trường hợp em ấy muốn thay đổi cột khác thì phải sửa code. Cháu nghĩ mỗi cái có 1 ưu điểm, tùy chủ topic sử dụng.
 

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Mã:
Function danhstt(cel1 As Range, cel2 As Range)
    Dim f_mark
    If cel2 <> "" Then
        If cel1.Offset(-1, -1) <> "" Then
            danhstt = Val(cel1.Offset(-1, -1)) + 1
        Else
            f_mark = cel1.End(xlUp).Row
            danhstt = Application.WorksheetFunction.Max(cel1.Offset(f_mark - cel1.Row, -1).Resize(cel1.Row - f_mark - 1, 1)) + 1
        End If
    Else
        danhstt = ""
    End If
End Function
Anh ơi! Không hiểu sao em chạy hàm vẫn bị lỗi ạ!

Bài đã được tự động gộp:

Thêm 1 tham khảo:
PHP:
Sub DienSoThuTuTheoDieuKien()
Dim J As Long, STT As Integer, Rws As Long

For J = 4 To [F65500].End(xlUp).Row
    With Cells(J, "E")
        If Cells(J, "E").Value = "" Then
            If Len(.Offset(, 1).Value) < 10 Then
            Else
                STT = STT + 1:              Cells(J, "D").Value = STT
            End If
        Else
            STT = 0
        End If
    End With
Next J
End Sub
Cám ơn thầy, khi em muốn thay đổi cột khác như em trình bày ở bài #1 thì phải sửa code như thế nào thưa thầy?
 
Lần chỉnh sửa cuối:

CHAOQUAY

Thành viên tích cực
Tham gia ngày
24 Tháng tám 2018
Bài viết
845
Được thích
812
Điểm
360
Em chào các thầy, các anh/chị và toàn thể các bạn!
Em xin được nhờ đánh code số thứ tự không liên tục và có điều kiện như sau:
1) Số thứ tự được đánh ở cột D và bắt đầu từ số 1 (liền ngay dưới ô chứa "Stt")
2) Xét ở cột E mà ô nào đó có chứa ký tự thì số thứ tự sẽ bắt đầu lại từ số 1
3) Nếu ô nào đó ở cột E và cột F đều không có ký tự thì số thứ tự ở ô trong cột D tương ứng sẽ bị bỏ trống
và số thứ tự tiếp theo sẽ được đánh kế tiếp với số đã điền trước đó.

Ghi chú: Các thầy, anh/chị giúp em có thể linh động để sửa code cho dễ khi thay đối vị trí cột cần đánh số thứ tự
(ví dụ như bài em đăng cần đánh số thứ tứ ở cột D tương ứng với vùng xét điều kiện để điền số thứ tự là từ cột D đến cột F
giờ trong file khác em muốn điền số thứ tự ở cột B chả hạn tương ứng với vùng xét điều kiện để điền số thứ tự là từ cột B đến cột D)
Em xin cảm ơn!
View attachment 225631View attachment 225631
Bạn cho hỏi: D23 để trống là theo luật nào?
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,276
Được thích
10,344
Điểm
1,860
. . . , khi em muốn thay đổi cột khác như em trình bày ở bài #1 thì phải sửa code như thế nào . . . ?
(1) Có 1 số người trong bài đăng này của bạn đán là thầy của mình nên các xưng hô như vậy với mình là chưa thích hợp & làm mình ái ngại khi phải viết bài này!

(2) Bạn cho chay macro cha ("DienSTTTheoVungSuDung") này, với điều kiện: Bao giờ cột [Số TT] cũng là cột đầu tiên chứa dữ liệu trên trang tính hiện hành (cần đánh STT)
Mã:
Sub DienSTTTheoVungSuDung()
Dim Rng As Range

Set Rng = ActiveSheet.UsedRange
If Rng Is Nothing Then
    MsgBox "Sang Trang Tính Khác Dùm Cái!", , "Xin Chào My!"
Else
    DienSoThuTuTheoDieuKien Rng(1).Offset(1, 1)
End If
End Sub
PHP:
Sub DienSoThuTuTheoDieuKien(Cls As Range)
Dim J As Long, STT As Integer, Rws As Long
' For J = 4 To [F65500].End(xlUp).Row       '
  For J = Cls.Row To Cells(65500, 1 + Cls.Column).End(xlUp).Row
'    With Cells(J, "E")     '
    With Cells(J, Cls.Column)
'        If Cells(J, "E").Value = "" Then   '
        If Cells(J, Cls.Column).Value = "" Then
            If Len(.Offset(, 1).Value) < 10 Then
            Else
                STT = STT + 1:     '  Cells(J, "D").Value = STT      '
                Cells(J, Cls.Column - 1).Value = STT
            End If
        Else
            STT = 0
        End If
    End With
Next J
End Sub
 
Lần chỉnh sửa cuối:

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Bạn cho hỏi: D23 để trống là theo luật nào?
Quy luật sẽ điền số tiếp theo của số liền trước đó, và dòng bỏ trống không điền số thứ tự bạn nhé!
Bài đã được tự động gộp:

(1) Có 1 số người trong bài đăng này của bạn đán là thầy của mình nên các xưng hô như vậy với mình là chưa thích hợp & làm mình ái ngại khi phải viết bài này!

(2) Bạn cho chay macro cha ("DienSTTTheoVungSuDung") này, với điều kiện: Bao giờ cột [Số TT] cũng là cột đầu tiên chứa dữ liệu trên trang tính hiện hành (cần đánh STT)
Mã:
Sub DienSTTTheoVungSuDung()
Dim Rng As Range

Set Rng = ActiveSheet.UsedRange
If Rng Is Nothing Then
    MsgBox "Sang Trang Tính Khác Dùm Cái!", , "Xin Chào My!"
Else
    DienSoThuTuTheoDieuKien Rng(1).Offset(1, 1)
End If
End Sub
PHP:
Sub DienSoThuTuTheoDieuKien(Cls As Range)
Dim J As Long, STT As Integer, Rws As Long
' For J = 4 To [F65500].End(xlUp).Row       '
  For J = Cls.Row To Cells(65500, 1 + Cls.Column).End(xlUp).Row
'    With Cells(J, "E")     '
    With Cells(J, Cls.Column)
'        If Cells(J, "E").Value = "" Then   '
        If Cells(J, Cls.Column).Value = "" Then
            If Len(.Offset(, 1).Value) < 10 Then
            Else
                STT = STT + 1:     '  Cells(J, "D").Value = STT      '
                Cells(J, Cls.Column - 1).Value = STT
            End If
        Else
            STT = 0
        End If
    End With
Next J
End Sub
Dạ vâng
Về code thì chạy được rồi ạ! nhưng về quy luật thì còn chỗ ở dòng số 23 (tô nền chữ màu xanh) có quy luật:
Nếu ô ở cột C không chứa ký tự và ô cở cột D tương ứng ký tự có mã màu RGB (0,0,255) thì số thứ tự dòng đó sẽ bị bỏ trống và số thứ tự tiếp theo sẽ được đliền là số liền trước ngay trên số ô có số thứ tự để trống
 
Lần chỉnh sửa cuối:

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Bạn cho hỏi: D23 để trống là theo luật nào?
Ui, mình nhầm hi, không đẻ ý bạn nói mình mới biết.
Nếu như vậy thì phải diễn giải lại là :
1/ Nếu ô của cột liền sau cột Stt mà có ký tự thì số thứ tự tương ứng của dòng đó sẽ không được điền (kể cả ô ở cột "Nội dung" có hay không có ký tự.
2/ Nếu ô ở cột C không chứa ký tự và ô cở cột D tương ứng ký tự có mã màu RGB (0,0,255) thì số thứ tự dòng đó sẽ bị bỏ trống và số thứ tự tiếp theo sẽ được đliền là số liền trước ngay trên số ô có số thứ tự để trống.
Bài đã được tự động gộp:

Bạn cho hỏi: D23 để trống là theo luật nào?
Quy luật ấy dựa vào mã màu:
Nếu ô ở cột C không chứa ký tự và ô cở cột D tương ứng ký tự có mã màu RGB (0,0,255) thì số thứ tự dòng đó sẽ bị bỏ trống và số thứ tự tiếp theo sẽ được đliền là số liền trước ngay trên số ô có số thứ tự để trống
Bài đã được tự động gộp:

em thay cái f_mark - 1 bằng f_mark ( bỏ -1)
Dạ! em cám ơn anh! anh ơi về cơ bản thì được rồi nhưng còn quy luật ở chỗ mã màu:
Nếu ô ở cột C không chứa ký tự và ô cở cột D tương ứng ký tự có mã màu RGB (0,0,255) thì số thứ tự dòng đó sẽ bị bỏ trống và số thứ tự tiếp theo sẽ được đliền là số liền trước ngay trên số ô có số thứ tự để trống.
Anh xem giúp em nhé!
Bài đã được tự động gộp:

Quy luật sẽ điền số tiếp theo của số liền trước đó, và dòng bỏ trống không điền số thứ tự bạn nhé!
Bài đã được tự động gộp:


Dạ vâng
Về code thì chạy được rồi ạ! nhưng về quy luật thì còn chỗ ở dòng số 23 (tô nền chữ màu xanh) có quy luật:
Nếu ô ở cột C không chứa ký tự và ô cở cột D tương ứng ký tự có mã màu RGB (0,0,255) thì số thứ tự dòng đó sẽ bị bỏ trống và số thứ tự tiếp theo sẽ được đliền là số liền trước ngay trên số ô có số thứ tự để trống
Anh xem giúp em mới ạ! cám ơn anh nhiều, ban đầu em chỉ bôi xanh chứ chưa diễn giả rõ mã màu.
 

CHAOQUAY

Thành viên tích cực
Tham gia ngày
24 Tháng tám 2018
Bài viết
845
Được thích
812
Điểm
360
Ui, mình nhầm hi, không đẻ ý bạn nói mình mới biết.
Nếu như vậy thì phải diễn giải lại là :
1/ Nếu ô của cột liền sau cột Stt mà có ký tự thì số thứ tự tương ứng của dòng đó sẽ không được điền (kể cả ô ở cột "Nội dung" có hay không có ký tự.
2/ Nếu ô ở cột C không chứa ký tự và ô cở cột D tương ứng ký tự có mã màu RGB (0,0,255) thì số thứ tự dòng đó sẽ bị bỏ trống và số thứ tự tiếp theo sẽ được đliền là số liền trước ngay trên số ô có số thứ tự để trống.
Bài đã được tự động gộp:


Quy luật ấy dựa vào mã màu:
Nếu ô ở cột C không chứa ký tự và ô cở cột D tương ứng ký tự có mã màu RGB (0,0,255) thì số thứ tự dòng đó sẽ bị bỏ trống và số thứ tự tiếp theo sẽ được đliền là số liền trước ngay trên số ô có số thứ tự để trống
Bài đã được tự động gộp:


Dạ! em cám ơn anh! anh ơi về cơ bản thì được rồi nhưng còn quy luật ở chỗ mã màu:
Nếu ô ở cột C không chứa ký tự và ô cở cột D tương ứng ký tự có mã màu RGB (0,0,255) thì số thứ tự dòng đó sẽ bị bỏ trống và số thứ tự tiếp theo sẽ được đliền là số liền trước ngay trên số ô có số thứ tự để trống.
Anh xem giúp em nhé!
Bài đã được tự động gộp:


Anh xem giúp em mới ạ! cám ơn anh nhiều, ban đầu em chỉ bôi xanh chứ chưa diễn giả rõ mã màu.
Vậy là các code trên đều phải chỉnh lại?
Có lẽ bạn nên làm 1 file vì dụ nhiều dữ liệu hơn để có thể thấy đầy đủ quy luật đánh dấu.
 

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Vậy là các code trên đều phải chỉnh lại?
Có lẽ bạn nên làm 1 file vì dụ nhiều dữ liệu hơn để có thể thấy đầy đủ quy luật đánh dấu.
Uh mình diễn giải chưa rõ thôi, file ban đầu cũng tô nền chữ có mã màu RGB (0,0,255) nhưng chưa diễn giải rõ ra nên khó hiểu
 
Top Bottom