Cách điền Danh mục nguyên phụ liêu tương ứng. (1 người xem)

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

thanhlp2007

Thành viên thường trực
Tham gia
24/10/07
Bài viết
201
Được thích
11
Chào cả nhà.

Chúc cả nhà một ngày làm việc vui vẻ và hiệu quả.
Lâu quá không ghé được do bận nhiều việc. Hôm nay mình làm việc thì gặp ngay vấn đề nan giải.

Mong được các sư huynh chỉ giáo.

Chẳng qua là mình có 2 sheet, 1 là Danh muc NPL, 2 là Nhập liệu. Tuy nhiên mình không biết cách lấy từ DMNPL sang Sheet NHAPLIEU. Mình đưa VD đính kèm.

Mong được tư vấn.

Mình gửi file đính kèm.

Cám ơn
 

File đính kèm

Bạn xem thử đúng ý mình chưa.
 

File đính kèm

Giải quyết yêu cầu này đơn giản nhất có lẽ tao Validation bằng VBA
Bạn tham khảo file xem sao (Bạn chỉ cần gõ vài ký tự đầu của tên sẽ có Ds tương úng)?


P/s: Mình Load lại file sau khi chọn thì cũng điền lại tên đầy đủ bên cột B
 

File đính kèm

Lần chỉnh sửa cuối:
Đúng rồi đó Sealand. Nhưng bạn có thể hướng dẫn giúp mình cách làm được không, vì file này là file mẫu nên có thê mình thêm chút mắm, muối... nữa.

Mong được chỉ giúp.

Cám ơn
 
Bạn đã tham gia từ 2007 thì chắc bạn không còn lạ dân GPE sử dụng VBA.
Nhưng thể theo đề nghị của bạn mình sẽ sửa lại Code 1 chút để dễ thích ứng hơn và hướng dẫn bạn cách "quậy" 1 chút. Có chuyện gì ráng chịu.

1/Đây là Code bạn sẽ sử dụng:

Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Dim Tm1, Tm2, Ds, i
Tm1 = Sheets("DMNPL").Range("A3:B" & Sheets("DMNPL").[A65000].End(3).Row)
Tm2 = Sheets("DMNPL").Range("D3:E" & Sheets("DMNPL").[D65000].End(3).Row)
Application.EnableEvents = False
On Error Resume Next
If Not Intersect(Target, [B3:B86]) Is Nothing Then
For i = 1 To IIf(UBound(Tm1, 1) > UBound(Tm2, 1), UBound(Tm1, 1), UBound(Tm2, 1))
If Tm1(i, 2) Like Target & "*" Then Ds = Ds & IIf(Ds = "", "", ",") & Tm1(i, 1)
If Tm2(i, 2) Like Target & "*" Then Ds = Ds & IIf(Ds = "", "", ",") & Tm2(i, 1)
Next i
With Target.Offset(, -1).Validation
 .Delete
 If Target = "" Or Ds = "" Then GoTo Thoat
 If Ds <> "" Then .Add Type:=xlValidateList, Formula1:=Ds
 End With
Target.Offset(, -1).Select
SendKeys ("%{DOWN}")
End If
If Not Intersect(Target, [A3:A86]) Is Nothing Then
If Target = "" Then Target.Offset(, 1) = ""
If IsError(WorksheetFunction.VLookup(Target, Tm1, 2, 0)) Then
Target.Offset(, 1) = WorksheetFunction.VLookup(Target, Tm2, 2, 0)
Else
Target.Offset(, 1) = WorksheetFunction.VLookup(Target, Tm1, 2, 0)
End If
Target.Offset(, 1).Select
End If
Thoat:
Application.EnableEvents = True
End Sub

2/Bạn nhấn chuột phải lên SheetTab của sheet NHAPLIEU, chọn View Code (Có biểu tượng kính lúp đó).Nó mở ra 1 cửa sổ . Bạn chép Code này vào đó.

Rồi bây giờ bạn Test , chỉnh sửa theo ý bạn nha. Vướng đâu tính sau.
 
Gửi sealand,

Có chút vướng mắc tại sheet NHAP LIEU.
Nếu như vậy thì mình chỉ nhập được vào cột B, nó sẽ hiện ra tương ứng theo cột A.
Nhưng bây giờ ví dụ mình muốn di chuyển : nhập vào cột D chẳng hạn thì sẽ tương ứng theo cột C.

Vui long chỉ giúp.
Cam on
 
Mấu chốt để xác định cột nào nó là mấy dòng sau, bạn tùy cơ điều chỉnh nha

Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Dim Tm1, Tm2, Ds, i
Tm1 = Sheets("DMNPL").Range("A3:B" & Sheets("DMNPL").[A65000].End(3).Row)
Tm2 = Sheets("DMNPL").Range("D3:E" & Sheets("DMNPL").[D65000].End(3).Row)
Application.EnableEvents = False
On Error Resume Next
[B][COLOR=#ff0000]If Not Intersect(Target,[SIZE=3] [SIZE=4][B3:B86][/SIZE][/SIZE]) Is Nothing Then[/COLOR][/B][I][COLOR=#ee82ee] 'Đây là cột nhập tên[/COLOR][/I]
For i = 1 To IIf(UBound(Tm1, 1) > UBound(Tm2, 1), UBound(Tm1, 1), UBound(Tm2, 1))
If Tm1(i, 2) Like Target & "*" Then Ds = Ds & IIf(Ds = "", "", ",") & Tm1(i, 1)
If Tm2(i, 2) Like Target & "*" Then Ds = Ds & IIf(Ds = "", "", ",") & Tm2(i, 1)
Next i
With Target.Offset(, -1).Validation
 .Delete
 If Target = "" Or Ds = "" Then GoTo Thoat
 If Ds <> "" Then .Add Type:=xlValidateList, Formula1:=Ds
 End With
Target.Offset(, -1).Select
SendKeys ("%{DOWN}")
End If
[B][COLOR=#ff0000]If Not Intersect(Target, [SIZE=4][A3:A86][/SIZE]) Is Nothing Then[/COLOR][/B][I][COLOR=#ee82ee] 'Đây là cột chọn mã sau đó điền lại cho cột tên[/COLOR][/I]
If Target = "" Then Target.Offset(, 1) = ""
If IsError(WorksheetFunction.VLookup(Target, Tm1, 2, 0)) Then
Target.Offset(, 1) = WorksheetFunction.VLookup(Target, Tm2, 2, 0)
Else
Target.Offset(, 1) = WorksheetFunction.VLookup(Target, Tm1, 2, 0)
End If
Target.Offset(, 1).Select
End If
Thoat:
Application.EnableEvents = True
End Sub
 
Lần chỉnh sửa cuối:
Chào các anh chi,

Bây giờ tình hình thay đổi ngược lại.
Mình muốn bây giờ chỉ cần đánh mã NPL thì nó sẽ hiện ra tên vật tư tương ứng. Vui lòng hướng dẫn giúp mình.

Cám on nhiều
 
Chào các anh chi,

Bây giờ tình hình thay đổi ngược lại.
Mình muốn bây giờ chỉ cần đánh mã NPL thì nó sẽ hiện ra tên vật tư tương ứng. Vui lòng hướng dẫn giúp mình.

Cám on nhiều

Cách suy nghĩ của bạn chỉ nhập riêng 1 NPL, nếu nhập riêng 1 loại với nhiều dây băng cùng lúc thì làm thế nào? Nên nghĩ cách khác.
 
Tôi thấy yêu cầu của bạn nên dùng 1 form chọn hay Listbox thì hơn
 

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

Back
Top Bottom