Giúp em hàm tạo chuỗi ngẫu nhiên ạ! (1 người xem)

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

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

lala_qn

Thành viên tiêu biểu
Tham gia
2/5/09
Bài viết
598
Được thích
17
Nghề nghiệp
chưa ổn định
em chào anh chị!
vd em cho sắn 1 chuỗi kí tự : ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@#*

- Trường hợp 1: viết dùm em hàm tạo kí tự ngẫu nhiên theo chuỗi kí tự đã cho, ngẫu nhiên số lượng kí tự từ 4 đến 8 kí tự

- Trường hợp 2: giống trường hợp 1, nhưng tạo ra 2 chuổi nối nhau bằng khoảng cách ạ

nhờ anh chị viết dùm em 2 hàm 2 trường hợp này với ạ, em cảm ơn anh chị nhiều !
 
Lần chỉnh sửa cuối:
em chào anh chị!
vd em có chuỗi dữ liệu : ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr stuvwxyz@#*
- Trường hợp 1: nhờ anh chị viết dùm em hàm tạo chuỗi ngẫu nhiêu từ 4 đến 8 kí tự theo chuỗi dữ liệu đã cho ạ
- Trường hợp 2: viết dùm em hàm tạo chuổi dữ liệu ngẫu nhiên giống trường hợp 1, nhưng là tạo 2 chuỗi ngẫu nhiên nối với nhau bằng khoảng cách ạ
em cảm ơn anh chị nhiều ạ!
Bạn tham khảo
 
@lala_qn Thử code sau
Mã:
Sub abc()
Dim Chuoi
Dim SoKytu
Dim Kq
Dim i, j, k
Chuoi = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr stuvwxyz@#*"
SoKytu = 9 '<--Thay doi so luong ky tu tai day
k = Len(Chuoi)
If SoKytu > k Then
    MsgBox "Qua dai so voi quy dinh"
    Exit Sub
End If
Do While i < SoKytu
    j = Fix(Rnd() * (k - 1)) + 1
    Kq = Kq & " " & Mid(Chuoi, j, 1)
    Mid(Chuoi, j, 1) = Mid(Chuoi, k, 1)
    k = k - 1
    i = i + 1
Loop
Sheet1.Range("A1") = Trim(Kq)
End Sub
 
@lala_qn Thử code sau
Mã:
Sub abc()
Dim Chuoi
Dim SoKytu
Dim Kq
Dim i, j, k
Chuoi = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr stuvwxyz@#*"
SoKytu = 9 '<--Thay doi so luong ky tu tai day
k = Len(Chuoi)
If SoKytu > k Then
    MsgBox "Qua dai so voi quy dinh"
    Exit Sub
End If
Do While i < SoKytu
    j = Fix(Rnd() * (k - 1)) + 1
    Kq = Kq & " " & Mid(Chuoi, j, 1)
    Mid(Chuoi, j, 1) = Mid(Chuoi, k, 1)
    k = k - 1
    i = i + 1
Loop
Sheet1.Range("A1") = Trim(Kq)
End Sub
em ko rành về code, nhờ anh viết cho em hàm với ạ, thanks anh !
 
Mã:
Function ChuoiNgauNhien(ByVal iMin&, ByVal iMax&, Optional ByVal BlnGhep As Boolean = False)
  Const Chuoi As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@#*"
 
  ChuoiNgauNhien = TrichChuoi(Chuoi, iMax, iMin)
  If BlnGhep Then
    ChuoiNgauNhien = ChuoiNgauNhien & " " & TrichChuoi(Chuoi, iMax, iMin)
  End If
End Function
Private Function TrichChuoi(Chuoi, iMax, iMin)
  Dim Res$, j&, k&, n&, SoKytu&
  Randomize
  n = Len(Chuoi)
  SoKytu = Int(Rnd() * (iMax - iMin + 1) + iMin)
  For k = 1 To SoKytu
    j = Int(Rnd() * n + 1)
    Res = Res & Mid(Chuoi, j, 1)
  Next k
  TrichChuoi = Res
End Function
Công thức
=ChuoiNgauNhien(5,8)
=ChuoiNgauNhien(5,8,TRUE)
 
Mã:
Function ChuoiNgauNhien(ByVal iMin&, ByVal iMax&, Optional ByVal BlnGhep As Boolean = False)
  Const Chuoi As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@#*"

  ChuoiNgauNhien = TrichChuoi(Chuoi, iMax, iMin)
  If BlnGhep Then
    ChuoiNgauNhien = ChuoiNgauNhien & " " & TrichChuoi(Chuoi, iMax, iMin)
  End If
End Function
Private Function TrichChuoi(Chuoi, iMax, iMin)
  Dim Res$, j&, k&, n&, SoKytu&
  Randomize
  n = Len(Chuoi)
  SoKytu = Int(Rnd() * (iMax - iMin + 1) + iMin)
  For k = 1 To SoKytu
    j = Int(Rnd() * n + 1)
    Res = Res & Mid(Chuoi, j, 1)
  Next k
  TrichChuoi = Res
End Function
Công thức
=ChuoiNgauNhien(5,8)
=ChuoiNgauNhien(5,8,TRUE)
em mới mô tả lại bài viết, nhờ anh viết dùm em hàm với ạ, thanks anh!
 
Lần chỉnh sửa cuối:
viết dùm em hàm excel để em cần copy chạy cho tiện với anh nhé,
(*) Đầu câu nên viết 'bông' để tự tôn trọng cũng như để người khác tôn trọng mình.
(*) Nói trước Công thức với mình là trình độ tối thiểu, nên những gì viết ra đây là để đọc cho vui:
B1: Bạn lập 02 Name trong Excel
Name1 có tên như StrC là chuỗi mà #1 bạn đã nêu ra;
Name2 (Có tên như 'SoN') nội dung là hàm RANDBETWEEN(1, LEN(StrC))
B2: Ở 1 ô trống trãi nào đó trên trang tính bạn thử chiêm nghiệm công thức =MID(StrC,SoN,1) & suy tiếp . . .
Chúc bạn thành công!
 
(*) Đầu câu nên viết 'bông' để tự tôn trọng cũng như để người khác tôn trọng mình.
(*) Nói trước Công thức với mình là trình độ tối thiểu, nên những gì viết ra đây là để đọc cho vui:
B1: Bạn lập 02 Name trong Excel
Name1 có tên như StrC là chuỗi mà #1 bạn đã nêu ra;
Name2 (Có tên như 'SoN') nội dung là hàm RANDBETWEEN(1, LEN(StrC))
B2: Ở 1 ô trống trãi nào đó trên trang tính bạn thử chiêm nghiệm công thức =MID(StrC,SoN,1) & suy tiếp . . .
Chúc bạn thành công!
em gà excel lắm anh, nên thích dùng hàm anh
anh hướng dẫn cụ thể dùm em với anh nhé !
 
Cái thứ cùi bắp ấy mà xài làm gì!

=MID(StrC,SoN,1)& MID(StrC,SoN,1)&MID(StrC,SoN,1)& MID(StrC,SoN,RANDBETWEEN(1,3))& MID(StrC,SoN,1)
TH 1TH 2TH 1: ngẫu nhiên số lượng kí tự từ 5 đến 8 kí tự
xBwOPQIUiKz@#H ckBIJUTH 2: giống TH 1 nhưng ngẫu nhiên 2 chuỗi kí tự, 2 chuỗi nối với nhau bằng khoảng cách,
rKhdegtvyEFk WMlQRSF
rJHnopaJucLV GWWlS
GvktuAUlaGHs AEFmnJ
fpRnopzdcmrL RtiZac
GtTEFGQzFbopq# BfkyU
 
Lần chỉnh sửa cuối:
Cái thứ cùi bắp ấy mà xài làm gì!

=MID(StrC,SoN,1)& MID(StrC,SoN,1)&MID(StrC,SoN,1)& MID(StrC,SoN,RANDBETWEEN(1,3))& MID(StrC,SoN,1)

TH 1TH 2TH 1: ngẫu nhiên số lượng kí tự từ 5 đến 8 kí tự
xBwOPQIUiKz@#H ckBIJUTH 2: giống TH 1 nhưng ngẫu nhiên 2 chuỗi kí tự, 2 chuỗi nối với nhau bằng khoảng cách,
rKhdegtvyEFk WMlQRSF
rJHnopaJucLV GWWlS
GvktuAUlaGHs AEFmnJ
fpRnopzdcmrL RtiZac
GtTEFGQzFbopq# BfkyU
em làm như này đúng chưa anh nhỉ, thấy ra TH 1, còn TH 2 chưa ra anh
 

File đính kèm

(1) Chép xuống vài mươi dòng là biết sai đúng liền thôi
(2) TH2 thì "nối" 2 TH1 thông qua " " thôi mà.
Xin nhắc là công thức dài lên hơn gấp đôi chứ không nên ngắn hơn à nha!
 
(1) Chép xuống vài mươi dòng là biết sai đúng liền thôi
(2) TH2 thì "nối" 2 TH1 thông qua " " thôi mà.
Xin nhắc là công thức dài lên hơn gấp đôi chứ không nên ngắn hơn à nha!
Đã xài name rồi thì lòng thòng chi cho mệt
Cứ đặt SoN = Mid(StrC, Randbetween(1, Len(StrC)), 1)
Và đặt thêm cái name SoN8, cộng 8 cái SoN lại.
Sau đó siêng thì =Left(SoN8, Randbetween(4,8))
Không siêng thì lại thêm cái name nữa.

Đã chơi trò biến hoá thì đừng có nói với tôi chuyện chạy chậm nghe.
 

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

Back
Top Bottom