Hỏi: 1 sheet có 2 học sinh trùng trên, khác ngày sinh. Làm sao để tìm được hs đó? (1 người xem)

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

dodinhkhai

Thành viên mới
Tham gia
3/10/13
Bài viết
23
Được thích
0
Em chào các anh chị. Em có một vấn đề rắc rối muốn nhờ anh/chị giải đáp giúp.
Sau khi tìm hiểu các hàm Vlookup, match, index e cũng truy vấn được dữ liệu từ các sheet, worksheet theo ý muốn.
Tuy nhiên lấy ví dụ 1 lớp học (danh sách học sinh trên 1 sheet) có 2 học sinh trùng tên, khác ngày sinh, khác điểm thi. Nếu sử dụng các hàm trên thì e tìm được học sinh A đầu tiên trong danh sách nhưng ko biết làm sao để tìm ra học sinh A thứ 2 trong danh sách đó.
Em muốn nhờ anh/chị giúp cách nào đó để khi gõ tên em A thì sẽ hiện ra tên 2 em A đó và muốn xem thông tin e nào thì chọn e đó.
Xin cảm ơn!
 

File đính kèm

Lần chỉnh sửa cuối:
Theo tôi dữ liệu cần thêm mã học sinh/chung minh thư...tim kiếm theo khóa duy nhất sẽ ko bị trùng lặp bạn ạh..
 
Upvote 0
Theo tôi dữ liệu cần thêm mã học sinh/chung minh thư...tim kiếm theo khóa duy nhất sẽ ko bị trùng lặp bạn ạh..
Ai cũng biết vậy hết, nhưng giờ hỏng có mã HS gì hết thì sao? Cho giải pháp đi chứ... ka ka. Viết 1 code ngắn tẹo là được rồi
 
Upvote 0
Tại vì thực tế là thế này. Giả sử 1 lớp có 40 em học sinh, mã học sinh thì tất nhiên sẽ có nhưng nhớ làm sao được em nào mã số nào nên mới phải tìm theo tên. Khi tìm tên rồi thì mọi thông tin sẽ ra. Vấn đề 1 lớp lại có nhiều e trùng tên nên vấn đề mới là vấn đề ;)
 
Upvote 0
Em chào các anh chị. Em có một vấn đề rắc rối muốn nhờ anh/chị giải đáp giúp.
Sau khi tìm hiểu các hàm Vlookup, match, index e cũng truy vấn được dữ liệu từ các sheet, worksheet theo ý muốn.
Tuy nhiên lấy ví dụ 1 lớp học (danh sách học sinh trên 1 sheet) có 2 học sinh trùng tên, khác ngày sinh, khác điểm thi. Nếu sử dụng các hàm trên thì e tìm được học sinh A đầu tiên trong danh sách nhưng ko biết làm sao để tìm ra học sinh A thứ 2 trong danh sách đó.
Em muốn nhờ anh/chị giúp cách nào đó để khi gõ tên em A thì sẽ hiện ra tên 2 em A đó và muốn xem thông tin e nào thì chọn e đó.
Xin cảm ơn!
Bạn xem thử... .
 

File đính kèm

Upvote 0
quanghai1969 đã viết:
Cảm ơn anh phuocam và quanghai1969. Em sẽ mò mẫm từ hướng dẫn này xem có ra được vấn đề ko nhưng e thấy chưa đúng "âm mưu" của e lắm :D
Thực ra em đang cần quản lý hơn 1000 cá nhân năm ở khoảng 20 sheet khác nhau, mỗi cá nhân lại có khoảng 20 thông tin cá nhân.
Tối nay em sẽ soạn 1 file "nặng nề" như trên và nhờ các anh giúp đỡ cho vấn đề cụ thể đó!
 
Upvote 0
Cảm ơn anh phuocam và quanghai1969. Em sẽ mò mẫm từ hướng dẫn này xem có ra được vấn đề ko nhưng e thấy chưa đúng "âm mưu" của e lắm :D
Thực ra em đang cần quản lý hơn 1000 cá nhân năm ở khoảng 20 sheet khác nhau, mỗi cá nhân lại có khoảng 20 thông tin cá nhân.
Tối nay em sẽ soạn 1 file "nặng nề" như trên và nhờ các anh giúp đỡ cho vấn đề cụ thể đó!
Bạn chỉ cần đưa file giả lập kèm kết quả mong muốn nữa. Tôi sẽ giúp bạn.
 
Upvote 0
Cảm ơn anh phuocam và quanghai1969. Em sẽ mò mẫm từ hướng dẫn này xem có ra được vấn đề ko nhưng e thấy chưa đúng "âm mưu" của e lắm :D
Thực ra em đang cần quản lý hơn 1000 cá nhân năm ở khoảng 20 sheet khác nhau, mỗi cá nhân lại có khoảng 20 thông tin cá nhân.
Tối nay em sẽ soạn 1 file "nặng nề" như trên và nhờ các anh giúp đỡ cho vấn đề cụ thể đó!
Mới có từ khoảng 40 hs mà sinh sôi nảy nở kiểu gì mà ra cả 1000 người vậy trời? Hay thiệt đó.
 
Upvote 0
Tại vì thực tế là thế này. Giả sử 1 lớp có 40 em học sinh, mã học sinh thì tất nhiên sẽ có nhưng nhớ làm sao được em nào mã số nào nên mới phải tìm theo tên. Khi tìm tên rồi thì mọi thông tin sẽ ra. Vấn đề 1 lớp lại có nhiều e trùng tên nên vấn đề mới là vấn đề ;)
Tôi có giải pháp thế này. Bạn nhập tên học sinh cần tìm kiếm sau đó nhấn nút "Tìm kiếm" thì toàn bộ thông tin của các học sinh có tên đó sẽ hiện ra.
Mã:
Public Sub Chuot0106_timkiem()
Dim i As Long, Lastcell As Range, rng As Range, gt As Range, kq()
Dim FirstAddress As String
Set rng = Sheet1.Range("B2:D" & Sheet1.Range("D65500").End(xlUp).Row)
Set Lastcell = Sheet1.Range("B" & Sheet1.Range("B65500").End(xlUp).Row)
ReDim kq(1 To rng.Rows.Count, 1 To 4)


Set gt = rng.Find("*" & Sheet1.Range("G3"), after:=Lastcell)
If Not gt Is Nothing Then
    FirstAddress = gt.Address
Do
    k = k + 1
    kq(k, 1) = gt.Offset(, -1)
    kq(k, 2) = gt
    kq(k, 3) = gt.Offset(, 1)
    kq(k, 4) = gt.Offset(, 2)
    Set gt = rng.FindNext(gt)
Loop While gt.Address <> FirstAddress
End If
    Sheet1.Range("F4:I" & Sheet1.Range("I65500").End(xlUp).Row).ClearContents
    Sheet1.Range("F4").Resize(k, 4) = kq
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
chuot0106 đã viết:
Bạn chỉ cần đưa file giả lập kèm kết quả mong muốn nữa. Tôi sẽ giúp bạn.
Bạn xem giúp mình file dưới nha!

quanghai1969 đã viết:
Mới có từ khoảng 40 hs mà sinh sôi nảy nở kiểu gì mà ra cả 1000 người vậy trời? Hay thiệt đó.
Anh ơi thời buổi này dân số tăng nhanh lắm ạ :D Ví dụ cụ thể hơn ở file đính kèm dưới đây nhé!

Tôi có giải pháp thế này. Bạn nhập tên học sinh cần tìm kiếm sau đó nhấn nút "Tìm kiếm" thì toàn bộ thông tin của các học sinh có tên đó sẽ hiện ra....
Em cảm ơn anh, em đã tìm hiểu và đã nắm được.

Nhưng xin hỏi các anh là với yêu cầu cụ thể như file dưới này thì sẽ phải làm thế nào? (em đã sửa lại ví dụ trên cho thực tế với "nguyện vọng" của em nhất :) mong các anh xem xét thêm! Yêu cầu e đã viết cụ thể trong file.
 

File đính kèm

Upvote 0
Bạn xem giúp mình file dưới nha!


Anh ơi thời buổi này dân số tăng nhanh lắm ạ :D Ví dụ cụ thể hơn ở file đính kèm dưới đây nhé!
Em cảm ơn anh, em đã tìm hiểu và đã nắm được.

Nhưng xin hỏi các anh là với yêu cầu cụ thể như file dưới này thì sẽ phải làm thế nào? (em đã sửa lại ví dụ trên cho thực tế với "nguyện vọng" của em nhất :) mong các anh xem xét thêm! Yêu cầu e đã viết cụ thể trong file.
Cho hiển thị thông tin như File tôi gửi lúc trước có được không bạn?
 
Upvote 0
Cho hiển thị thông tin như File tôi gửi lúc trước có được không bạn?
E đã xem và thấy là phù hợp với số lượng ít học sinh.
Em đã sửa lại file ví dụ đúng với nhu cầu thực tế e đang làm, anh ngó qua 1 lượt nữa xem thế nào ạ.
Ở đây e lấy ví dụ 3 sheets, mỗi sheet có 10 học sinh thôi chứ thực tế e phải làm việc với 1 file gồm hơn 20 sheets, mỗi sheets tầm 50 học sinh, mỗi học sinh lại có hơn 20 thông tin cá nhân cơ.
Vậy nên hiển thị như anh thì có vẻ ko được ổn lắm ạ? Vì nếu hiển thị như vậy e có thể dùng nút Search (Ctrl + F) rồi chọn search toàn bộ worksheet. Ở đây e muốn hiển thị như trong file e đính kèm để khi tìm ra 1 cái là có thể Print ra giấy thành 1 trang thông tin cá nhân của học sinh đó luôn.
 
Upvote 0
E đã xem và thấy là phù hợp với số lượng ít học sinh.
Em đã sửa lại file ví dụ đúng với nhu cầu thực tế e đang làm, anh ngó qua 1 lượt nữa xem thế nào ạ.
Ở đây e lấy ví dụ 3 sheets, mỗi sheet có 10 học sinh thôi chứ thực tế e phải làm việc với 1 file gồm hơn 20 sheets, mỗi sheets tầm 50 học sinh, mỗi học sinh lại có hơn 20 thông tin cá nhân cơ.
Vậy nên hiển thị như anh thì có vẻ ko được ổn lắm ạ? Vì nếu hiển thị như vậy e có thể dùng nút Search (Ctrl + F) rồi chọn search toàn bộ worksheet. Ở đây e muốn hiển thị như trong file e đính kèm để khi tìm ra 1 cái là có thể Print ra giấy thành 1 trang thông tin cá nhân của học sinh đó luôn.
Bạn thiết kế như vậy thì khi tìm ra khoảng 10 em học sinh trùng tên nhau thì bạn định hiển thị kiểu gì thông tin của bấy nhiêu em đó đây.
 
Upvote 0
......
Vậy nên hiển thị như anh thì có vẻ ko được ổn lắm ạ? Vì nếu hiển thị như vậy e có thể dùng nút Search (Ctrl + F) rồi chọn search toàn bộ worksheet. Ở đây e muốn hiển thị như trong file e đính kèm để khi tìm ra 1 cái là có thể Print ra giấy thành 1 trang thông tin cá nhân của học sinh đó luôn.
Bạn thử làm 1 file minh họa cách trên(phần bôi đen) của bạn để tôi học hỏi với!
 
Upvote 0
Bạn thiết kế như vậy thì khi tìm ra khoảng 10 em học sinh trùng tên nhau thì bạn định hiển thị kiểu gì thông tin của bấy nhiêu em đó đây.
Vâng. Đấy là cái e cần nhờ các anh giúp đấy ạ. Nếu chỉ có 1 em thôi thì đơn giản nhưng có nhiều em trùng tên, mà thực tế sẽ là như vậy thì ko biết phải làm sao.
Lúc đầu e nghĩ là thêm 1 dữ kiện nữa là tên học sinh đó và tên lớp. Nhưng thực tế có nhiều lớp có vài em trùng tên. Thế nên lại bí :(
Thực tế mình chỉ nhớ được tên và cũng lắm là lớp em học sinh đó để search thôi chứ ko thê nào nhớ nổi các thông tin cá nhân khác nên chỉ có thể có 2 input là: tên và lớp, còn tất cả thông tin khác phải là thông tin output.
Em mong các anh giúp đỡ!
 
Upvote 0
Bạn thử làm 1 file minh họa cách trên(phần bôi đen) của bạn để tôi học hỏi với!
Dạ có đây ạ :)
Vi_du_tim_hoc_sinh.png
 

File đính kèm

  • Vi du tim hoc sinh.jpg
    Vi du tim hoc sinh.jpg
    32.9 KB · Đọc: 28
Upvote 0
Vâng. Đấy là cái e cần nhờ các anh giúp đấy ạ. Nếu chỉ có 1 em thôi thì đơn giản nhưng có nhiều em trùng tên, mà thực tế sẽ là như vậy thì ko biết phải làm sao.
Lúc đầu e nghĩ là thêm 1 dữ kiện nữa là tên học sinh đó và tên lớp. Nhưng thực tế có nhiều lớp có vài em trùng tên. Thế nên lại bí :(
Thực tế mình chỉ nhớ được tên và cũng lắm là lớp em học sinh đó để search thôi chứ ko thê nào nhớ nổi các thông tin cá nhân khác nên chỉ có thể có 2 input là: tên và lớp, còn tất cả thông tin khác phải là thông tin output.
Em mong các anh giúp đỡ!
Như tôi nói ở trên là mình sẽ nhập tên(chỉ tên thôi) của học sinh cần tìm kiếm sau đó nhấn nút "Tìm kiếm" thì tất cả các thông tin của những học sinh đó sẽ hiện ra hết. Giống như File trước tôi gửi cho bạn đó. Nếu bạn đòng ý tôi suy nghĩ tiếp.
 
Upvote 0
Như tôi nói ở trên là mình sẽ nhập tên(chỉ tên thôi) của học sinh cần tìm kiếm sau đó nhấn nút "Tìm kiếm" thì tất cả các thông tin của những học sinh đó sẽ hiện ra hết. Giống như File trước tôi gửi cho bạn đó. Nếu bạn đòng ý tôi suy nghĩ tiếp.
Em đồng ý là cách đó hay mà. Em đang loay hoay dùng cách đó để áp nó vào phù hợp với form em đang cần.
Anh cứ ngó qua cái form đó xem có cách nào được ko thì chỉ cho em với ạ!
 
Upvote 0
Tóm lại mục đích của bạn là gì. Theo tôi bạn nên nhập thêm kết quả mong muốn bằng tay đối với trường hợp học sinh "Nguyễn Văn A" chẳng hạn vào File để tôi dễ hình dung.
Anh cứ coi như em sẽ là phụ huynh chẳng hạn còn anh là người quản lý học sinh. Cuối kì a cung cấp cho phụ huynh 1 file excel tổng hợp của cả Trường như vậy để mỗi phụ huynh có thể xem tình hình học tập của con (gồm rất nhiều điểm của rất nhiều môn học).
Vậy là phụ huynh sẽ điền tên con mình vào mục tìm kiếm đó (có thể thêm 1 mục là điền tên lớp cho dễ lọc). Tuy nhiên trong 1 lớp đó lại có tới 2 em học sinh trùng tên nhau.
Vậy vấn đề e mắc phải là làm sao để hiển thị được kết quả học tập của đúng con người ta vì phụ huynh ko biết gì về tin cả, chỉ biết là nhập tên và nhập lớp học của cháu vào để xem thông tin thôi.
Hy vọng em giải thích vậy anh có thể hiểu được ý tưởng của em :)
 
Upvote 0
Anh cứ coi như em sẽ là phụ huynh chẳng hạn còn anh là người quản lý học sinh. Cuối kì a cung cấp cho phụ huynh 1 file excel tổng hợp của cả Trường như vậy để mỗi phụ huynh có thể xem tình hình học tập của con (gồm rất nhiều điểm của rất nhiều môn học).
Vậy là phụ huynh sẽ điền tên con mình vào mục tìm kiếm đó (có thể thêm 1 mục là điền tên lớp cho dễ lọc). Tuy nhiên trong 1 lớp đó lại có tới 2 em học sinh trùng tên nhau.
Vậy vấn đề e mắc phải là làm sao để hiển thị được kết quả học tập của đúng con người ta vì phụ huynh ko biết gì về tin cả, chỉ biết là nhập tên và nhập lớp học của cháu vào để xem thông tin thôi.
Hy vọng em giải thích vậy anh có thể hiểu được ý tưởng của em :)
Tạm thử thế này, nếu thay đổi mẫu nữa thì ráng chịu nha
 

File đính kèm

Upvote 0
Tạm thử thế này, nếu thay đổi mẫu nữa thì ráng chịu nha
Em cảm ơn a mũ n nhé! Ko còn dám thắc mắc nữa rồi!! Đúng ý ạ. Hihi!
Em có xem đoạn mã trong file và sẽ tìm hiểu cho kĩ. A cứ nói qua giúp em các bước chính thực hiên đi ạ:
1. Tạo ....
2. Tạo....
3. ...
Em cảm ơn a rất nhiều. Em loay hoay cái này gần 2 tháng rồi với đống vlookup, index, match đủ kiểu nhưng ko tìm được ý tưởng thực hiện. Cảm ơn a lần nữa ạ. E rất vui!!!
 
Upvote 0
Tạm thử thế này, nếu thay đổi mẫu nữa thì ráng chịu nha
Anh ơi em hỏi thêm 1 câu nữa mong anh trả lời sớm ạ.
Trong danh sách học sinh hiện tại có 9 cột dữ liệu (mã học sinh, học và tên, ngày sinh,...). Nếu có thêm 1 cột nữa, giả sử là cột Học phí chẳng hạn sẽ thành 10 cột nhưng khi nhập tên ở textbox thì ko hiện ra cột thứ 10 đó. Em đã thử thay đổi số 9 thành số 10 trong code nhưng bị báo lỗi luôn.
Mã:
Option ExplicitOption Base 1
Sub loc()
Dim sh, i, j, k, data(), Tem(10000, 9), Res(), dk
dk = "*" & Sheet1.TextBox1.Value & "*"
Sheet1.ListBox1.Clear
For Each sh In Worksheets
   If sh.CodeName <> "Sheet1" Then
      data = sh.[A1].CurrentRegion.Value
      For i = 2 To UBound(data)
         If data(i, 2) Like dk Then
            k = k + 1
            For j = 1 To [COLOR=#ff0000][B]9[/B][/COLOR]
               Tem(k, j) = data(i, j)
            Next
         End If
      Next
   End If
Next
If k < 1 Then Exit Sub
ReDim Res(k, [COLOR=#ff0000][B]9[/B][/COLOR])
For i = 1 To k
   For j = 1 To [COLOR=#ff0000][B]9[/B][/COLOR]
      Res(i, j) = Tem(i, j)
   Next
Next
Sheet1.ListBox1.List = Res
End Sub
Vậy em muốn hỏi là sửa chỗ nào trong code để hiển thị tăng số cột lên được? (tức là: khi nhập tên học sinh cần tìm thì hiện ra listbox các em cùng tên, listbox này sẽ có 10 cột dữ liệu (hiện thêm cột Học phí) về học sinh đó chứ ko phải 9 cột như hiện tại).
Em cảm ơn!
 
Upvote 0
Anh ơi em hỏi thêm 1 câu nữa mong anh trả lời sớm ạ.
Trong danh sách học sinh hiện tại có 9 cột dữ liệu (mã học sinh, học và tên, ngày sinh,...). Nếu có thêm 1 cột nữa, giả sử là cột Học phí chẳng hạn sẽ thành 10 cột nhưng khi nhập tên ở textbox thì ko hiện ra cột thứ 10 đó. Em đã thử thay đổi số 9 thành số 10 trong code nhưng bị báo lỗi luôn.
Mã:
Option ExplicitOption Base 1
Sub loc()
Dim sh, i, j, k, data(), Tem(10000, 9), Res(), dk
dk = "*" & Sheet1.TextBox1.Value & "*"
Sheet1.ListBox1.Clear
For Each sh In Worksheets
   If sh.CodeName <> "Sheet1" Then
      data = sh.[A1].CurrentRegion.Value
      For i = 2 To UBound(data)
         If data(i, 2) Like dk Then
            k = k + 1
            For j = 1 To [COLOR=#ff0000][B]9[/B][/COLOR]
               Tem(k, j) = data(i, j)
            Next
         End If
      Next
   End If
Next
If k < 1 Then Exit Sub
ReDim Res(k, [COLOR=#ff0000][B]9[/B][/COLOR])
For i = 1 To k
   For j = 1 To [COLOR=#ff0000][B]9[/B][/COLOR]
      Res(i, j) = Tem(i, j)
   Next
Next
Sheet1.ListBox1.List = Res
End Sub
Vậy em muốn hỏi là sửa chỗ nào trong code để hiển thị tăng số cột lên được? (tức là: khi nhập tên học sinh cần tìm thì hiện ra listbox các em cùng tên, listbox này sẽ có 10 cột dữ liệu (hiện thêm cột Học phí) về học sinh đó chứ ko phải 9 cột như hiện tại).
Em cảm ơn!
Đã nói rồi nếu sửa Form thì ráng chịu. Chắc là không tin. Phần còn lại tự xử đi nhé. Loay hoay mất 2 tháng mà giờ vừa rồi lại thay đổi form
 
Upvote 0
Đã nói rồi nếu sửa Form thì ráng chịu. Chắc là không tin. Phần còn lại tự xử đi nhé. Loay hoay mất 2 tháng mà giờ vừa rồi lại thay đổi form
Em hỏi vậy là để xử lý trường hợp mà cơ sở dữ liệu được bổ sung/loại bớt cột nào đó. E nghĩ là việc hiển thị ra số lượng cột được quy định trong code rồi nên e mò mẫm sửa 1 số thứ trong đó xem thế nào nhưng đều không thêm/bớt cột hiển thị trong listbox được.
Có phải là không sửa được điều đó trong code ko ạ hay phải sửa từ khi tạo form? Nếu sửa được thì em sẽ tiếp tục thử?
 
Upvote 0
Em hỏi vậy là để xử lý trường hợp mà cơ sở dữ liệu được bổ sung/loại bớt cột nào đó. E nghĩ là việc hiển thị ra số lượng cột được quy định trong code rồi nên e mò mẫm sửa 1 số thứ trong đó xem thế nào nhưng đều không thêm/bớt cột hiển thị trong listbox được.
Có phải là không sửa được điều đó trong code ko ạ hay phải sửa từ khi tạo form? Nếu sửa được thì em sẽ tiếp tục thử?
Sửa cả 2 phần
1. Váo properties của Listbox tìm phần Column Count chỉnh lại số 10
2. Trong code gốc tìm và thay thế số 9 > 10
 
Upvote 0

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

Back
Top Bottom