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

Liên hệ QC
Theo bạn thì bạn sẽ học được những gì qua bài tập này?
Nói mục đích cụ thể, tôi hướng dẫn trực tiếp vào phần đó, khỏi phải học vòng vo.
Dạ .. e muốn tạo một cái phần mêm flashcard để học tiếng nhật cụ thể là học chử kanji
Bài đã được tự động gộp:

Phần mềm chắc là khó đấy, nhưng mà code chap 2 của n phần tử chắc là làm được. Bạn làm một file ví dụ xem sao.

e có một file excel như vậy nhửng nó chỉ hiển thị ngẫu nhiên mot du liệu trong vùng dữ liệu cho trước thôi...nhưng e muốn nó hiển thị một cách ngẫu nhiên nhưng nó biết đến khi nào là đã hiển thị hết vùng du liệu và e muôn khi một dử liệu cột A hiên lên trên nếu muốn xem dữ liệu cột B tương đối với cột A thì phải làm sao e không biết làm mọi người giúp e với
 

File đính kèm

  • 第32課.xlsm
    17.2 KB · Đọc: 23
Lần chỉnh sửa cuối:
Dạ .. e muốn tạo một cái phần mêm flashcard để học tiếng nhật cụ thể là học chử kanji
Bài đã được tự động gộp:



e có một file excel như vậy nhửng nó chỉ hiển thị ngẫu nhiên mot du liệu trong vùng dữ liệu cho trước thôi...nhưng e muốn nó hiển thị một cách ngẫu nhiên nhưng nó biết đến khi nào là đã hiển thị hết vùng du liệu và e muôn khi một dử liệu cột A hiên lên trên nếu muốn xem dữ liệu cột B tương đối với cột A thì phải làm sao e không biết làm mọi người giúp e với
Tháo bỏ merge cells vùng a2:e14 rồi dùng đọan code này xem sao
Mã:
Option Explicit
Public PArr As Variant
Public Num As Long
Public Num1 As Long
Sub Random_()
Dim i, j
If Num = 0 Then
    Dim Sarr As Variant
    Sarr = Sheet1.Range("a30").CurrentRegion
    ReDim PArr(1 To 3, 1 To UBound(Sarr))
    For i = 1 To UBound(Sarr)
        PArr(1, i) = Sarr(i, 1)
        PArr(2, i) = Sarr(i, 2)
    Next i
    Num1 = UBound(Sarr)
End If
If Num = Num1 Then
    MsgBox "Da het so lieu"
    Exit Sub
End If
Randomize
j = UBound(PArr, 2) * 10
i = (Rnd() * (j - 1)) \ 10 + 1
Do While PArr(3, i) = 1
    i = (Rnd() * (j - 1)) \ 10 + 1
Loop
PArr(3, i) = 1
Num = Num + 1
Sheet1.Range("a2") = PArr(1, i)
Sheet1.Range("b2") = PArr(2, i)
End Sub
 
Hoăc thử code này:
Mã:
Public Sub Random2()
Static soCau As Long
Static dArr As Variant
Static k As Long
Dim sArr(), i As Long, r As Long
If soCau = 0 Then
    sArr = Range("A30:B" & Range("B" & Rows.Count).End(xlUp).Row).Value
    k = UBound(sArr, 1)
    ReDim dArr(1 To k, 1 To 2)
    Randomize
         For i = 1 To k
                r = Int(Rnd() * (k - i + 1)) + 1
                dArr(i, 1) = sArr(r, 1)
                dArr(i, 2) = sArr(r, 2)
                sArr(r, 1) = sArr(k - i + 1, 1)
            sArr(r, 2) = sArr(k - i + 1, 2)
        Next
End If
If soCau = k Then
    MsgBox "Da hêt so cau"
Else
    soCau = soCau + 1
    Range("A15") = dArr(soCau, 1)
    Range("B15") = dArr(soCau, 2)
End If
End Sub
 
Hoăc thử code này:
Mã:
Public Sub Random2()
Static soCau As Long
Static dArr As Variant
Static k As Long
Dim sArr(), i As Long, r As Long
If soCau = 0 Then
    sArr = Range("A30:B" & Range("B" & Rows.Count).End(xlUp).Row).Value
    k = UBound(sArr, 1)
    ReDim dArr(1 To k, 1 To 2)
    Randomize
         For i = 1 To k
                r = Int(Rnd() * (k - i + 1)) + 1
                dArr(i, 1) = sArr(r, 1)
                dArr(i, 2) = sArr(r, 2)
                sArr(r, 1) = sArr(k - i + 1, 1)
            sArr(r, 2) = sArr(k - i + 1, 2)
        Next
End If
If soCau = k Then
    MsgBox "Da hêt so cau"
Else
    soCau = soCau + 1
    Range("A15") = dArr(soCau, 1)
    Range("B15") = dArr(soCau, 2)
End If
End Sub
code nay được nek ad...cám ơn ad nhiu lắm
Bài đã được tự động gộp:

Tháo bỏ merge cells vùng a2:e14 rồi dùng đọan code này xem sao
Mã:
Option Explicit
Public PArr As Variant
Public Num As Long
Public Num1 As Long
Sub Random_()
Dim i, j
If Num = 0 Then
    Dim Sarr As Variant
    Sarr = Sheet1.Range("a30").CurrentRegion
    ReDim PArr(1 To 3, 1 To UBound(Sarr))
    For i = 1 To UBound(Sarr)
        PArr(1, i) = Sarr(i, 1)
        PArr(2, i) = Sarr(i, 2)
    Next i
    Num1 = UBound(Sarr)
End If
If Num = Num1 Then
    MsgBox "Da het so lieu"
    Exit Sub
End If
Randomize
j = UBound(PArr, 2) * 10
i = (Rnd() * (j - 1)) \ 10 + 1
Do While PArr(3, i) = 1
    i = (Rnd() * (j - 1)) \ 10 + 1
Loop
PArr(3, i) = 1
Num = Num + 1
Sheet1.Range("a2") = PArr(1, i)
Sheet1.Range("b2") = PArr(2, i)
End Sub
code nay s e bấm chạy code thi nó không nhảy j hết ad ơi
Bài đã được tự động gộp:

Hoăc thử code này:
Mã:
Public Sub Random2()
Static soCau As Long
Static dArr As Variant
Static k As Long
Dim sArr(), i As Long, r As Long
If soCau = 0 Then
    sArr = Range("A30:B" & Range("B" & Rows.Count).End(xlUp).Row).Value
    k = UBound(sArr, 1)
    ReDim dArr(1 To k, 1 To 2)
    Randomize
         For i = 1 To k
                r = Int(Rnd() * (k - i + 1)) + 1
                dArr(i, 1) = sArr(r, 1)
                dArr(i, 2) = sArr(r, 2)
                sArr(r, 1) = sArr(k - i + 1, 1)
            sArr(r, 2) = sArr(k - i + 1, 2)
        Next
End If
If soCau = k Then
    MsgBox "Da hêt so cau"
Else
    soCau = soCau + 1
    Range("A15") = dArr(soCau, 1)
    Range("B15") = dArr(soCau, 2)
End If
End Sub
khi thông báo hết số câu thì có cách nào cho nó chạy lại mà không cần tắt bảng tính không Bạn. và khi dử liệu cột A hiện lên mình nhập một dữ liệu vào một ô quy định nếu trùng với dữ liệu cột B mà tương đối với cột A trong vùng dử liệu chó trước thì sẻ cộng điểm vào ô điểm qui định nếu không trùng thì không cộng điểm...có cách nào làm được như v không Bạn giúp mình với...
 
Lần chỉnh sửa cuối:
Thay câu:

MsgBox "Da hêt so cau"

bằng câu:

If MsgBox("Da hêt so cau" & ChrW(10) & " Ban muon chay lai?", vbOKCancel, "Thong bao") = vbOK Then soCau = 0

If MsgBox("Da hêt so cau" & ChrW(10) & " Ban muon chay lai?", vbOKCancel, "Thong bao") = vbOK Then
soCau = 0
Random2 ' chạy lại luôn
End If

Đồng thời, đặt randomize ở đầu sub

Static RNDMIZED As Boolean
IF Not RNDMIZED Then Randomize: RNDMIZED = True
 
Mọi người ơi cho e hỏi...e có một bảng tinh như ở dưới.. khi e bấm ô next thì một chử kanji khác hiện lên ngẫu nhiên từ vùng dữ liệu nhập sẵn ở phía dưới..và khi em nhâp liệu vào ô đáp án là chử hiragana theo cột B tướng đối với cột A từ vùng dữ liệu thì làm thế nào để noa hiểu là đúng hay sai khi em bấm vào nút kiểm tra,... và tự động cộng điểm vào ô điểm khi dử liệu em nhập vào đúng với dử liệu cột B trong vùng dữ liệu bên dưới...hiện số câu sai vào ô số từ sai...em tạo phần mềm này để tự học chử kanji ạ...mọi người giúp em với
 

File đính kèm

  • 第32課 (Autosaved).xlsm
    24.2 KB · Đọc: 12
các bác cho e hỏi e có một bảng tính khi e nhập dữ liệu vào 2 ô ở cột b của sheet1 thi lam cach nao có thể ấn một nút nó tự copy qua 2 ô o sheet2 và cứ như thế nó xêp dần xuống ở sheet 2/...bác nào biet chỉ e với
 

File đính kèm

  • Book1.xlsx
    9.1 KB · Đọc: 10
Đươ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é
Anh ơi, Với một dãy số trùng lặp thì nên làm như thế nào vậy ạ?
 
Anh ơi, Với một dãy số trùng lặp thì nên làm như thế nào vậy ạ?
Mình có cách cù lần, như sau:
b1./ Tìm trị cực đại & cực tiểu trong dãy
b2./ Tạo vòng lặp duyệt từ cực tiểu đến cực đại vừa tìm thấy
b2.1./ Khi duyệt thấy 1 chỉ số trong vòng lặp mà có trong dãy, ta ghi nối vô tham biến kiểu chuỗi (đã khai báo trước) theo kiểu
StrC= StrC & Right("00" & CStr(J),3)
b3./ Kích hoạt hàm tạo số ngẫu
b4./ Tạo vòng lặp Do . . Loop
b4.1./ Trong vòng lặp ta lấy 1 số ngẫu bất kì trong (khuôn khổ) độ dài của chuỗi StrC
b4.2./ Nếu số ngẫu được tạo ra trùng với các số 1, 4, 7, . . thì ta tiến hành:
a) Tăng biến đếm lên 1
b) Cắt 3 kí tự tại vị trí ngẫu, biếm thành kí số & ghi vô đâu đó
c) Cắt bỏ 3 kí tự tại vị trí ngẫu (trở đi) khỏi chuỗi StrC
Thực hiện vòng lặp Do . .Loop này đến thi biến đếm thỏa
Chúc bạn thành công & cuối tuần vui vẻ!

[Nhớ làm xong trước khi trái bóng ở MĐ lăn đó nghe!]
 
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!

Đơn giản là bạn nhập ô C1 như thế này:
=INDEX(B2:B30,RANDBETWEEN(2,30))
 
Đươ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é
bác ơi! sao em vào file của bác thì có hàm UniqueRandomNum còn file khác thì ko có hàm đó? Vậy thì mình nên làm sao để tất cả file Excel có hàm UniqueRandomNum ?
 
Bạn ơi phần mềm mình cần là khi mình chọn 3 hoặc 4 số thì phần mềm có thể chọn lọc cho mình thành nhiều cặp số 06 cặp mà các cặp chúng hay về với nhau ví dụ mình chọn 12-15-18-45 thì phần mềm lọc ra 100 cặp hoặc 500 cặp 6 số mà 2 cặp số phần mềm chọn đã về cùng với một trong các cặp 12-15-18-45 trong các kỳ quay trước . Cảm ơn bạn
 
Bạn nhận file xem thử, muốn thay đổi bạn bấm F9 là được, sử dụng CT nên hơi chậm tý, mình làm 2000 số, muốn nhiều hơn thì bạn kéo xuống nữa!!!
P/s: không hiểu sao sếp bạn mua 20tr/ ngày, thì thu nhập 1 năm ít nhất 10 tỷ, như vậy cần gì phải mua vé số ta!!!
Nếu mà ko muốn dừng ở 2000 mà muốn nó chạy hết tất cả các cách thì làm như thế nào v ạ
E tính nó ra 5.864.443.200 cách
 
Web KT
Back
Top Bottom