Làm thế nào để khi nhập dữ liệu, nếu dữ liệu đó trùng với dữ liệu ở cột bên cạnh thì sẽ tự động nhảy xuống hàng ngay bên cạnh dữ liệu trùng đã có ạ? Các bác xem giúp em VD trong file đính kèm.
Em có vấn đề này nhờ mọi người giúp em.
Làm thế nào để khi nhập dữ liệu, nếu dữ liệu đó trùng với dữ liệu ở cột bên cạnh thì sẽ tự động nhảy xuống hàng ngay bên cạnh dữ liệu trùng đã có ạ? Các bác xem giúp em VD trong file đính kèm.
Mong các bác giúp em. Cảm ơn
Việc này phải dùng đến VBA rồi. Bạn dùng code sau nhé:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Intersect(Target, [B4:B13]) Is Nothing Then Exit Sub
Set Rng = Range("A4:A13").Find(what:=Target, lookat:=xlWhole)
If Not Rng Is Nothing Then
Application.EnableEvents = False
Rng.Offset(, 1) = Target
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Việc này phải dùng đến VBA rồi. Bạn dùng code sau nhé:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Intersect(Target, [B4:B13]) Is Nothing Then Exit Sub
Set Rng = Range("A4:A13").Find(what:=Target, lookat:=xlWhole)
If Not Rng Is Nothing Then
Application.EnableEvents = False
Rng.Offset(, 1) = Target
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Nó nằm sẵn trong file đính kèm ở bài trên chứ đâu nữa. Bạn click phải vào nhãn sheet, chọn View code là sẽ thấy code ngay thôi mà.
Nếu dữ liệu thật không giống như vậy thì bạn phải đưa file giống với thực tế nhất lên, như vậy mới có thể nhận được câu trả lời phù hợp.
Nó nằm sẵn trong file đính kèm ở bài trên chứ đâu nữa. Bạn click phải vào nhãn sheet, chọn View code là sẽ thấy code ngay thôi mà.
Nếu dữ liệu thật không giống như vậy thì bạn phải đưa file giống với thực tế nhất lên, như vậy mới có thể nhận được câu trả lời phù hợp.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Intersect(Target, [F4:F343]) Is Nothing Then Exit Sub
Set Rng = [E4:E343].Find(what:=Target, lookat:=xlWhole)
If Not Rng Is Nothing Then
Application.EnableEvents = False
Rng.Offset(, 1) = Target
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Còn vấn đề nhập xong không biết dữ liệu vừa nhập "chạy đi đâu mất" thì bạn tự chịu đấy nhé
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Intersect(Target, [F4:F343]) Is Nothing Then Exit Sub
Set Rng = [E4:E343].Find(what:=Target, lookat:=xlWhole)
If Not Rng Is Nothing Then
Application.EnableEvents = False
Rng.Offset(, 1) = Target
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Còn vấn đề nhập xong không biết dữ liệu vừa nhập "chạy đi đâu mất" thì bạn tự chịu đấy nhé
Lại làm phiền bác. Em thật stupid thế. Em nhập dữ liệu vào cột "CC thực tế" mà không thấy nó chạy gì cả. Bác cho em hỏi, khi nhập có phải làm thêm động tác nào nữa để công thức chạy không bác? Loại trừ khả năng dữ liệu không trùng bác nhé, vì em còn thử copy dữ liệu ở bên cột "Plate No" để thử mà nó cũng không thèm nhúc nhích luôn.
Bác giúp em.
Lại làm phiền bác. Em thật stupid thế. Em nhập dữ liệu vào cột "CC thực tế" mà không thấy nó chạy gì cả. Bác cho em hỏi, khi nhập có phải làm thêm động tác nào nữa để công thức chạy không bác? Loại trừ khả năng dữ liệu không trùng bác nhé, vì em còn thử copy dữ liệu ở bên cột "Plate No" để thử mà nó cũng không thèm nhúc nhích luôn.
Bác giúp em.
Có khả năng bạn chưa Enable macro nên code không chạy được.
Bạn Enable Macro theo cách sau:
- Trên Excel 2003: Chọn Tools\Macro\Security --> Chọn Medium hoặc Low (nên chọn Medium).
- Trên Excel 2007, 2010: Chọn Excel options\Trust center\Trust center settings\Macro settings --> chọn 1 trong 2 tùy chọn cuối cùng --> OK --> OK
Sau thiết lập trên, khởi động lại Excel để thiết lập có hiệu lực.
Có khả năng bạn chưa Enable macro nên code không chạy được.
Bạn Enable Macro theo cách sau:
- Trên Excel 2003: Chọn Tools\Macro\Security --> Chọn Medium hoặc Low (nên chọn Medium).
- Trên Excel 2007, 2010: Chọn Excel options\Trust center\Trust center settings\Macro settings --> chọn 1 trong 2 tùy chọn cuối cùng --> OK --> OK
Sau thiết lập trên, khởi động lại Excel để thiết lập có hiệu lực.
Em có thêm một cột nữa bên cạnh cột "CC thực tế" là cột "Số TT thảo đồ". Làm thế nào để dữ liệu trong cột "CC thực tế" chạy đi đâu thì dữ liệu ở hàng tương ứng trong cột "Số TT thảo đồ" chạy theo đó ạ?
Bác giúp em ạ.
Chào bác nghiaphuc,
Bác làm thêm hộ em cái này nữa với ạ.
Em có thêm một cột nữa bên cạnh cột "CC thực tế" là cột "Số TT thảo đồ". Làm thế nào để dữ liệu trong cột "CC thực tế" chạy đi đâu thì dữ liệu ở hàng tương ứng trong cột "Số TT thảo đồ" chạy theo đó ạ?
Bác giúp em ạ.
Muốn làm được thì phải hỏi lại bạn một xíu: Trên thực tế, bạn nhập cột "CC thực tế" trước hay cột "Số TT thảo đồ" trước? Vì trật tự 2 thao tác này có liên quan đến việc so sánh vị trí của Target trong code. Giả sử cứ để như cũ, khi bạn mới nhập xong cột "CC thực tế", chưa kịp nhập "Số TT thảo đồ" thì giá trị vừa nhập lại chạy đi đâu mất, vậy thì mình đâu có cơ sở để cho "Số TT thảo đồ" chạy theo?!
Muốn làm được thì phải hỏi lại bạn một xíu: Trên thực tế, bạn nhập cột "CC thực tế" trước hay cột "Số TT thảo đồ" trước? Vì trật tự 2 thao tác này có liên quan đến việc so sánh vị trí của Target trong code. Giả sử cứ để như cũ, khi bạn mới nhập xong cột "CC thực tế", chưa kịp nhập "Số TT thảo đồ" thì giá trị vừa nhập lại chạy đi đâu mất, vậy thì mình đâu có cơ sở để cho "Số TT thảo đồ" chạy theo?!
Chào bác nghiaphuc,
1. Cột "CC thực tế" em sẽ nhập trước ạ
2. Một vấn đề về file bác làm cho em, khi em nhập dữ liệu vào cột "CC thực tế", nếu dữ liệu trùng thì sẽ tự động nhảy cùng hàng rồi ạ, nhưng dữ liệu không trùng thì lại bị chèn mất( do vẫn đứng nguyên ở vị trí được nhập) khi có dữ liệu trùng được nhập. Thế là bị mất dữ liệu ạ. Liệu có thể dữ liệu không trùng thì sẽ tự nhảy sang cột khác bên cạnh được không ạ (em sẽ phải chèn thêm vào)?
Mong bác giúp em ạ. Bác xem giúp em ở file đính kèm dưới đây ạ.
Chào bác nghiaphuc,
1. Cột "CC thực tế" em sẽ nhập trước ạ
2. Một vấn đề về file bác làm cho em, khi em nhập dữ liệu vào cột "CC thực tế", nếu dữ liệu trùng thì sẽ tự động nhảy cùng hàng rồi ạ, nhưng dữ liệu không trùng thì lại bị chèn mất( do vẫn đứng nguyên ở vị trí được nhập) khi có dữ liệu trùng được nhập. Thế là bị mất dữ liệu ạ. Liệu có thể dữ liệu không trùng thì sẽ tự nhảy sang cột khác bên cạnh được không ạ (em sẽ phải chèn thêm vào)?
Mong bác giúp em ạ. Bác xem giúp em ở file đính kèm dưới đây ạ.
Thử đổi hướng một chút: Nhập dữ liệu từ Form chứ không nhập trực tiếp trên sheet nữa:
1. Code trên sheet bây giờ là:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [F4:F343]) Is Nothing Then FrmNhap.Show
End Sub
2. Trên Form (FrmNhap): Đối tượng chính là 2 Textbox: TxtCC (để nhập "CC thực tế") và TxtTT (để nhập "Số TT thảo đồ"), ngoài ra còn 1 nút CmdThoat để thoát khỏi Form. Code trên Form gồm:
PHP:
Private Sub CmdThoat_Click()
Unload Me
End Sub
PHP:
Private Sub TxtTT_AfterUpdate()
Dim Rng As Range
If TxtTT <> "" And TxtCC = "" Then
MsgBox "Chua nhap so CC thuc te."
TxtCC.SetFocus
Exit Sub
End If
Sheet3.Activate
Set Rng = [E4:E343].Find(what:=TxtCC, lookat:=xlWhole)
If Not Rng Is Nothing Then
Rng.Offset(, 1) = TxtCC
Rng.Offset(, 3) = TxtTT
Else
[G65536].End(xlUp).Offset(1) = TxtCC
[G65536].End(xlUp).Offset(, 1) = TxtTT
End If
TxtCC = "": TxtTT = "": TxtCC.SetFocus
End Sub
Cách sử dụng: Trên sheet khi click chuột vào 1 ô bất kỳ trên vùng F4:F343 thì Form sẽ hiện ra để nhập dữ liệu. Khi nào nhập chán rồi thì nhấn nút Thoát hoặc nhấn ESC để đóng Form.
Bạn tham khảo trong file đính kèm nhé.
Thử đổi hướng một chút: Nhập dữ liệu từ Form chứ không nhập trực tiếp trên sheet nữa:
1. Code trên sheet bây giờ là:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [F4:F343]) Is Nothing Then FrmNhap.Show
End Sub
2. Trên Form (FrmNhap): Đối tượng chính là 2 Textbox: TxtCC (để nhập "CC thực tế") và TxtTT (để nhập "Số TT thảo đồ"), ngoài ra còn 1 nút CmdThoat để thoát khỏi Form. Code trên Form gồm:
PHP:
Private Sub CmdThoat_Click()
Unload Me
End Sub
PHP:
Private Sub TxtTT_AfterUpdate()
Dim Rng As Range
If TxtTT <> "" And TxtCC = "" Then
MsgBox "Chua nhap so CC thuc te."
TxtCC.SetFocus
Exit Sub
End If
Sheet3.Activate
Set Rng = [E4:E343].Find(what:=TxtCC, lookat:=xlWhole)
If Not Rng Is Nothing Then
Rng.Offset(, 1) = TxtCC
Rng.Offset(, 3) = TxtTT
Else
[G65536].End(xlUp).Offset(1) = TxtCC
[G65536].End(xlUp).Offset(, 1) = TxtTT
End If
TxtCC = "": TxtTT = "": TxtCC.SetFocus
End Sub
Cách sử dụng: Trên sheet khi click chuột vào 1 ô bất kỳ trên vùng F4:F343 thì Form sẽ hiện ra để nhập dữ liệu. Khi nào nhập chán rồi thì nhấn nút Thoát hoặc nhấn ESC để đóng Form.
Bạn tham khảo trong file đính kèm nhé.