tự động tìm khi nhập mã số

Liên hệ QC

lehuyluan

Thành viên mới
Tham gia
21/11/07
Bài viết
28
Được thích
4
em đang tìm lời giải cho bài toán này mà em chưa tìm ra cách làm sao.mong được các anh chị giúp đỡ.em gửi file đính kèm vì khó nói quá
 

File đính kèm

em đang tìm lời giải cho bài toán này mà em chưa tìm ra cách làm sao.mong được các anh chị giúp đỡ.em gửi file đính kèm vì khó nói quá

Đọc file đính kèm mà không hiểu ý bạn là gì cả.
Có phải ý bạn là có 1 sheet chứa dữ liệu, ở sheet Báo cáo ta chỉ cần nhập mã là sẽ thấy được các thông tin liên quan đến mã đó.
Nếu vậy thì dùng hàm Vlookup là ok.
Bạn nói rõ hơn về yêu cầu xem
 
dạ ý em là ở bảng sheet đó. mỗi lần em tìm tên hàng để nhập ngày tháng giao hàng thấy mất công quá. em muốn ở ô màu vàng em chi cần nhập mã số thì ở dưới nó sẽ hiện ra tên hàng mà mình đang tìm để nhập ngày tháng vào .
 
Bài này dùng Advanced Filter thôi, kết hợp với code VBA nữa là thành tự động!
Xem file nhé
 

File đính kèm

thank anh ndu96081631 và mọi người đã giúp đỡ em. đúng là cái em đang tìm.
 
dạ ý em là ở bảng sheet đó. mỗi lần em tìm tên hàng để nhập ngày tháng giao hàng thấy mất công quá. em muốn ở ô màu vàng em chi cần nhập mã số thì ở dưới nó sẽ hiện ra tên hàng mà mình đang tìm để nhập ngày tháng vào .

BẠn xem file nha
PHP:
Sub worksheet_change(ByVal target As Range)
On Error Resume Next
Dim i As Long
If [B2] <> "" Then
    For i = 4 To [B65536].End(xlUp).Row
        If Cells(i, 2) = [B2] Then
        Cells(i, 7).Select
        Exit For
        End If
    Next
End If
End Sub
 

File đính kèm

bác ndu ơi, bác có thể giải thích cái sub của bác cho em hiểu nha. cách bác làm hay lắm. đọc bài của lehuyluan em chỉ nghĩ đến cách tạo 1 data và bảng dò tìm ra kết quả mà thôi.
em thấy bác có sử dụng 1 name. còn sub của bác, em có thấy DS. vậy DS là sao.
 
bác ndu ơi, bác có thể giải thích cái sub của bác cho em hiểu nha. cách bác làm hay lắm. đọc bài của lehuyluan em chỉ nghĩ đến cách tạo 1 data và bảng dò tìm ra kết quả mà thôi.
Tôi record macro quá trình lọc bằng Advanced Filter thôi mà, rất đơn giãn
Quy trình tôi làm như sau:
1> Tạo vùng điều kiện trước (B1 gõ chứ MA SO ---> chử này bắt buộc phải giống tiêu đề của bảng tính, B2 để trống )
2> Bặt chức năng Record macro lên
3> Đặt con trỏ chuột tại A4, bấm Ctrl + G\Special\CurrentRegion... rồi OK
4> Vào menu Data\Filter\Advanced Filter
a) Chọn Filter the list, in-place
b) Phần list range đã được điền sẳn
c) Khung Criteria Range, quét chọn $B$1:$B$2 và OK
5> Tắt record macro tôi được:
PHP:
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 18/08/2008 by ndu
'

'
    Range("A4").Select
    Selection.CurrentRegion.Select
    Range("A4:J24").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range("B1:B2"), Unique:=False
End Sub
Chỉnh lại chút:
PHP:
Sub Macro1()
    Set DS = [A4].CurrentRegion
    DS.AdvancedFilter Action:=1, CriteriaRange:= Range("B1:B2")
End Sub
6> Mang code này gán vào sự kiện WorkSheet_Change và chỉnh thêm lần nữa (thêm điều kiện ép code chỉ hoạt động khi có thay đổi tại B2)
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$B$2" Then
    Set DS = [A4].CurrentRegion
    DS.AdvancedFilter Action:=1, CriteriaRange:=Range("B1:B2")
  End If
End Sub
Xong!
Ghi chú thêm: Name trong Define name mà bạn nhìn thấy không phải do tôi tạo ra, nó được tự tạo trong quá trình Filter
Bạn cũng có thể tự làm được dể dàng như ăn khoai
 
Lần chỉnh sửa cuối:
Lời hướng dẫn rất chi tiết. rất phù hợp và dễ hiểu đối với người chẳng biết vba như em. em sẽ tập làm. có gì sẽ hỏi bác tiếp. thanks

bác ndu ơi, vậy Set DS = A4 tức là mình gán cho địa chỉ này là DS phải không bác.
Bác danh ơi, em mở file bác để tham khảo nhưng khi gõ mã số vào nó không tự động auto filter như bác ndu được.
 
Chỉnh sửa lần cuối bởi điều hành viên:
bác ndu ơi, vậy Set DS = A4 tức là mình gán cho địa chỉ này là DS phải không bác.
Bác danh ơi, em mở file bác để tham khảo nhưng khi gõ mã số vào nó không tự động auto filter như bác ndu được.
Chính xác là:
Tương đương với việc đặt con trỏ tại A4, bấm Ctrl + G vào Special\CurrentRegion... lúc đó nó sẽ chọn hết những vùng dử liệu có "dính" với A4
Chiêu này rất thuận tiện khi bạn không biết dử liệu của bạn sẽ mở rộng đến dòng bao nhiêu và cột bao nhiêu (Nó sẽ tự cập nhật khi bạn thêm bớt dử liệu)
Set DS = .... cũng gần tương đương với đặt name trong Define name
Thêm 1 cái thuận tiện nữa là trong code chỉ có duy nhất 1 cell A4, mai này muốn sửa lại vùng dử liệu thì chỉ cần sửa cell này trong code là đủ
 
Nói thêm: Code của Danh không phải là LỌC, mà nó dời con trỏ chuột đến cột G cho bạn nhập ngày (bạn thử xem)
Code đấy không cần dùng For (sẽ chậm)... Có thể sửa lại như sau:
PHP:
Private Sub Worksheet_Change(ByVal target As Range)
  Dim i As Long
  On Error Resume Next
  Set Ma = Range("B4:B" & [B65536].End(xlUp).Row)
  VT = Application.WorksheetFunction.Match([B2], Ma, 0)
  [B3].Offset(VT, 5).Select
End Sub
Nhanh hơn nhiều
 
Bác Ndu và bác Danh và cả bác okebab ơi , cho em hỏi thêm nha. em có 1 file, sử dụng trên 1 form của bác Mr Okebab ( chỉ cho nhập liệu vào các cell trống. sau khi lưu không cho sửa). em thấy cách làm của bác Danh và bác ndu làm lại cho tốc độ nhanh hơn nó rất phù hợp vì file này của em rất nhiều dòng (1 tháng khoảng 800 - 1500 dòng mà tìm mã sẽ cực). tuy nhiên do không chỉnh sửa cell đã lưu nên em không biết mìn phải chỉnh sửa làm sao để chừa lại cái ô nhập mã số không khị khóa.
Em gởi kèm file nha các bác ( bác xem cáh 2 ạh)
thanks các bác
 
Lần chỉnh sửa cuối:
Vậy giờ bạn muốn làm gì trên file này?
 
em muốn vận dụng cách làm của bác danh vào file tương tự như bạn lehuyluan nhưng cái file của em lại được làm trên cái form có các câu lệnh khóa cell của bác bab. các bác có thể giúp em thêm câu lệnh hay chỉnh sửa câu lệnh của bác bab để em có thể ứng dụng vào file của mình.vì file em nặng lắm không post lên được. bác có thể copy file của bạn lehuyluan vào form của bác bab rồi giúp em ạh.cám ơn bác.
 
em muốn vận dụng cách làm của bác danh vào file tương tự như bạn lehuyluan nhưng cái file của em lại được làm trên cái form có các câu lệnh khóa cell của bác bab. các bác có thể giúp em thêm câu lệnh hay chỉnh sửa câu lệnh của bác bab để em có thể ứng dụng vào file của mình.vì file em nặng lắm không post lên được. bác có thể copy file của bạn lehuyluan vào form của bác bab rồi giúp em ạh.cám ơn bác.

Bạn xem VD này thử :

PHP:
Sub worksheet_change(ByVal target As Range)
On Error Resume Next
ActiveSheet.Unprotect
    If target <> "" Then
        target.Locked = True
    End If
ActiveSheet.Protect
End Sub
--------------------------------------------------
Sub Button1_Click()
ActiveSheet.Unprotect
End Sub
 

File đính kèm

dạ ý em là ở bảng sheet đó. mỗi lần em tìm tên hàng để nhập ngày tháng giao hàng thấy mất công quá. em muốn ở ô màu vàng em chi cần nhập mã số thì ở dưới nó sẽ hiện ra tên hàng mà mình đang tìm để nhập ngày tháng vào .

Cách khác dùng Hyperlink động
 

File đính kèm

cám ơn bác danh. em thích cách của bác bab vì muốn chỉnh sửa phải có password mới cho phép chỉnh sửa. Để em copy cái dữ liệu nhỏ nhỏ rồi đưa lên để bác giúp em. em mượn file của bạn lehuyluan nha.
Bác có thể thêm câu lệnh có pass vào cái forrm mẫu của bác là rất ok vì bác đặt macro ở vị trí dễ sử dụng hơn bác bab.
 

File đính kèm

cám ơn bác danh. em thích cách của bác bab vì muốn chỉnh sửa phải có password mới cho phép chỉnh sửa. Để em copy cái dữ liệu nhỏ nhỏ rồi đưa lên để bác giúp em. em mượn file của bạn lehuyluan nha.
Bác có thể thêm câu lệnh có pass vào cái forrm mẫu của bác là rất ok vì bác đặt macro ở vị trí dễ sử dụng hơn bác bab.

Mình sửa lại file cũ của mình tí là xong ấy mà :
PHP:
Sub worksheet_change(ByVal target As Range)
On Error Resume Next
ActiveSheet.Unprotect "DANH"
    If target <> "" Then
        target.Locked = True
    End If
ActiveSheet.Protect
End Sub

Sub Button1_Click()
If UCase(InputBox("Nhap password : ", "Unprotect")) = "DANH" Then
ActiveSheet.Unprotect
End If
End Sub
 

File đính kèm

Mình sửa lại file cũ của mình tí là xong ấy mà :
PHP:
Sub worksheet_change(ByVal target As Range)
On Error Resume Next
ActiveSheet.Unprotect "DANH"
    If target <> "" Then
        target.Locked = True
    End If
ActiveSheet.Protect
End Sub

Sub Button1_Click()
If UCase(InputBox("Nhap password : ", "Unprotect")) = "DANH" Then
ActiveSheet.Unprotect
End If
End Sub

Cho mình hỏi thăm tí, với dữ liệu khoảng 1000 dòng, mình chạy code loc của Ndu xong, chỉnh sửa xong, muốn bung ra lai toàn bộ danh sach thì code chạy rất lâu ( vì hình như nó calculate lại dữ liệu mặc dù mình đã đạt EnableEvent = False. Có cách nào push nó nhanh hơn khong nhi?
 
Cho mình hỏi thăm tí, với dữ liệu khoảng 1000 dòng, mình chạy code loc của Ndu xong, chỉnh sửa xong, muốn bung ra lai toàn bộ danh sach thì code chạy rất lâu ( vì hình như nó calculate lại dữ liệu mặc dù mình đã đạt EnableEvent = False. Có cách nào push nó nhanh hơn khong nhi?
Tôi không hiểu bạn đã làm gì trên file mà lại nói là chậm!
Tôi nghĩ rằng code dùng Advanced Filter là rất nhanh đấy (xem lại, biết đâu trên file của bạn còn những món khác nữa)
Vui lòng cho xem code hoặc tốt nhất là nguyên file để tìm hiểu nguyên nhân chính xác hơn
 
Web KT

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

Back
Top Bottom