Công thức ở cột STT (1 người xem)

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

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

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 ạ.
 
trời ạ. làm gì mà dùng VB cho mất công.
sao kg dùng hàm ISBLANK kết hợp với hàm if thế này nhé.
ở ô a1 nhập công thức sau.
=IF(ISBLANK(B1);"";1)
Sau đó xuống ô a2 nhập công thức
=if(isblank(b2);"";a1+1)
sau đó bạn chép xuống hết vùng dử liệu của cột A
thế là xong
công thức này có thể diển giải thế này
nếu b1 là rổng thì a1 được gán chuổi rổng ngược lại gán 1
nếu b2 là rổng thì a2 gán chuổi rổng ngược lại gán = a1+1
thân!
 
Lần chỉnh sửa cuối:
Các bạn cho hỏi. Muốn thiết lập công thức đánh số thứ tự ở cột A theo số liệu ở cột D.
Nếu cột D rổng không có số liệu thì STT sẽ tự động được đánh theo cột C còn ngược lại cột D có số liệu sẽ được đánh theo cột D. Các bạn chỉ dùm nhé!
 
Các bạn cho hỏi. Muốn thiết lập công thức đánh số thứ tự ở cột A theo số liệu ở cột D.
Nếu cột D rổng không có số liệu thì STT sẽ tự động được đánh theo cột C còn ngược lại cột D có số liệu sẽ được đánh theo cột D. Các bạn chỉ dùm nhé!
Tôi đưa ví dụ giã lập thế này, bạn thử đánh số thứ tự bằng tay vào file xem thử thì mới đoán chính xác đựoc ý bạn
 

File đính kèm

Mình gửi file kèm bạn xem lại nhé. Ở sheet nhu cau.
 

File đính kèm

Lần chỉnh sửa cuối:
Các bạn cho hỏi. Muốn thiết lập công thức đánh số thứ tự ở cột A theo số liệu ở cột D.
Nếu cột D rổng không có số liệu thì STT sẽ tự động được đánh theo cột C còn ngược lại cột D có số liệu sẽ được đánh theo cột D. Các bạn chỉ dùm nhé!

Bạn xem file đính kèm nhé, sheet Nhucau.
 

File đính kèm

Chào các bạn, chúc các bạn một ngày mới nhiều niềm vui và hạnh phúc.
Các bạn vui lòng xem lại nhé vì lúc đưa ví dụ không gửi file kèm nên nói là cột C và D nhưng thực tế trong file là cột E và F. STT được đánh theo cột E nhưng khi có số lượng bổ sung ở cột F thì số lượng sẽ được đánh theo cột F.
 
Chào các bạn, chúc các bạn một ngày mới nhiều niềm vui và hạnh phúc.
Các bạn vui lòng xem lại nhé vì lúc đưa ví dụ không gửi file kèm nên nói là cột C và D nhưng thực tế trong file là cột E và F. STT được đánh theo cột E nhưng khi có số lượng bổ sung ở cột F thì số lượng sẽ được đánh theo cột F.
Vậy bạn thử đánh số thứ tự bằng tay vào file cái xem nào?
 
Các bạn cho hỏi. Muốn thiết lập công thức đánh số thứ tự ở cột A theo số liệu ở cột D.
Nếu cột D rổng không có số liệu thì STT sẽ tự động được đánh theo cột C còn ngược lại cột D có số liệu sẽ được đánh theo cột D. Các bạn chỉ dùm nhé!
Bạn xem file đính kèm có đúng ý bạn ko nha.
 
Lần chỉnh sửa cuối:
Với công thức này: =IF(F10<>0,A10+1,A10) trong file nhucau thì cột STT được đánh theo cột F vì không biết nên tạm sử dụng công thức này để đánh STT theo cột F. Nhưng ý của mình muốn khi cột F này ở tất cả các dòng nếu không có số liệu thì cột thứ tự được đánh theo cột E (nghĩa là số lượng nhu cầu củ) còn khi có số lượng nhu cầu mới ở cột F có thì đánh STT theo cột F số lượng nhu cầu mới. Vừa tiện dụng cho cả 2 cột để khi lấy số lượng nhu cầu cho cột E hoặc F thì cột STT sẽ hiển thị tương ứng với cột đó.
 
Lần chỉnh sửa cuối:
Dear My Ngoc,

Bạn xem thử xem đã đúng ý bạn chưa???
 

File đính kèm

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

Back
Top Bottom