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.
 
Web KT

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

Back
Top Bottom