Giúp VBA Tự động nhập số khi có dữ liệu

Liên hệ QC

chidung2009

Thành viên hoạt động
Tham gia
12/9/12
Bài viết
123
Được thích
8
Có một file Excel như hình dưới. Cột A Số thứ tự đã có VBA tự động nhập khi nhập dữ liệu cột D
Hiện em muốn cột C sẽ tự động điền Số TL như sau:
- Khi nhập dữ liệu ở Cột D thì cột C tương ứng sẽ tự động tăng 1 đơn vị. Nếu cột C hàng trên chưa có Số TL thì hàng dưới để trống
Mong các anh chị giúp em với ạ
 

File đính kèm

  • GPE_2022.xlsb
    15.1 KB · Đọc: 23
A6 : . . . . .
Mã:
=IF(C6="","",COUNTIFS($D$6:D6,"<>",$C$6:C6,"<>"))
 
Upvote 0
Hôm bữa mình giải thích để viết VBA hơi khó hiểu. Nay mình giải thích lại như sau:
- Khi nhập dữ liệu tại ô D7 thì kết quả của ô C7 = C6+1
Với điều kiện:
- ô C6 đã có giá trị (số)
- ô C7 chưa có giá trị (số)
* Ngược lại:
- Nếu ô C6 ="" (k có dữ liệu) thì ô C7 không thực hiện câu lệnh, tức C7="" (Vẫn giữ nguyên)
- Nếu ô C7 (đã có dữ liệu) mà ô D7 sửa lại dữ liệu hoặc ko thay đổi thì tại ô C7 vẫn giữ nguyên giá trị như cũ.
- Nếu ô D7 xoá hết dữ liệu về "" thì ô C7 cũng xoá dữ liệu theo, tức C7=""

+ Riêng tại hàng thứ 6: Do ô C5 là tiêu đề nên khi nhập dữ liệu ở D6 thì C6 vẫn giữ nguyên giá trị như cũ.

B8716CEC-47BE-451C-B34C-8DFF19E19A2E.jpeg
Bài đã được tự động gộp:

Mã:
=IF(C6="","",COUNTIFS($D$6:D6,"<>",$C$6:C6,"<>"))
Giúp mình bằng vba vs ạ. Nội dung như ghi ở trên
 
Upvote 0
Hôm bữa mình giải thích để viết VBA hơi khó hiểu. Nay mình giải thích lại như sau:
- Khi nhập dữ liệu tại ô D7 thì kết quả của ô C7 = C6+1
Với điều kiện:
- ô C6 đã có giá trị (số)
- ô C7 chưa có giá trị (số)
* Ngược lại:
- Nếu ô C6 ="" (k có dữ liệu) thì ô C7 không thực hiện câu lệnh, tức C7="" (Vẫn giữ nguyên)
- Nếu ô C7 (đã có dữ liệu) mà ô D7 sửa lại dữ liệu hoặc ko thay đổi thì tại ô C7 vẫn giữ nguyên giá trị như cũ.
- Nếu ô D7 xoá hết dữ liệu về "" thì ô C7 cũng xoá dữ liệu theo, tức C7=""

+ Riêng tại hàng thứ 6: Do ô C5 là tiêu đề nên khi nhập dữ liệu ở D6 thì C6 vẫn giữ nguyên giá trị như cũ.

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


Giúp mình bằng vba vs ạ. Nội dung như ghi ở trên
Thử đoạn code này. Bạn diễn giải dễ hiểu ghê. Hy vọng trúng ý 50%
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
   If .Column = 4 Then
      If .Row > 5 Then
         .Offset(, -3) = .Offset(-1, -3) + 1
         If .Offset(-1, -1) > 0 Then
            .Offset(, -1) = .Offset(-1, -1) + 1
         End If
      End If
   End If
End With
End Sub
 
Upvote 0
Thử đoạn code này. Bạn diễn giải dễ hiểu ghê. Hy vọng trúng ý 50%
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
   If .Column = 4 Then
      If .Row > 5 Then
         .Offset(, -3) = .Offset(-1, -3) + 1
         If .Offset(-1, -1) > 0 Then
            .Offset(, -1) = .Offset(-1, -1) + 1
         End If
      End If
   End If
End With
End Sub
Hiện mình đang ngoài đường nên chưa thử đc. Cảm ơn bạn rất nhiều
 
Upvote 0
Dùng thử cái này nhé:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D6:D99999")) Is Nothing Then Exit Sub ' Code chi chay khi cot D thay doi
With Target.Offset(, -1) ' o ben canh tai cot C
    If IsEmpty(Target) Then
        .ClearContents ' neu D = "" thi xoa C
    Else
        Select Case IsNumeric(.Offset(-1, 0)) And Not IsEmpty(.Offset(-1, 0)) ' neu o phia tren tai cot C la so
            Case True
                .Value = .Offset(-1, 0) + 1 ' cong them 1
            Case Else
                .ClearContents
        End Select
    End If
End With
Range("A6:A99999").ClearContents
Range("A6", Target.Offset(, -3)).Value = Evaluate("=ROW(A6:A" & Target.Row & ")-5") ' dien STT tai cot A
End Sub
 
Upvote 0
Dùng thử cái này nhé:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D6:D99999")) Is Nothing Then Exit Sub ' Code chi chay khi cot D thay doi
With Target.Offset(, -1) ' o ben canh tai cot C
    If IsEmpty(Target) Then
        .ClearContents ' neu D = "" thi xoa C
    Else
        Select Case IsNumeric(.Offset(-1, 0)) And Not IsEmpty(.Offset(-1, 0)) ' neu o phia tren tai cot C la so
            Case True
                .Value = .Offset(-1, 0) + 1 ' cong them 1
            Case Else
                .ClearContents
        End Select
    End If
End With
Range("A6:A99999").ClearContents
Range("A6", Target.Offset(, -3)).Value = Evaluate("=ROW(A6:A" & Target.Row & ")-5") ' dien STT tai cot A
End Sub
Cảm ơn bạn nhiều lắm
 
Upvote 0
Web KT
Back
Top Bottom