Giúp em làm các nút đổ xuống ở các cột trong excel với ạ

Liên hệ QC

havio

Thành viên mới
Tham gia
28/4/09
Bài viết
9
Được thích
1
em có 1 bảng tổng hợp chi phí như file gửi kèm gồm 2 sheet: sheet DL và sheet TH..
Trong Sheet DL: thực tế là vẫn còn cập nhập thêm , vd trong mục Vải thì vẫn sẽ còn phát sinh vải của các cty khác hoặc thêm các loại vải khác của các đối tác đang lấy hàng
do đó em cần làm công thức để khi mình thêm hay bớt loại vải thì bên sheet TH vẫn tự động update theo
Câu hỏi của em là :
trong sheet TH : em cần tạo ra các nút đổ xuống ở các cột : Loại, tên vật tư, mã. Sao cho khi em chọn 1 loại vật tư ở cột Loại thì bên cột Tên Vật tư sẽ hiện ra các tiểu mục liên quan. vd em chọn Vải-> bên nút đổ của Tên vật tư sẽ đổ ra : Vaicomay,vaiphucduy,vaithuanh,vaikan.v.v

Sau đó khi em chọn 1 tên vật tư phù hợp (vd VAICOMAY) thì bên cột Mã khi ấn nút đổ xuống sẽ hiện các mã vật tư liên quan (vd: vaisophia-08, chenilaplan.v.v)
sau đó ở cột ĐVT và đơn giá sẽ tự động chọn theo Dữ liệu ở sheet DL .

Anh chị giúp em làm bảng này với ạ..em đang cần gấp, mà làm mãi ko đc vì ko hiểu về phần Validation này gì cả...
 

File đính kèm

  • VD.xls
    22 KB · Đọc: 69
Còn có thể gọn hơn, nhưng bạn thúc hối quá, đành xài tạm xem sao. nha!

PHP:
Option Explicit
 Dim Sh As Worksheet, Rng As Range, Clls As Range

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim sRng As Range, lRng As Range
 Dim eRw As Long
 
 Set Sh = Sheets("DL"):                                  eRw = Sh.[c65500].End(xlUp).Row
 If Not Intersect(Target, [c2]) Is Nothing Then
   If Target.Value = "" Then
      [c65500].End(xlUp).Resize(, 3).Value = "":         Exit Sub
   End If
   [c65500].End(xlUp).Offset(1).Value = Target.Value
   
   Set Rng = Sh.Range("A4:A" & eRw)
   Set sRng = Rng.Find([c2].Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      Set lRng = Sh.Range(sRng, sRng.End(xlDown).Offset(-1)).Offset(, 1)
      If lRng.Rows.Count > eRw Then Set lRng = Sh.Range(sRng.Offset(, 1), Sh.Cells(eRw, "B"))
      Sh.Range("Ten").ClearContents
      CopyAll lRng, "I"
   End If
 ElseIf Not Intersect(Target, [D2]) Is Nothing Then
    If Target.Value = "" Then
      [d65500].End(xlUp).Resize(, 2).Value = "":         Exit Sub
   End If

   [d65500].End(xlUp).Offset(1).Value = Target.Value
   Set Rng = Sh.Range("b4:b" & eRw)
   Set sRng = Rng.Find([D2].Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      Set lRng = Sh.Range(sRng, sRng.End(xlDown).Offset(-1)).Offset(, 1)
      If lRng.Rows.Count > eRw Then Set lRng = Sh.Range(sRng.Offset(, 1), Sh.Cells(eRw, "B"))
      Sh.Range("Ma").ClearContents
      CopyAll lRng, "J"
   End If
 ElseIf Not Intersect(Target, [E2]) Is Nothing Then
   [e65500].End(xlUp).Offset(1).Value = Target.Value
 End If
End Sub
PHP:
'GPE.COM          GPE.COM              GPE.COM'
PHP:
Sub CopyAll(Rng As Range, Col As String)
 Dim Cls As Range
 For Each Cls In Rng
   If Cls.Value <> "" Then
      With Sh.Cells(65500, Col).End(xlUp).Offset(1)
         .Value = Cls.Value
      End With
   End If
 Next Cls
End Sub

Hướng dẫn cách dùng:

(*) Chọn lần lượt loại=>Vật tư=> Mã theo tuần tự C2 => D2=> E2
Khi đó dữ liệu trong ô chọn sẽ chép đến dòng cuối của cột.

(*) Nếu lỡ chọn sai thì ta chọn lại dòng trắng trong hộp tương ứng để xóa dữ liệu sai đi.

Bạn thử nhiều lần xem còn khuyết tật nào không nữa nha.

Sau cùng chúng ta sẽ hoàn thiện.

Nhớ lần sau không nên hối thúc như vậy, hơi bị khiếm nhã đó nha!.
 

File đính kèm

  • GPE.rar
    13.1 KB · Đọc: 79
Mình gộp chung cho gọn lại đây

PHP:
Option Explicit
 Dim Sh As Worksheet, Rng As Range, Clls As Range

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim sRng As Range, lRng As Range, Cls As Range:         Dim eRw As Long
 Dim Cot As String, Cot0 As String
 
 Set Sh = Sheets("DL"):                                  eRw = Sh.[c65500].End(xlUp).Row
 If Not Intersect(Target, [c2]) Is Nothing Then
   If Target.Value = "" Then
      [c65500].End(xlUp).Resize(, 3).Value = "":         Exit Sub
   End If
   [c65500].End(xlUp).Offset(1).Value = Target.Value
   Set Rng = Sh.Range("A4:A" & eRw):                     Cot0 = "I"
   Cot = "B":                                            GoTo GPE
 ElseIf Not Intersect(Target, [D2]) Is Nothing Then
    If Target.Value = "" Then
      [d65500].End(xlUp).Resize(, 2).Value = "":         Exit Sub
   End If
   [d65500].End(xlUp).Offset(1).Value = Target.Value
   Set Rng = Sh.Range("b4:b" & eRw):                     Cot0 = "J"
   Cot = "C":                                            GoTo GPE
 ElseIf Not Intersect(Target, [E2]) Is Nothing Then
   [e65500].End(xlUp).Offset(1).Value = Target.Value
 End If
 Exit Sub
GPE:
 Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      Set lRng = Sh.Range(sRng, sRng.End(xlDown).Offset(-1)).Offset(, 1)
      If lRng.Rows.Count > eRw Then Set lRng = Sh.Range(sRng.Offset(, 1), Sh.Cells(eRw, Cot))
      
      Sh.Range(Switch(Cot = "B", "Ten", Cot = "C", "Ma")).ClearContents  '<=|'
  
      For Each Cls In lRng
         If Cls.Value <> "" Then
            With Sh.Cells(65500, Cot0).End(xlUp).Offset(1)
               .Value = Cls.Value
            End With
         End If
      Next Cls
   End If
End Sub
 
Lần chỉnh sửa cuối:
hic..e ko biết là nó phức tạp thế này, sorry, nhưng nếu chỉ có 1 cách này thì thú thật em chả hiểu gì hết :( ...có cách nào đơn giản ko ạ, như là chỉ dùng công thức ý ạ. bài trên em đã dùng thử nhưng hình như chưa đc ạ, khi em chọn Loại, nó ko hiện các tên tương ứng..
 
Lần chỉnh sửa cuối:
hic..e ko biết là nó phức tạp thế này, sorry, nhưng nếu chỉ có 1 cách này thì thú thật em chả hiểu gì hết :( ...có cách nào đơn giản ko ạ, như là chỉ dùng công thức ý ạ
Nếu dữ liệu tại sheet DL được fill đầy đủ (không có cell rổng nào) như kiểu vầy:

untitled.JPG

Đồng thời nếu dữ liệu nhập được sort trước thì bài này hoàn toàn có thể dùng công thức tạo ra các name động cho Validation (cũng không phức tạp lắm)
Nếu bạn đồng ý thì ta tiếp tục
Tham khảo trước bài này: http://www.giaiphapexcel.com/forum/showthread.php?7188-H%C3%A0m-Offset-v%C3%A0-Validation
 
ko vấn đề j ạ..cách trình bày nào phù hợp là ok hết ạ..em chỉ sợ nếu để lặp lại như thế thì khi chọn trong nút đổ nó cũng lặp lại ,vd : ấn nút đổ xuống sẽ có 19 từ Vải. như thế ko ổn,còn nếu ko như thế thì ok hết ạ..em nghĩ cách anh nói có vẻ giống cách em hình dung ..hii..thank anh
 
ko vấn đề j ạ..cách trình bày nào phù hợp là ok hết ạ..em chỉ sợ nếu để lặp lại như thế thì khi chọn trong nút đổ nó cũng lặp lại ,vd : ấn nút đổ xuống sẽ có 19 từ Vải. như thế ko ổn,còn nếu ko như thế thì ok hết ạ..em nghĩ cách anh nói có vẻ giống cách em hình dung ..hii..thank anh
Xem file tôi làm đây!
Trong file có tổng cộng 3 Validation List... Vì List2 có được khi ta chọn List1 và List3 có được khi ta chọn từ List2 nên phải dùng name hơi nhiều và tương đối phức tạp (các cao thủ khác góp ý rút gọn nhé)
Tuy nhiên thì có lẽ dùng công thức dù sao cũng dể nuốt hơn nếu như bạn chưa biết gì về code VBA, đúng không?
Với cách nhập liệu như tôi vừa nêu ở trên, ngay cả khi dùng code cũng sẽ khỏe hơn gấp nhiều lần
 

File đính kèm

  • VD.xls
    38.5 KB · Đọc: 64
em vừa xem file. Tất cả yêu cầu đều đc giải quyết hết rồi ạ..Cảm ơn anh nhiều lắm, nhưng em có 1 thắc mắc là : em vừa làm thử, nếu sửa thì vẫn đúng nhưng nếu thêm dòng thì Công thức bị sai..
vd bây giờ trong mục Bông, em lấy thêm Bôngcaocap..chèn thêm dòng vào là sai luôn..hik..làm sao bây giờ ạ..Yêu cầu công việc của em là phải thêm nhiều lắm ạ
 
Lần chỉnh sửa cuối:
em vừa xem file. Tất cả yêu cầu đều đc giải quyết hết rồi ạ..Cảm ơn anh nhiều lắm, nhưng em có 1 thắc mắc là : em vừa làm thử, nếu sửa thì vẫn đúng nhưng nếu thêm dòng thì Công thức bị sai..
vd bây giờ trong mục Bông, em lấy thêm Bôngcaocap..chèn thêm dòng vào là sai luôn..hik..làm sao bây giờ ạ..Yêu cầu công việc của em là phải thêm nhiều lắm ạ
Thêm dữ liệu chẳng có vấn đề gì, nhưng sau khi hoàn tất bạn phải nhớ sort lại dữ liệu nhập ---> Mục địch cho các LOẠI, TEN, MA nào giống nhau được nằm gần nhau
Thử lại xem!
 
Sao NDU không vo cho trót, vót cho tròn luôn đi cái, hì!

Thêm dữ liệu chẳng có vấn đề gì, nhưng sau khi hoàn tất bạn phải nhớ sort lại dữ liệu nhập ---> Mục địch cho các LOẠI, TEN, MA nào giống nhau được nằm gần nhau
Thử lại xem!

Sẵn tay làm luôn cho bạn ấy cái macro xếp lại dữ liệu luôn đi. Ai lại "nữa vời" zậy không biết!

Khà, khà,. . . )(&&@@ @!##
 
Em đã thử lại rồi ạ..cảm ơn anh rất nhiều..nhưng có 1 vấn đề nữa, là em rất muốn biết cách làm, anh có thể chỉ giúp em hoặc cho em link bài nào tương tự,
 
Lần chỉnh sửa cuối:
Em đã thử lại rồi ạ..cảm ơn anh rất nhiều..nhưng có 1 vấn đề nữa, là em rất muốn biết cách làm, anh có thể chỉ giúp em hoặc cho em link bài nào tương tự, bài anh bảo tham . mail : hoanghavio@gmail.com
Công thức nằm ở 2 chổ:
- Trong Define Name ---> Vào menu Insert\Name\Define sẽ thấy
- Tại cột K và L của sheet DL
Lưu ý các tham chiếu tương đối trong name nhé
-------------------
Link liên quan tôi đã cho bạn tại bài số 5 rồi còn gì
 
em có 1 bảng tổng hợp chi phí như file gửi kèm gồm 2 sheet: sheet DL và sheet TH..
Trong Sheet DL: thực tế là vẫn còn cập nhập thêm , vd trong mục Vải thì vẫn sẽ còn phát sinh vải của các cty khác hoặc thêm các loại vải khác của các đối tác đang lấy hàng
do đó em cần làm công thức để khi mình thêm hay bớt loại vải thì bên sheet TH vẫn tự động update theo
Câu hỏi của em là :
trong sheet TH : em cần tạo ra các nút đổ xuống ở các cột : Loại, tên vật tư, mã. Sao cho khi em chọn 1 loại vật tư ở cột Loại thì bên cột Tên Vật tư sẽ hiện ra các tiểu mục liên quan. vd em chọn Vải-> bên nút đổ của Tên vật tư sẽ đổ ra : Vaicomay,vaiphucduy,vaithuanh,vaikan.v.v

Sau đó khi em chọn 1 tên vật tư phù hợp (vd VAICOMAY) thì bên cột Mã khi ấn nút đổ xuống sẽ hiện các mã vật tư liên quan (vd: vaisophia-08, chenilaplan.v.v)
sau đó ở cột ĐVT và đơn giá sẽ tự động chọn theo Dữ liệu ở sheet DL .

Anh chị giúp em làm bảng này với ạ..em đang cần gấp, mà làm mãi ko đc vì ko hiểu về phần Validation này gì cả...
Tặng bạn thêm một cách nếu muốn nhập liệu "u như kỹ"
Bạn nhập thoải mái, nhập xong ấn cái nút để tạo vùng chọn validation (vùng này đem đi đâu cũng được, mình để gần đó dễ kiểm tra)
Vì không biết các mặt hàng nhiều cỡ "bi" nhiêu nên tạm thời quy định:
-Loại: phải từ 3 ký tự trở lên (không được trùng)
-Tên: những Tên trong cùng một Loại, 3 ký tự đầu phải giống Loại (trong thí dụ của bạn có KHOA là không ổn)
-Mã: không quan tâm
Nếu nhập thiếu cứ chèn dòng vào nhập tiếp (nhớ nhập xong thì ấn cái nút)
Mình chỉ làm cho bạn mấy cái "thằng" validation thôi nhé, mấy cái còn lại tự làm
 

File đính kèm

  • validation(111).xls
    68.5 KB · Đọc: 62
Web KT

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

Back
Top Bottom