Công thức ở cột STT

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

LikeIt

Thành viên tiêu biểu
Tham gia
16/6/06
Bài viết
415
Được thích
254
Nghề nghiệp
Others
Các anh chị làm ơn cho em hỏi, VD ở cột A là cột STT(số thứ tự) em muốn cột này có công thức tự nhảy theo thứ tự khi em đánh data vào cell B1, thì làm thế nào? Tks- NHT
 
Nguyễn Hương Thơm đã viết:
Các anh chị làm ơn cho em hỏi, VD ở cột A là cột STT(số thứ tự) em muốn cột này có công thức tự nhảy theo thứ tự khi em đánh data vào cell B1, thì làm thế nào? Tks- NHT

Bạn tham khảo ở file đính kèm
(Cách làm của 2 bác tedaynuivungoc)

2 hàm này tôi học được ở tedaynui va vungoc. Xin lỗi vungoc vì sự nhầm lẫn ngớ ngẩn của tôi nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Cách sử dụng VBA để bạn thêm tham khảo:

Mã:
[b]Private Sub Worksheet_Change(ByVal Target As Range)[/b]
 If Not Intersect(Target, Range("B2:B9999")) Is Nothing Then
    Target.Offset(, -1).Value = Target.Offset(-1, -1).Value + 1
 End If[b]
End Sub[/b]
( Nhưng chỉ thuận tiện nhập dữ liệu cho CSDL mà thôi!)
 
SA_DQ đã viết:
Mã:
[b]Private Sub Worksheet_Change(ByVal Target As Range)[/b]
 If Not Intersect(Target, Range("B2:B9999")) Is Nothing Then
    Target.Offset(, -1).Value = Target.Offset(-1, -1).Value + 1
 End If[b]
End Sub[/b]
( Nhưng chỉ thuận tiện nhập dữ liệu cho CSDL mà thôi!)

Nếu muốn dòng 1 & dòng 2 giống nhau thì không đánh số STT, sang dòng 3 khác dòng 2 thì đánh STT, nếu dòng 4 giống dòng 3 thì không đánh STT....

Bác sữa lại code được không.

TC.
 
Thien đã viết:
Nếu muốn dòng 1 & dòng 2 giống nhau thì không đánh số STT, sang dòng 3 khác dòng 2 thì đánh STT, nếu dòng 4 giống dòng 3 thì không đánh STT....

Bác sữa lại code được không.

TC.
Mã:
Option Explicit[b]
Private Sub Worksheet_Change(ByVal Target As Range)[/b]
 If Not Intersect(Target, Range("B2:B9999")) Is Nothing Then
    If Target.Value <> Target.Offset(-1) Then[COLOR="Blue"] '** **[/COLOR]      
     Target.Offset(, -1).Value = Target.Offset(, -1).End(xlUp).Value + 1
 End If:                End If[b]
End Sub[/b]
 
SA_DQ đã viết:
Mã:
Option Explicit[b]
Private Sub Worksheet_Change(ByVal Target As Range)[/b]
 If Not Intersect(Target, Range("B2:B9999")) Is Nothing Then
    If Target.Value <> Target.Offset(-1) Then[COLOR="Blue"] '** **[/COLOR]      
     Target.Offset(, -1).Value = Target.Offset(, -1).End(xlUp).Value + 1
 End If:                End If[b]
End Sub[/b]

Cho em hỏi một chút, khi em làm xong mà xóa nó đi để làm lại, hoặc nếu nhập nhầm, mà phải xóa đi làm lại nó lại hiện ra lỗi như sau:
hoi stt1.bmp


Và sau khi kích vào chữ Debug thì nó lại hiện lên là :
hoi stt2.JPG


Vậy nó là lỗi gì? sửa nó thế nào? em ko biết VBA, nên nếu bác sửa thì sửa code luôn bác nhé. Tks
 
Bạn thử code này nha:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo THOAT
If Not Intersect(Target, Range("B2:B9999")) Is Nothing Then
If Target.Value <> "" Then
Target.Offset(, -1).Value = Target.Offset(, -1).End(xlUp).Value + 1
Else
Target.Offset(, -1).Value = ""
End If: End If
THOAT:
Exit Sub

End Sub
 
Thấy vấn đề này cũng đơn giản thôi mà, khi insert row thì cells(i,1).value = rỗng (chưa có gì) thì copy công thức dòng i-1 lên, còn không thì duyệt từng cell theo 1,2,3...n (n là lastrow)
 
anhtuan1066 đã viết:
Nhưng tôi ko muốn thế... Thật ra có khi mình cũng cần Insert Row ấy chứ... vậy làm sao STT cũng sẽ tự động dc cập nhật?

Thì đành làm một cái Sub vậy, mỗi khi nhấn vào nó là nó chạy lại toàn bộ thôi
Hoặc là không cho Insert nữa.

Còn code phát hiện sự chèn hàng thì có, nhưng không hiểu sao nó lại không chạy.

PHP:
Function ActivateInsertRow() As Boolean
   
    Dim wrksht As Worksheet
    Dim objList As ListObject
    Dim objListRng As Range
   
    Set wrksht = ActiveWorkbook.Worksheets(1)
    Set objList = wrksht.ListObjects(1)
    Set objListRng = objList.InsertRowRange

    If objListRng Is Nothing Then
        ActivateInsertRow = False
    Else
        objListRng.Activate
        ActivateInsertRow = True
    End If

End Function

Thế mới khổ chứ !

Thân!
 
A1=row(), ..., A10=row()
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row < 20 Then
Cells(Target.Row, 1).Value = Cells(Target.Row - 1, 1).Value + 1
End If
End Sub
 
Mới lượm dc 1 cái SUB:

Public Sub STT()
Rw = 1
For Numb = 1 To 100
Cells(Rw, "A") = Numb
Rw = Rw + 1
Next Numb
End Sub

Nhưng thấy ko hay.. làm sao cho nó biết dc dòng nào là dòng cuối cùng có dử liêu để khi bấm vào Button thì nó điền vừa đủ, khỏi cần ghi số 100 ở đây...

Quên... đúng ra phải thêm:
Range("A:A").ClearContents vào trước chứ nhỉ ??? Nếu ko nó "lòi" tùm lum
Cải tiến dùm đi các cao thủ ơi... Nhức óc quá
 
Chỉnh sửa lần cuối bởi điều hành viên:
Nói chung là không thực tế lắm, bạn xem thử.
Public Sub STT()
Dim iRow As Integer
Rw = 1
iRow = Range("A65000").End(xlUp).Row
Columns("A:A").ClearContents
For Numb = 1 To iRow
Cells(Rw, "A") = Numb
Rw = Rw + 1
Next Numb
End Sub
 
Đây chỉ là code khi đã có stt mà insert thêm thì auto
Thay
iRow = Range("A65000").End(xlUp).Row =
iRow = Range("B65000").End(xlUp).Row vấn đề là tính theo cột nào, ví dụ cột B có dữ liệu.
 
Đáng STT tự động

Nguyễn Hương Thơm đã viết:
Các anh chị làm ơn cho em hỏi, VD ở cột A là cột STT(số thứ tự) em muốn cột này có công thức tự nhảy theo thứ tự khi em đánh data vào cell B1, thì làm thế nào? Tks- NHT

bạn data vào cell B1, Tại:
A 1: =IF(B1="","",COUNTA($B$1:B1))
A 2: =IF(B2="","",COUNTA($B$1:B2))

Copy cong thức thừ A 2 xuống....
 
Lưu ý trong trường hợp đánh số TT tự động mà dùng COUNTA là ko ồn đâu nha... Vi nếu như cột B là dủ liệu bình thường thì ko có vấn đề, ngược lại nó là những cell chứa công thức thì.. cho dù nó bị rỗng COUNTA vẫn tính như nó có dử liệu.. Các bạn thử xem sẽ biết..
Tôi làm file này cho các bạn thấy rõ hạn chế khi dùng COUNTA nhé... Nên dùng MAX sẽ chính xác hơn!
Mến
ANH TUẤN
 

File đính kèm

duongsatdn đã viết:
Bác Anh Tuấn ơi, bác ổn rồi mà người khác chưa ổn đâu. Bác chia sẻ cho em cái code cuối cùng của bác mà "ổn rồi" đi bác.
Thì code như đã nói ở trên đó
Public Sub STT()
Dim iRow As Integer
Rw = 1
iRow = Range("B65000").End(xlUp).Row
Columns("A:A").ClearContents
For Numb = 1 To iRow
Cells(Rw, "A") = Numb
Rw = Rw + 1
Next Numb
End Sub
Nghĩa là đánh STT vào cột A dựa vào dử liệu ở cột B... Có điều nếu cải tiến thêm 1 chút: dòng nào ở cột B có dử liệu mới đánh STT, giống như công thức =IF(B2="","",MAX($A$1:A1)+1).. nếu dc thế sẽ hay hơn
 
Xin phép được chỉnh lại code của Bác anhtuan1066 một chút. Bác xem thử như thế có được không?
Mã:
Public Sub STT()
Dim iRow As Integer
Numb = 0
iRow = Range("B65000").End(xlUp).Row
Columns("A:A").ClearContents
For Rw = 1 To iRow
    If Cells(Rw, "B") <> "" Then
        Numb = Numb + 1
        Cells(Rw, "A") = Numb
    End If
Next Rw
End Sub
 
Lần chỉnh sửa cuối:
minhlev đã viết:
Xin phép được chỉnh lại code của Bác anhtuan1066 một chút. Bác xem thử như thế có được không?
Mã:
Public Sub STT()
Dim iRow As Integer
Numb = 0
iRow = Range("B65000").End(xlUp).Row
Columns("A:A").ClearContents
For Rw = 1 To iRow
    If Cells(Rw, "B") <> "" Then
        Numb = Numb + 1
        Cells(Rw, "A") = Numb
    End If
Next Rw
End Sub
Anh Minhlev ơi, cái này paste vào module à? vì em chưa hiểu về VBA. Anh có thể giải thích cơ bản nếu nhìn vào code tác giả viết thì làm thế nào để biết paste code vào module hay worksheet hay sheet... Cảm ơn anh trc. NHT
 
Bạn có thể Patse vào Module, This Workbook nếu như bạn muốn nó có tác dụng cho toàn bộ workbook (tuy nhiên theo tôi thì nên đặt trong module). Bạn Paste vào Sheet() nếu như bạn muốn nó chỉ có tác dụng cho sheet đó. Để code này hoạt động, bạn có thể hoặc nhấn tổ hợp phím Alt+F8 --> chọn code --> Run; hoặc tạo 1 nút bấm cho thực thi đoạn code trên; hoặc những cách khác mà tôi chưa biết.
_)()(-
 
anhtuan1066 đã viết:
Có lý... chạy dc rồi... cám ơn bạn minhlev...
Ko biết có thể cho nó chạy ở chế độ Worksheet_change ko nhỉ? Tôi đã thử và thấy ko ổn
Bác thử code sau xem.
PHP:
Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer
If Target.Column = 2 Then
    Numb = 0
    iRow = Range("B65000").End(xlUp).Row
    Columns("A:A").ClearContents
    For Rw = 1 To iRow
        If Cells(Rw, "B") <> "" Then
            Numb = Numb + 1
            Cells(Rw, "A") = Numb
        End If
    Next Rw
End If
End Sub
Tuy nhiên theo nhiều cao thủ trên diễn đàn thì không nên để code ở sự kiện Worksheet_Change bác ạ.
 
Web KT

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

Back
Top Bottom