Cho mình hỏi cách tạo list (1 người xem)

Liên hệ QC

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

hoangvinh_tb

Thành viên mới
Tham gia
16/6/08
Bài viết
20
Được thích
4
Cho mình hỏi cách tạo list: VD (FILE ĐÍNH KÈM) Xin các bắc chỉ dùm nhé

From Sa_DQ:
Bài này sai BOX & sẽ được dòi nới khác trong thời gian gần đây.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Cho mình hỏi cách tạo list: VD (FILE ĐÍNH KÈM) Xin các bắc chỉ dùm nhé
Nếu các chi tiết củ một mã hàng luôn nằm một chỗ (liên tục, không rời rạc) thì dùng công thức này:
Mã:
=IF(ROW(A1)>COUNTIF($B$5:$B$17,$G$4),"",INDEX($C$5:$C$17,MATCH($G$4,$B$5:$B$17,)+ROW(A1)-1))
Không thì phải dùng công thức mảng.
Copy công thức vào ô H4 rồi kéo xuống.
 
Không phải vậy ! mình muón nó hiện toàn bộ chi tiết của mã hàng đó và mình chỉ cần click chuận chọn chi tiết là xong! mong bạn giúp đỡ! cám ơn nhiều
 
Gõ công thức xong, kéo fill xuống ông trời à!
------
Hình như ý tác giả là như thế này chú ơi:
Chọn G4 = Ghe 263 => H4 => xổ ra 1 lits: Chan truoc, chan sau....của sản phẩm ghế 263 => chọn chi tiết tương ứng.
Chọn G5 = Ghe 759 => H5 => xổ ra 1 lits: Chan truoc, chan sau....của sản phẩm ghế 759 => chọn chi tiết tương ứng.
 
------
Hình như ý tác giả là như thế này chú ơi:
Chọn G4 = Ghe 263 => H4 => xổ ra 1 lits: Chan truoc, chan sau....của sản phẩm ghế 263 => chọn chi tiết tương ứng.
Chọn G5 = Ghe 759 => H5 => xổ ra 1 lits: Chan truoc, chan sau....của sản phẩm ghế 759 => chọn chi tiết tương ứng.
Nếu đúng là vậy thì xem bài này:
http://www.giaiphapexcel.com/forum/showthread.php?t=3685
Một công nhiều việc luôn
 
Nếu vậy thì dùng name động.
 

File đính kèm

Nếu vậy thì dùng name động.
----
Tôi nghỉ chính xác theo yêu cầu của tác giả ( ngành gổ ), bạn huuthang_bd cho tôi hỏi chổ ghi công thức (Refers to) làm thế nào để phóng lớn ( để cho dể nhìn công thức ), code vba viết cho yêu cầu này có đơn giản không ?
 
----
Tôi nghỉ chính xác theo yêu cầu của tác giả ( ngành gổ ), bạn huuthang_bd cho tôi hỏi chổ ghi công thức (Refers to) làm thế nào để phóng lớn ( để cho dể nhìn công thức ), code vba viết cho yêu cầu này có đơn giản không ?
Tôi dùng Excel 2007. Di chuyển con chuột đến góc cửa sổ cho xuất hiện dấu mũi tên rồi kéo rộng ra. Không biết Excel 2003 có kéo ra được không. Mà muốn xem công thức trong name thì F3 | Paste list.
Code thì cũng làm như vậy thôi. Nhưng tội gì phải dùng code nhỉ.
 
Code thì cũng làm như vậy thôi. Nhưng tội gì phải dùng code nhỉ.
----------
Cám ơn bạn đã quan tâm, tôi cũng làm trong ngành gỗ nên nhìn vào yêu cầu của tác giả là tôi hiểu ngay. Công thức của bạn rất tốt, nhưng trong thực tế còn lắm vấn đề phức tạp lắm vì vậy tôi mới hỏi code là vậy.
Thân chào.
 
----------
Cám ơn bạn đã quan tâm, tôi cũng làm trong ngành gỗ nên nhìn vào yêu cầu của tác giả là tôi hiểu ngay. Công thức của bạn rất tốt, nhưng trong thực tế còn lắm vấn đề phức tạp lắm vì vậy tôi mới hỏi code là vậy.
Thân chào.
Nếu vậy thì còn phải tùy vào từng trường hợp nữa. Không có công thức hay code này áp dụng tốt trong tất cả các trường hợp cả. Mỗi trường hợp sẽ có một cách giải quyết tối ưu riêng.
 
Nếu vậy thì còn phải tùy vào từng trường hợp nữa. Không có công thức hay code này áp dụng tốt trong tất cả các trường hợp cả. Mỗi trường hợp sẽ có một cách giải quyết tối ưu riêng.
------
Bạn ơi ! Tôi chỉ cần cụ thể cho trường hợp này là được lắm rồi, chắc bạn nghĩ ai cũng ứng biến công thức nhanh như bạn => --=0
Thân chào.
 
------
Bạn ơi ! Tôi chỉ cần cụ thể cho trường hợp này là được lắm rồi, chắc bạn nghĩ ai cũng ứng biến công thức nhanh như bạn => --=0
Thân chào.
Vậy thì tôi thử dùng macro trong trường hợp này. Đương nhiên chỉ làm để tham khảo chứ trong trường hợp này dùng Name sẽ thuận tiện hơn nhiều.
 

File đính kèm

Vậy thì tôi thử dùng macro trong trường hợp này. Đương nhiên chỉ làm để tham khảo chứ trong trường hợp này dùng Name sẽ thuận tiện hơn nhiều.

Code của bạn bị lỗi khi chọn khối ô từ 2 ô trở lên tại cột H4:H17 (lỗi số 13) và lỗi khi chọn bất kỳ ô nào trong khối ô D4:D17 & I4:I17(Lỗi số 91) và Cột A:A (Lỗi số 1004)???
Kiểm tra lại nhé!

(tình cờ phát hiện lỗi thôi nhé, không phải vạch lá tìm sâu đâu à nha)
 
Lần chỉnh sửa cuối:
Vậy thì tôi thử dùng macro trong trường hợp này. Đương nhiên chỉ làm để tham khảo chứ trong trường hợp này dùng Name sẽ thuận tiện hơn nhiều.
------
Bạn tham gia là vui lắm rồi, nhưng theo quan điểm của tôi bao giờ cũng làm theo nhiều cách để chọn cách tốt nhất, đồng thời phải :
- Dể thao tác, dể xử dụng
- Phù hợp với trình độ người xử dụng ( sao bạn lại cứ nghĩ ai lập công thức cũng ào ào như bạn --=0 )
TRƯỜNG HỢP ĐẶC BIỆT : Còn đuối quá thì xin mời anh, chị nhập liệu vào đây ( việc này ai làm cũng được ) => nhấn dùm tôi nút này => Xong => Khỏe (làm 1 điếu).
------
Nguyên văn bởi minhthien321
(tình cờ phát hiện lỗi thôi nhé, không phải vạch lá tìm sâu đâu à nha)
Sao bạn lại nghĩ thế? tham gia là mừng lắm rồi )(&&@@ , Code bị lỗi => chuyện thường ngày ở huyện

Thân chào 2 bạn.
 
Code của bạn bị lỗi khi chọn khối ô từ 2 ô trở lên tại cột H4:H17 (lỗi số 13) và lỗi khi chọn bất kỳ ô nào trong khối ô D4:D17 & I4:I17(Lỗi số 91) và Cột A:A (Lỗi số 1004)???
Kiểm tra lại nhé!

(tình cờ phát hiện lỗi thôi nhé, không phải vạch lá tìm sâu đâu à nha)
Chỉ lỗi khi chọn ô ở cột A:A do dùng Offset(,-1) thôi. Các trường hợp khác tôi không thấy bị lỗi?!
Những lỗi này không ảnh hưởng đến kết quả, chỉ cần thêm một dòng bẫy lỗi là ok.
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Dim GPE As Range
Set GPE = [B:B].Find(what:=Target.Offset(, -1), Lookat:=xlWhole)
If GPE = "" Then Exit Sub
If Not GPE Is Nothing And Target.Column = 8 Then
Target.Validation.Delete
Target.Validation.Add Type:=xlValidateList, Formula1:="='" & Me.Name & "'!" & GPE.Offset(, 1).Resize(Application.WorksheetFunction.CountIf([B:B], Target.Offset(, -1))).Address
End If
End Sub
Cảm ơn bạn đã phát hiện.
 
To : huuthang_bd
Sao tôi chọn G4 => H4 không xuất hiện nút chọn nhỉ ?
 
Bài này tôi nghĩ nên dùng UserForm thì hay hơn ---> Mọi thứ sẽ hiển thị trong 1 ListBox ---> Như vậy ta dể dàng chọn lựa hơn!
 
To : huuthang_bd
Sao tôi chọn G4 => H4 không xuất hiện nút chọn nhỉ ?
Là sao nhỉ?
Code viết dựa vào sự kiện SelectionChange. Vì vậy, sau khi thay đổi giá trị ở cột G phải nhấp chọn ô ở cột H thì mới xuất hiện nút chọn chứ. Bình thường cũng thế thôi. Một list validation chỉ xuất hiện nút chọn khi ô đó được active.
 
Là sao nhỉ?
Code viết dựa vào sự kiện SelectionChange. Vì vậy, sau khi thay đổi giá trị ở cột G phải nhấp chọn ô ở cột H thì mới xuất hiện nút chọn chứ. Bình thường cũng thế thôi. Một list validation chỉ xuất hiện nút chọn khi ô đó được active.
Thật sự code này không hoạt động (chọn cột H chẳng có gì hiện ra cả)
----------
Như tôi đã nói, hình thức nhập liệu này nên dùng UserForm sẽ nhanh hơn mà chẳng bao giờ bị lổi
Từ bài này:
http://www.giaiphapexcel.com/forum/showpost.php?p=166134&postcount=10
Tôi xây dựng lại code, bỏ bớt 1 vài thứ không cần thiết

attachment.php


Xem file
 

File đính kèm

File đính kèm

Lạ quá nhỉ. Tôi mở file và chẳng thấy gì bất thường cả. Không lẽ lỗi do phiên bản của Excel. Tôi sẽ text trên Excel 2003.
Tôi cũng dùng Excel 2003 đây!
Lổi của nó thế này:
- Ban đầu chọn cột H, có nhìn thấy Validation
- Sau khi vào cột G và chọn gì đó, chuyển sang cột H thì... chẳng còn thấy gì xuất hiện ---> Validation đã bị xóa
 
Tôi cũng dùng Excel 2003 đây!
Lổi của nó thế này:
- Ban đầu chọn cột H, có nhìn thấy Validation
- Sau khi vào cột G và chọn gì đó, chuyển sang cột H thì... chẳng còn thấy gì xuất hiện ---> Validation đã bị xóa
Tôi dùng Excel 2007 không thấy hiện tượng gì. Sẽ text trên Excel 2003 (Nhưng hiện tại chưa text được)
Theo mô tả của bác không lẽ Excel 2003 không hiểu dòng lệnh này:
PHP:
Target.Validation.Add Type:=xlValidateList, Formula1:="..."
 
Tôi dùng Excel 2007 không thấy hiện tượng gì. Sẽ text trên Excel 2003 (Nhưng hiện tại chưa text được)
Theo mô tả của bác không lẽ Excel 2003 không hiểu dòng lệnh này:
PHP:
Target.Validation.Add Type:=xlValidateList, Formula1:="..."
Tôi biết tại sao rồi...
Trong code của bạn có đoạn:
Target.Validation.Add Type:=xlValidateList, Formula1:="='" & Me.Name & "'!" & GPE....
Sửa lại thành:
Target.Validation.Add 3, , , "=" & GPE....
Là xong!
Công thức trong validation không cần tên sheet
 
Là sao nhỉ?
Code viết dựa vào sự kiện SelectionChange. Vì vậy, sau khi thay đổi giá trị ở cột G phải nhấp chọn ô ở cột H thì mới xuất hiện nút chọn chứ. Bình thường cũng thế thôi. Một list validation chỉ xuất hiện nút chọn khi ô đó được active.
------
Bạn huuthang_bd ơi, tôi test code kỷ rồi tôi mới hỏi chứ ?

Sao tôi chọn G4 => H4 không xuất hiện nút chọn nhỉ ?

Tôi dùng excel 2003, phiền bạn kiểm tra lại xem sao ?
 
Tôi biết tại sao rồi...
Trong code của bạn có đoạn:
Target.Validation.Add Type:=xlValidateList, Formula1:="='" & Me.Name & "'!" & GPE....
Sửa lại thành:
Target.Validation.Add 3, , , "=" & GPE....
Là xong!
Công thức trong validation không cần tên sheet
Không cần nhưng đúng ra có cũng không sao chứ. Đàng này lại không được. Chả hiểu bác Bill.
Excel 2007 thì ko vấn đề gì.
 
Không cần nhưng đúng ra có cũng không sao chứ. Đàng này lại không được. Chả hiểu bác Bill.
Excel 2007 thì ko vấn đề gì.
Tôi cho rằng như vậy mới đúng ---> Rõ ràng Validation không cho phép lấy list ở sheet khác cơ mà
Bạn thử tạo list trong Validation và thêm tên sheet vào xem nó có chịu không?
Lưu ý rằng: Excel 2007 cho phép lấy list tại sheet khác
 
Tôi cho rằng như vậy mới đúng ---> Rõ ràng Validation không cho phép lấy list ở sheet khác cơ mà
Bạn thử tạo list trong Validation và thêm tên sheet vào xem nó có chịu không?
Lưu ý rằng: Excel 2007 cho phép lấy list tại sheet khác
------
Nguyên văn bởi huuthang_bd
Không cần nhưng đúng ra có cũng không sao chứ. Đàng này lại không được. Chả hiểu bác Bill.
Excel 2007 thì ko vấn đề gì.
-------
Dạ, em đã test code đây 2 anh, chú NDU => chính xác
Được 1 đòi 2 ( không được thì thôi :-= ) : em có ghi trong file.
Đính kèm file.
Em cám ơn 2 anh.
 

File đính kèm

------

-------
Dạ, em đã test code đây 2 anh, chú NDU => chính xác
Được 1 đòi 2 ( không được thì thôi :-= ) : em có ghi trong file.
Đính kèm file.
Em cám ơn 2 anh.
Bạn xem cái này xem được không.
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Intersect(UsedRange, [G5:H65536]).Validation.Delete
Dim GPE As Range
If Not Intersect(Target, [G5:G65536]) Is Nothing And Target.Cells.Count = 1 Then
    Target.Validation.Add Type:=xlValidateList, Formula1:="=D5:D8"
    Exit Sub
End If
If Not Intersect(Target, [H5:H65536]) Is Nothing And Target.Cells.Count = 1 Then
Set GPE = [B:B].Find(what:=Target.Offset(, -1), Lookat:=xlWhole)
If GPE Is Nothing Then Exit Sub
If GPE = "" Then Exit Sub
Target.Validation.Add Type:=xlValidateList, Formula1:="=" & GPE.Offset(, 1).Resize(Application.WorksheetFunction.CountIf([B:B], Target.Offset(, -1))).Address
End If
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn xem cái này xem được không.
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Intersect(UsedRange, [G5:H65536]).Validation.Delete
Dim GPE As Range
If Not Intersect(Target, [G5:G65536]) Is Nothing And Target.Cells.Count = 1 Then
    Target.Validation.Add Type:=xlValidateList, Formula1:="=D5:D8"
    Exit Sub
End If
If Not Intersect(Target, [H5:H65536]) Is Nothing And Target.Cells.Count = 1 Then
Set GPE = [B:B].Find(what:=Target.Offset(, -1), Lookat:=xlWhole)
If GPE Is Nothing Then Exit Sub
If GPE = "" Then Exit Sub
Target.Validation.Add Type:=xlValidateList, Formula1:="=" & GPE.Offset(, 1).Resize(Application.WorksheetFunction.CountIf([B:B], Target.Offset(, -1))).Address
End If
End Sub
Nếu bạn dùng Find Method thì lưu ý 1 điểm rất quan trọng: Nếu vùng dử liệu (cột B và C) bắt đầu từ dòng 1 từ code sai ngay
 
Nếu bạn dùng Find Method thì lưu ý 1 điểm rất quan trọng: Nếu vùng dử liệu (cột B và C) bắt đầu từ dòng 1 từ code sai ngay
Dữ liệu phải có dòng tiêu đề chứ. Mà nếu muốn chắc ăn thì thêm tham số After vào phương thức Find
PHP:
Set GPE = [B:B].Find(what:=Target.Offset(, -1),After:=[B65536], Lookat:=xlWhole)
 
Dữ liệu phải có dòng tiêu đề chứ. Mà nếu muốn chắc ăn thì thêm tham số After vào phương thức Find
PHP:
Set GPE = [B:B].Find(what:=Target.Offset(, -1),After:=[B65536], Lookat:=xlWhole)
Cái này hỏng có quy định à nha!
Thay vì dùng Find, tôi chọn MATCH ---> Cam đoan với bạn MATCH nhanh hơn Find
 
Nguyên văn bởi huuthang_bd
Bạn xem cái này xem được không
Xin lỗi bạn, dù rất nôn nóng xem bài nhưng lu bu quá.
Cám ơn sự nhiệt tình của bạn, đã test code : chạy tốt ( trong vd giả lập trên )
Trong thực tế code của bạn chắc chắn sẽ phát sinh lỗi nếu người nhập liệu không tinh ý
--------

To: Chú NDU
Cám ơn chú rất nhiều về bài Form HoTroNhapLieu, bài này : Tuyệt vời
Chú lúc nào cũng thế: nhiệt tình, ..............................................dễ thương
( Đã xem qua from, vận dụng thì còn vướng, hỏi chú thì.................dễ thương quá :=\+ )

Thân chào 2 anh
 
To: Chú NDU
Cám ơn chú rất nhiều về bài Form HoTroNhapLieu, bài này : Tuyệt vời
Chú lúc nào cũng thế: nhiệt tình, ..............................................dễ thương
( Đã xem qua from, vận dụng thì còn vướng, hỏi chú thì.................dễ thương quá :=\+ )

Thân chào 2 anh
Đúng là tùy theo từng yêu cầu cụ thể mới có thể viết chính xác được anh à!
Anh đưa 1 file giả lập gần giống với file thật nhất + yêu cầu cụ thể ---> Em có thể giúp trong khả năng hiểu biết của mình
 
Hỏi thêm về cách lọc số

Như tôi đã nói, hình thức nhập liệu này nên dùng UserForm sẽ nhanh hơn mà chẳng bao giờ bị lổi
Từ bài này:
http://www.giaiphapexcel.com/forum/showpost.php?p=166134&postcount=10
Tôi xây dựng lại code, bỏ bớt 1 vài thứ không cần thiết

attachment.php


Xem file
---
Trong Form HoTroNhapLieu, Textbox dùng để lọc ký tự rất hay, trong thực tế áp dụng thì cần lọc số. Nếu được cảm phiền chú có thể viết thêm phần lọc số này được không ?
Cám ơn chú trước.
 

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

Back
Top Bottom