Đăng ký học Excel và VBA cùng GPE tháng 11 - TPHCM

Đăng ký học Excel và phân tích số liệu cùng GPE tháng 12 - TPHCM

Mua sách "VBA trong Excel - Cải thiện và tăng tốc" tái bản

Excel có hàm chọn ngẫu nhiên trong vùng cho trước không? Nhờ chỉ giúp.

Thảo luận trong 'Hàm và công thức Excel' bắt đầu bởi tuanfkt, 8 Tháng bảy 2009.

  1. tuanfkt

    tuanfkt Thành viên chính thức

    Giả sử tôi có danh sách học sinh (B2:B30), ở ô C1 tôi muốn chọn ngẫu nhiên tên học sinh có trong danh sách đó được không? Đại khái như là phải trả bài ngày hôm đó. Rất mong mọi người giúp đỡ.
    Rất cảm ơn!
     

    Các file đính kèm:

    • chon.xls
      Kích thước:
      20 KB
      Đọc:
      1,129
  2. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Bạn dùng hàm sau:
    PHP:
    =INDEX($B$2:$B$17,INT(RAND()*16)+1)
    Cứ bấm F9 sẽ thấy nó chọn ngẩu nhiên
     
  3. huuthang_bd

    huuthang_bd Thay thái độ đổi cuộc đời

    Bạn sử dụng Index() kết hợp với hàm Rand(). Xem cách dùng trong file nha.
     

    Các file đính kèm:

    • Rand.xls
      Kích thước:
      23.5 KB
      Đọc:
      1,840
  4. duongdylan

    duongdylan Thành viên mới

    Hi,

    Theo chủ đề này thì cho em hỏi, nếu phải lấy danh sách ngẫu nhiên từ 1 danh sách thì làm thế nào?

    Thanks
     
  5. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Đương nhiên là được! Giả sử bạn có 1 danh sách đặt tại A1:A30 (tức 30 phần tử)... Để lấy ra 1 danh sách ngẫu nhiên 10 phần tử từ danh sách trên thì giải thuật sẽ thế này:
    - Tạo 10 số ngẫu nhiên không trùng từ 1 đến 30 (tạm gọi là số thứ tự)
    - Dùng hàm INDEX, lọc trong danh sách 30 phần tử theo chỉ số dòng chính là số thứ tự vừa tìm
    ----------------
    Về việc tạo dãy số ngẫu nhiên không trùng ta dùng lập trình VBA đề tạo! Xem chi tiết tại đây: http://www.giaiphapexcel.com/forum/showthread.php?27286-Tạo-dãy-số-ngẫu-nhiên-không-trùng
    Giờ tôi làm thử cho bạn 1 file như yêu cầu (lấy 10 người ngẫu nhiên trong danh sách 30 người) ---> Xem thế nào nhé
     

    Các file đính kèm:

  6. duongdylan

    duongdylan Thành viên mới

    Em đã đọc theo link kia rồi, nhưng do trình kém nên hok hiểu...nếu như file của em thế này thì bốc ra 10 số bất kỳ cho giải nhất, 10 số bất kỳ cho giải nhì thì làm sao anh nhỉ?
     

    Các file đính kèm:

  7. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Dữ liệu của bạn bố trí theo kiểu khác nên có lẽ phải viết cho bạn 1 hàm để phục vụ riêng
    PHP:
    Function GetRngList(SourceRange As RangeAmount As Long)
      
    Dim TmpArrTmpItemul As New CollectionAs Long
      Application
    .Volatile '<--- Neu muon ket qua thay doi khi bam F9
      TmpArr = SourceRange.Value
      GetRngList = ""
      Set ul = New Collection
      On Error Resume Next
      If Amount > SourceRange.Count Then Amount = SourceRange.Count
      With CreateObject("Scripting.Dictionary")
        For Each Item In TmpArr
          If Not IsEmpty(Item) Then ul.Add Item, CStr(Item)
        Next
        If ul.Count = 0 Then Exit Function
        If Amount > ul.Count Then Amount = ul.Count
        Do
          n = Int(Rnd() * ul.Count) + 1
          Tmp = ul.Item(n)
          If Not .Exists(Tmp) Then .Add Tmp, ""
        Loop Until .Count = Amount
        GetRngList = WorksheetFunction.Transpose(.Keys)
      End With
    End Function
    Xem file
     

    Các file đính kèm:

    Lần chỉnh sửa cuối: 22 Tháng mười một 2010
  8. duongdylan

    duongdylan Thành viên mới

    tại sao em lam giống vậy thì bị lỗi "#Name?" ?
     

    Các file đính kèm:

  9. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Trong file bạn có tí code nào đâu mà chẳng lỗi #NAME! chứ
     
  10. duongdylan

    duongdylan Thành viên mới

    Sorry, em quen lưu lại.
     
  11. duongdylan

    duongdylan Thành viên mới

    sao attach file ko dc nhi?

    Thế anh ndu96081631 bốc 10 số trong file zip trước em gửi dc hok? tại em cung làm mà bi lỗi mà ko save lai, bay h thì e ko attach file dc.
     
    Lần chỉnh sửa cuối: 22 Tháng mười một 2010
  12. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Đương nhiên là được rồi ---> Cứ đưa code vào rồi gõ công thức như file cũ thôi
    (File của bạn vừa nhiều lại toàn là công thức nên sẽ nặng lắm đấy nhé)
     

    Các file đính kèm:

  13. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Tôi sửa lại code ở bài trên để cho tốc độ nhanh hơn:
    PHP:
    Function GetRngList(SrcRng As RangeAmount As Long)
      
    Dim Tmpul As New CollectionAs Long
      Application
    .Volatile '<--- Neu muon ket qua thay doi khi bam F9
      GetRngList = ""
      Set ul = New Collection
      On Error Resume Next
      If Amount > SrcRng.Count Then Amount = SrcRng.Count
      With CreateObject("Scripting.Dictionary")
        Do
          n = Int(Rnd() * SrcRng.Count) + 1
          Tmp = SrcRng(n).Value
          ul.Add Tmp, SrcRng(n).Address
          If Not .Exists(Tmp) And Not IsEmpty(Tmp) Then .Add Tmp, ""
          If ul.Count = SrcRng.Count Then Exit Do
        Loop Until .Count = Amount
        If .Count Then GetRngList = WorksheetFunction.Transpose(.Keys)
      End With
    End Function
    Code này nhanh hơn code cũ ít nhất từ 5 đến 10 lần ---> Với dữ liệu 6000 dòng, 26 cột (tương đương 156000 cell) khi bấm F9 để cập nhật, kết quả ra ngay lập tức
     

    Các file đính kèm:

  14. duongdylan

    duongdylan Thành viên mới

    Em có tải file anh về nhưng ko biết sao nó lại báo lỗi "#name?". không biết có cần phải chỉnh gì lại ko a?
     
  15. herovntnvn

    herovntnvn Thành viên mới

    mình muốn lấy ngẫu nhiên 5 người trong danh sách thì làm thế nào vậy ???
     
  16. chaudt

    chaudt Thành viên mới

    Bạn cho mình hỏi tại sao lại không *17 mà phải +1 vậy?
     
  17. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Thì cứ tính đi sẽ biết
    - RAND()*16 sẽ cho 1 số ngẫu nhiên trong khoảng từ 0 đến số < 16
    - RAND()*16 + 1 sẽ cho 1 số ngẫu nhiên trong khoảng từ 1 đến số < 17
    - INT(RAND()*16 + 1) sẽ cho 1 số nguyên ngẫu nhiên trong khoảng từ 1 đến 16
    Còn nếu là:
    - RAND()*17 thì sẽ cho 1 số ngẫu nhên trong khoảng từ 0 đến số <17
    - INT(RAND()*17) sẽ cho 1 số ngẫu nhiên trong khoảng từ 0 đến 16
    Hai cách cho kết quả khác nhau
     
  18. mocin

    mocin Thành viên mới

    Chào mọi người, mọi người giúp em với ạ.
    Trong 1 dãy số từ 0 đến 9. Em muốn liệt kê tất cả các số. Số này phải có tối thiểu 4 chữ số và tối đa 8 chữ số, bao gôm cả số trùng lặp. Vậy phải dùng hàm nào ạ?
    Mục đích là muốn lấy lại password cho điện thoại thôi ạ.
     
  19. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Lấy được rồi thì sẽ LIỆT KÊ vào đâu? Trên Excel chăng?
    Nên nhớ trên Excel chỉ có tối đa 1,048,576 dòng thôi nha (Excel 2003 còn ít hơn)
     
  20. mocin

    mocin Thành viên mới

    Lấy được bao nhiêu số đó cũng được rồi ạ. Nếu may mắn thì mình sẽ tìm được số đúng
     

Chia sẻ trang này