


VD: C7 có dữ liệu thì là 1Bạn ơi, cho hỏi có phải đánh số thứ tự từ A7? Và số từ A7 là 1 và số cuối cùng sẽ nhận giá trị từ C7 phải không?
Ví dụ: C7 là 450 thì đánh số từ A7 là từ 1 đến 450 phải vậy không?
Có đưa file lên thi ít ra cũng có tí dữ liệu để người ta còn mường tượng ---> 1 cái file trống không, ai biết gì đâu mà làmVD: C7 có dữ liệu thì là 1
C8 có dữ liệu thì là 2
C10 có dữ liệu thì là 3
Có dữ liệu là có STT mà tăng dần bạn.



sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry. File đâycó đưa file lên thi ít ra cũng có tí dữ liệu để người ta còn mường tượng ---> 1 cái file trống không, ai biết gì đâu mà làm
(mặc dù tôi cũng hơi hiểu ý nhưng gặp dạng file đính kèm kiểu này thì cảm thấy rất bực mình)
VD: C7 có dữ liệu thì là 1
C8 có dữ liệu thì là 2
C10 có dữ liệu thì là 3
Có dữ liệu là có STT mà tăng dần bạn.
Nhập công thức này vào cell A7:sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry. File đây
=IF(C7="","",COUNTA($C$7:$C7))Thì vầy đi:Chính xác công thức thì OK, nhưng em muốn code anh NDU ơi!. Cảm ơn
Sub STT()
  Dim SrcRng As Range, Arr, i As Long, n As Long
  On Error Resume Next
  Set SrcRng = Range([C7], [C65536].End(xlUp))
  Arr = SrcRng.Value
  For i = 1 To UBound(Arr, 1)
    If Arr(i, 1) <> "" Then
      n = n + 1
      Arr(i, 1) = n
    End If
  Next
  SrcRng.Offset(, -2).Value = Arr
End Subsorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry. File đây
Sub FillSeries()  
Application.ScreenUpdating = False  
Dim Rng As Range, Cls As Range  
Set Rng = Range(Sheet1.[C7], Sheet1.[C5000].End(xlUp))  
Rng.Offset(, -2).ClearContents  
For Each Cls In Rng
    If Cls <> "" Then      Cls.Offset(, -2) = WorksheetFunction.Max(Rng.Offset(, -2)) + 1  
Next  
Application.ScreenUpdating = True
End SubĐã dùng code rồi mà còn WorksheetFunction mà chi hổng biết, chỉ tổ chậm hơn thôiBạn thử code này xem:
PHP:If Cls <> "" Then Cls.Offset(, -2) = WorksheetFunction.Max(Rng.Offset(, -2)) + 1
Đã dùng code rồi mà còn WorksheetFunction mà chi hổng biết, chỉ tổ chậm hơn thôi
Nói về NGẮN thì cái này mới là NGẮN đây:Đúng là nhìn vào code thì ngắn hơn,
Sub STT()
  With Range([C7], [C65536].End(xlUp)).Offset(, -2)
    .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))"
    .Value = .Value
  End With
End Sub



Bác Ơi, vậy muốn đánh số thứ tự theo ngày thì thế nào bác. Thêm 1 cột ngày nữa, và STT đánh theo ngày đó, hết ngày trước thì end và sang ngày mới thì đánh lại từ đầu.Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)
Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)


Sub STT()
  With Range([b5], [b65536].End(xlUp)).Offset(, 1)
    .Value = "=IF(RC2="""","""",""CC_"" & COUNTA(R5C2:RC2))"
  End With
End SubThì vầy đi:
PHP:Sub STT() Dim SrcRng As Range, Arr, i As Long, n As Long On Error Resume Next Set SrcRng = Range([C7], [C65536].End(xlUp)) Arr = SrcRng.Value For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then n = n + 1 Arr(i, 1) = n End If Next SrcRng.Offset(, -2).Value = Arr End Sub
 HH là DanhMuchanghoa)
HH là DanhMuchanghoa)Biết là lâu lắm nhưng thầy giúp em với, Với code này khi sheet không có dữ liệu thì tiêu đề STT nó tự đổi thành số 1Thì vầy đi:
PHP:Sub STT() Dim SrcRng As Range, Arr, i As Long, n As Long On Error Resume Next Set SrcRng = Range([C7], [C65536].End(xlUp)) Arr = SrcRng.Value For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then n = n + 1 Arr(i, 1) = n End If Next SrcRng.Offset(, -2).Value = Arr End Sub
Bỏ Private Sub Worksheet_SelectionChangesheet không có dữ liệu thì tiêu đề STT nó tự đổi thành số 1
Sub STT()
    Dim SrcRng As Range, Arr, i As Long, n As Long, Res()
    Dim lRow As Long
    With Sheet2
        lRow = .Range("G" & Rows.Count).End(xlUp).Row
        If lRow < 11 Then Exit Sub
        Set SrcRng = .Range("G11:H" & lRow)
        Arr = SrcRng.Value
        ReDim Res(1 To UBound(Arr, 1), 1 To 1)
        For i = 1 To UBound(Arr, 1)
             If Arr(i, 1) <> "" Then
               n = n + 1
               Res(i, 1) = n
             End If
        Next
        SrcRng.Offset(, -2).Value = Res
    End With
End SubKhông được anh ơi, sửa giúp e xíu nữa được khôngBỏ Private Sub Worksheet_Selection Change

Thì vầy đi:
PHP:Sub STT() Dim SrcRng As Range, Arr, i As Long, n As Long On Error Resume Next Set SrcRng = Range([C7], [C65536].End(xlUp)) Arr = SrcRng.Value For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then n = n + 1 Arr(i, 1) = n End If Next SrcRng.Offset(, -2).Value = Arr End Sub



Thì vầy đi:
PHP:Sub STT() Dim SrcRng As Range, Arr, i As Long, n As Long On Error Resume Next Set SrcRng = Range([C7], [C65536].End(xlUp)) Arr = SrcRng.Value For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then n = n + 1 Arr(i, 1) = n End If Next SrcRng.Offset(, -2).Value = Arr End Sub
Để ý trong các code tôi đưa lên diễn đàn thường có dòng lệnh này. Dù đã bẫy lỗi rất kỹ nhưng vẫn cứ thêm dòng ấy vào cho chắc. Thói quen thôi bạn àXin chào ndu96081631,
Phiền bạn chỉ giúp, dòng lệnh: On Error Resume Next
trong code trên để bắt lỗi gì vậy?



Cảm ơn ndu96081631 đã thông tin.Để ý trong các code tôi đưa lên diễn đàn thường có dòng lệnh này. Dù đã bẫy lỗi rất kỹ nhưng vẫn cứ thêm dòng ấy vào cho chắc. Thói quen thôi bạn à
Cứ cái nào là biến đối tượng (như Range, Object, Shape...) thì phải khởi tạo bằng động tác Set. Không phải đối tượng thì khỏi cần SetCảm ơn ndu96081631 đã thông tin.
Phiền bạn giải thích thêm giúp OT, trong code bạn có:
Set SrcRng = Range([C7], [C65536].End(xlUp))
Arr = SrcRng.Value
và cũng có trường hợp viết:
i = .Range("C" & .Rows.Count).End(xlUp).Row
Arr = .Range("C7:C" & i).Value
Vậy trong trường hợp nào thì phải sử dụng set, trường hợp nào thì không sử dụng?
Khi sử dụng Set SrcRng thì kết thúc có phải Set SrcRng = nothing không?


Xin phép thầy, bài này lâu nhưng lại đúng ý muốn làm nhưng phát triển thêm theo kiểu này không biết có được không ạ !
" Bây giờ 1 muốn đánh dấu X vào các loại hình thức hồ sơ thì chỗ "số biên nhận" sẽ tự động đánh số thứ tự tiếp theo của hình thức đó.. Thì phải làm như thế nào ạ."
View attachment 204523

(1) Rất nên & đó là thói quen rất chi là tốt!(2) Phiền bạn chỉ giúp, dòng lệnh: On Error Resume Next trong code trên để bắt lỗi gì vậy?
(1) Khi sử dụng Set SrcRng thì kết thúc có phải Set SrcRng = nothing không?
Sub GPE()
On Error Goto LoiCT
' . . . . . Các câu lệnh'
Err_ : Exit Sub
LoiCT:
If Err=424 then
   Goto Err_
Else
    MsgBox Err , , Error()
    On Error Resume Next
End If
End Sub





Bạn cần làm gì trong cái UserForm thân thương của bạn?nếu trong userform thì làm thế nào vậy các a/c?


Mình thiết kế userform có sẵn textbox để nhập số thứ tự, giờ mình muốn để texbox đó tự động điền số thứ tự vào vì mình ẩn workbook chỉ để hiện form nhập liệu nên không biết được dữ liệu mình nhập vào ở thứ tự bao nhiêu. Mong được các a/c trên forum hướng dẫn. Xin chân thành cảm ơn!Bạn cần làm gì trong cái UserForm thân thương của bạn?
& đầu câu sao không viết hoa?

bác cho em hỏi vậy nếu muốn đánh số thứ tự ở cột G từ ô G2 đổ xuống cho những ô có đánh dấu ở cột H thì như nào ạNói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)
Thứ nhất: Bạn phải tìm ra dòng cuối của cột 'G' (cột cần đánh số TT)bác cho em hỏi vậy nếu muốn đánh số thứ tự ở cột G từ ô G2 đổ xuống cho những ô có đánh dấu ở cột H thì như nào ạ
Các sản phẩm khác có đếm hay không?
Em gặp vấn đề là: Cột B (Sản phẩm) có 60.000 dòng. Cột A đánh số thứ tự nếu sản phẩm là "B" Vì số lượng dòng quá lớn nên dùm hàm IF+Max sẽ làm file chạy rất chậm, nên viết VBA có nhanh hơn không ạ, nhờ các anh/ chị chỉ giúp code VBA 
dùng countif thử xemCác sản phẩm khác có đếm hay không?
Không anh, em cần hỗ trợ đếm theo 1 điều kiện có sẵn!
Bạn thử code dưới đâyCác sản phẩm khác có đếm hay không?
Không anh, em cần hỗ trợ đếm theo 1 điều kiện có sẵn!
Sub Stt()
Dim Nguon, Kq
Dim DieuKien
Dim i, j, k
With Sheet1
    Nguon = .Range("B2", .Range("B1000000").End(xlUp))
    DieuKien = "B"
    k = UBound(Nguon)
    ReDim Kq(1 To k, 1 To 1)
    For i = 1 To k
        If Nguon(i, 1) = DieuKien Then
            j = j + 1
            Kq(i, 1) = j
        End If
    Next i
    .Range("A2").Resize(k, 1).ClearContents
    .Range("A2").Resize(k, 1) = Kq
End With
End SubTại A2 thử sử dụng công thức sau xem có khá hơn không:
Em gặp vấn đề là: Cột B (Sản phẩm) có 60.000 dòng. Cột A đánh số thứ tự nếu sản phẩm là "B" Vì số lượng dòng quá lớn nên dùm hàm IF+Max sẽ làm file chạy rất chậm, nên viết VBA có nhanh hơn không ạ, nhờ các anh/ chị chỉ giúp code VBA 
Bạn thử code dưới đây
Mã:Sub Stt() Dim Nguon, Kq Dim DieuKien Dim i, j, k With Sheet1 Nguon = .Range("B2", .Range("B1000000").End(xlUp)) DieuKien = "B" k = UBound(Nguon) ReDim Kq(1 To k, 1 To 1) For i = 1 To k If Nguon(i, 1) = DieuKien Then j = j + 1 Kq(i, 1) = j End If Next i .Range("A2").Resize(k, 1).ClearContents .Range("A2").Resize(k, 1) = Kq End With End Sub
Bạn thử code dưới đây
Mã:Sub Stt() Dim Nguon, Kq Dim DieuKien Dim i, j, k With Sheet1 Nguon = .Range("B2", .Range("B1000000").End(xlUp)) DieuKien = "B" k = UBound(Nguon) ReDim Kq(1 To k, 1 To 1) For i = 1 To k If Nguon(i, 1) = DieuKien Then j = j + 1 Kq(i, 1) = j End If Next i .Range("A2").Resize(k, 1).ClearContents .Range("A2").Resize(k, 1) = Kq End With End Sub


Thầy ơi cho e hỏi làm thế nào cho code này nó tự động chạy ạ!Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)



cái này thì phải làm trong phần sự kiện. Tốt nhất là bạn gửi file lên để mọi người còn giúp bạn.Thầy ơi cho e hỏi làm thế nào cho code này nó tự động chạy ạ!


E cảm ơn thầy giáo, e có file này e muốn lập báo cáo chi tiết dựa vào dữ liệu trên sheet "PS" để lập vào sổ chi tiết công nợ phải thu, công nợ phải trả, và sổ kho. e nhờ các thầy giúp e code với ạ,cái này thì phải làm trong phần sự kiện. Tốt nhất là bạn gửi file lên để mọi người còn giúp bạn.
E cảm ơn thầy giáo, e có file này e muốn lập báo cáo chi tiết dựa vào dữ liệu trên sheet "PS" để lập vào sổ chi tiết công nợ phải thu, công nợ phải trả, và sổ kho. e nhờ các thầy giúp e code với ạ,Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)



Bạn đưa bài vào sai chủ đề rồi. Vui lòng bạn lập chủ đề mới và trình bày rõ bạn cần giúp những gì, ví dụ như sổ chi tiết công nợ phải thu, công nợ phải trả, và sổ kho dữ liệu được lấy như thế nào từ sheet!PSE cảm ơn thầy giáo, e có file này e muốn lập báo cáo chi tiết dựa vào dữ liệu trên sheet "PS" để lập vào sổ chi tiết công nợ phải thu, công nợ phải trả, và sổ kho. e nhờ các thầy giúp e code với ạ,


bác ơi cái đoạn này, đúng với số thôi, nhưng nếu số nó chỉ dạng thập phân 2 số 00-99 sau đó phải thay đổi sang A1=> A9, hết A9 lại sang B1=> B9... tiếp tục đếm tiếp đến hết, thì làm sao hả bác.Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)
