Code Tạo số nhảy (1 người xem)

  • Thread starter Thread starter datn90
  • Ngày gửi Ngày gửi
Liên hệ QC

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

datn90

Thành viên mới
Tham gia
24/6/11
Bài viết
17
Được thích
0
[h=2][/h]
Anh/Chị cho em hỏi.
Bây giờ m muốn lập code cho chương trình số nhảy ngẫu nhiên. Em cũng làm thử hàm trên excel rồi cũng ok lắm nhưng có 1 nhược điểm là số bị trùng khi tạo 2 sheet khác nhau và số nhảy (vi du em dùng hàm "=MID(NN,RANDBETWEEN(1,8),1)&MID(NN,RANDBETWEEN(1, 8),1)&MID(NN,RANDBETWEEN(1,8),1)&MID(NN,RANDBETWEE N(1,8),1)&MID(NN,RANDBETWEEN(1,8),1)&MID(NN,RANDBE TWEEN(1,8),1)&MID(NN,RANDBETWEEN(1,8),1)&MID(NN,RA NDBETWEEN(1,8),1)") thì số nó chuyển đổi ngẫu nhiên nhưng mà em muốn là mình có thể qui định số và chữ ví dụ có 4 số và 2 ký tự chang hạn "12A34D, 45AD23, 5F32R4...".

Mong anh chị giúp. Mình có cách nào viết code để giải quyết vấn đề trên không?
Em cần chuẩn bị những gì.
 
Fương án củ chuối của mình là vầy:

Khai báo 1 hằng chuỗi gồm 26 chữ cái;
Dùng hàm Rand() để lấy ra 2 chữ cái ngẫu nhiên từ chuỗi trên;

Khai báo hằng kiểu chuỗi gồm 10 ký số & dùng 4 vòng lặp lấy ra 4 lượt ký số ngẫu nhiên từ chuỗi 2 này

Gộp chúng lại & trộn ngẫu nhiên trên 66 vạn lần vòng lặp ta sẽ có 1 chuỗi chứa 2 ký tự & 4 ký số ngẫu nhiên.

Bạn thấy thế nào?
 
Upvote 0
Đã viết xong trong khi chờ bạn, đành đưa lên đây

PHP:
Option Explicit
Sub TaoMaNgauNhien()
 Const Ch1 As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 Const Ch2 As String = "0123456789"
 Dim Ma As String, Chu As String
 Dim Ww As Long, jJ As Long, Num As Long, Thoat As Long
 
 Randomize:             Columns("B:B").ClearContents
 'Muón Có Them Nhièu Ma Só Thì Tang Tri 999 Hay 99 Len nha:'
 Thoat = 999 + Int(99 * Rnd()):     [b1].Value = Thoat
 Do
   Ww = Ww + 1
   If Ww > Thoat Then Exit Do
   For jJ = 1 To 2
      Randomize:        Ma = Ma & Mid(Ch1, Int(25 * Rnd()) + 1, 1)
   Next jJ
   For jJ = 1 To 4
      Randomize:        Ma = Ma & Mid(Ch2, Int(9 * Rnd()) + 1, 1)
   Next jJ
   Randomize
   For jJ = 1 To 10 ^ 3 + Int(60444 * Rnd())
      Randomize:        Num = 1 + Int(5 * Rnd)
      If Num > 1 Then Ma = Mid(Ma, Num, 6) & Left(Ma, Num - 1)
   Next jJ
   With [B65500].End(xlUp).Offset(1)
      .Value = Ma:      Ma = ""
   End With
 Loop
End Sub
 
Upvote 0
PHP:
Option Explicit
Sub TaoMaNgauNhien()
 Const Ch1 As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 Const Ch2 As String = "0123456789"
 Dim Ma As String, Chu As String
 Dim Ww As Long, jJ As Long, Num As Long, Thoat As Long
 
 Randomize:             Columns("B:B").ClearContents
 'Muón Có Them Nhièu Ma Só Thì Tang Tri 999 Hay 99 Len nha:'
 Thoat = 999 + Int(99 * Rnd()):     [b1].Value = Thoat
 Do
   Ww = Ww + 1
   If Ww > Thoat Then Exit Do
   For jJ = 1 To 2
      Randomize:        Ma = Ma & Mid(Ch1, Int(25 * Rnd()) + 1, 1)
   Next jJ
   For jJ = 1 To 4
      Randomize:        Ma = Ma & Mid(Ch2, Int(9 * Rnd()) + 1, 1)
   Next jJ
   Randomize
   For jJ = 1 To 10 ^ 3 + Int(60444 * Rnd())
      Randomize:        Num = 1 + Int(5 * Rnd)
      If Num > 1 Then Ma = Mid(Ma, Num, 6) & Left(Ma, Num - 1)
   Next jJ
   With [B65500].End(xlUp).Offset(1)
      .Value = Ma:      Ma = ""
   End With
 Loop
End Sub

Anh ơi cho em hỏi chút là cách kiểm tra như thế nào ạ?
 
Upvote 0
Anh ơi cho em hỏi chút là cách kiểm tra như thế nào ạ?

Thì bạn lấy 1 trang tính trắng & chạy macro trên nó là được.

Còn cách sao cho macro này chạy thì bạn cần tìm trên diễn đàn thêm.

PHP:
Option Explicit
Sub TaoMaNgauNhien()
 Const Ch1 As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 Const Ch2 As String = "0123456789"
 Dim Ma As String, Chu As String
 Dim Ww As Long, jJ As Long, Num As Long, Thoat As Long, Tmr As Double
 
 Randomize:                                 Tmr = Timer()
 Columns("B:B").ClearContents
 'Muón Có Them Nhièu Ma Só Thì Tang Tri 999 Hay 99 Len nha:'
 Thoat = 999 + (99 * Rnd()) \ 1:            [b1].Value = Thoat
 ReDim Arr(1 To Thoat, 1 To 1)
 Do
   Ww = Ww + 1
   If Ww > Thoat Then Exit Do
   For jJ = 1 To 2
      Ma = Ma & Mid(Ch1, Int(25 * Rnd()) + 1, 1)
   Next jJ
   For jJ = 1 To 4
      Ma = Ma & Mid(Ch2, Int(9 * Rnd()) + 1, 1)
   Next jJ
   For jJ = 1 To 999 + (999 * Rnd()) \ 1
      Num = 1 + Int(5 * Rnd)
      If Num > 1 Then Ma = Mid(Ma, Num, 6) & Left(Ma, Num - 1)
   Next jJ
   Arr(Ww, 1) = Ma:                         Ma = ""
 Loop
 [B3].Resize(Thoat) = Arr()
 [b1].Value = Timer() - Tmr
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Anh/Chị cho em hỏi.
Bây giờ m muốn lập code cho chương trình số nhảy ngẫu nhiên. Em cũng làm thử hàm trên excel rồi cũng ok lắm nhưng có 1 nhược điểm là số bị trùng khi tạo 2 sheet khác nhau và số nhảy (vi du em dùng hàm "=MID(NN,RANDBETWEEN(1,8),1)&MID(NN,RANDBETWEEN(1, 8),1)&MID(NN,RANDBETWEEN(1,8),1)&MID(NN,RANDBETWEE N(1,8),1)&MID(NN,RANDBETWEEN(1,8),1)&MID(NN,RANDBE TWEEN(1,8),1)&MID(NN,RANDBETWEEN(1,8),1)&MID(NN,RA NDBETWEEN(1,8),1)") thì số nó chuyển đổi ngẫu nhiên nhưng mà em muốn là mình có thể qui định số và chữ ví dụ có 4 số và 2 ký tự chang hạn "12A34D, 45AD23, 5F32R4...".

Mong anh chị giúp. Mình có cách nào viết code để giải quyết vấn đề trên không?
Em cần chuẩn bị những gì.

Chào bạn, gửi bạn file excel này, chỉ cần mở ra, click lên hình và làm theo hướng dẫn xem có đúng yêu câu của bạn không? Code viện vội nên chắc sẽ khó nhìn, nhưng chạy !

=== Vài suy nghĩ và cách mình làm bài này ===
  • Nhu cầu của bạn là tạo ra nhiều chuỗi kí tự ngẫu nhiên, thành phần của mỗi chuỗi được lấy từ các chữ in hoa từ A - Z (của bảng chữ cái tiếng anh -> mình giả sử như vậy) và các số từ 0 - 9. Trong chuỗi này, chữ và số cũng nhận các vị trí ngẫu nhiên.
  • Trong bảng ASCII thì mã của các chữ cái từ A - Z và số từ 0 - 9 lần lượt từ 65 - 90 và 48 - 57. Chúng ta sẽ không dùng 2 hằng số String như các làm của bác ChanhTQ@ bởi vì các hàm thực hiện trên String sẽ rất "đắt" - tốn bộ nhớ và dẫn đến code chạy không nhanh.
  • Ta sẽ dùng 2 vòng lặp để lấy ra ngẫu nhiên phần chữ và phần số, rồi ghép 2 phần này vào với nhau rồi lại trộn lên 1 lần nữa, kết quả cuối cùng ta sẽ kiểm tra bằng Dictionary của VBA ( Lưu ý khi sử dụng Dictionary thì các bạn phải vào trong VBA Editor/Tools/References/ đánh dấu chọn vào Microsoft Scripting Runtime ) và cuối cùng là in ra bảng tính.
  • Đằng sau macro mình tạo ra để bạn nhập số liệu vào ( bao nhiêu số, bao nhiêu ký tự, bao nhiêu chuỗi) là function randomiii( số ký tự , số số , số lượng chuỗi ), phần này bạn xem trong code sẽ rõ hơn.
  • Hàm Shuffle Array mình không tự viết mà copy :D:D ở trên Pearson

Thế thôi, mong câu trả lời của mình giải quyết được vấn đề của bạn
 

File đính kèm

Upvote 0
Mình biết chủ đề đã cũ, nhưng nếu được thì cho mình hỏi, file excel của bạn kuldokk khi muốn xuất nhiều hơn 100 số phải làm như thế nào, điều chỉnh cột xuất ra dữ liệu (ví dụ muốn xuất cả 2 cột A và B ) thì chỉnh như thế nào?
 
Upvote 0

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

Back
Top Bottom