Tôi muốn tạo một chuỗi ngẫu nhiên với độ dài ngẫu nhiên từ bảng chữ cái trong Excel. Ví dụ: "jlskdjf", "kjlk", "kljsodif", v.v ... Làm thế nào tôi có thể làm điều đó?
Tôi muốn tạo một chuỗi ngẫu nhiên với độ dài ngẫu nhiên từ bảng chữ cái trong Excel. Ví dụ: "jlskdjf", "kjlk", "kljsodif", v.v ... Làm thế nào tôi có thể làm điều đó?
Câu trả lời:
Giả sử bạn muốn tạo một chuỗi có độ dài ngẫu nhiên (1-8 ký tự) từ các chữ cái in thường (az).
=LEFT( CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97),
RAND()*8+1)
Mỗi cái CHAR(...)
tạo ra 1 bảng chữ cái viết thường ngẫu nhiên.
Để sử dụng chữ cái in hoa (AZ) thay vì chữ thường, bạn có thể thay thế CHAR(RAND()*26+97)
bằng CHAR(RAND()*26+65)
. Bởi vì mã ASCII của AZ là 65-90 và mã ASCII của az là 97-122.
Để đơn giản là công thức, bạn có thể sử dụng RANDBETWEEN()
Công cụ phân tích để thay thế RAND()*xx+yy
.
Giả sử bạn muốn tạo một chuỗi có độ dài ngẫu nhiên (1-8 ký tự) từ các ký tự cụ thể.
Bạn có thể nhập các ký tự mong muốn trong ô A1 , ví dụ:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
Sau đó,
=LEFT( MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1),
RAND()*8+1)
Mỗi người MID(...)
được 1 ký tự ngẫu nhiên từ A1.
Hừm. VBA sẽ khá dễ dàng để tạo ra một chức năng để làm điều đó. Với công thức, nó liên quan nhiều hơn một chút.
=CHAR(RANDBETWEEN(97,122))
rõ ràng cung cấp cho bạn một chữ cái. Vì vậy, đặt mười trong số những người trong cột A.=A1
vào ô B1.=B1&A2
vào B2 và điền vào B2: B10. (CONCATENATE không chấp nhận phạm vi, thật khó chịu.)=OFFSET(B1,RANDBETWEEN(0,9),0)
.Có thể có một cách dễ dàng hơn, với các công thức mảng hoặc một cái gì đó.
Là một công thức cho một ký tự duy nhất, bạn có thể sử dụng
=CHAR(RANDBETWEEN(97,122))
Chỉ cần nhìn vào bất kỳ Bảng ACSII nào để chọn phạm vi rand mong muốn của bạn.
Nhưng độ dài ngẫu nhiên là khó khăn, không phải vì độ dài ngẫu nhiên, mà vì các ký tự ngẫu nhiên bạn muốn đặt cùng nhau. Mặt khác, bạn chỉ có thể hàm REPT được nối với hàm RAND và công thức ở trên.
Nhưng để phù hợp với kết quả được mô tả của bạn, tôi sẽ sử dụng mã này:
'Put this into a VBA-Module, to be accessable as a worksheet function
Public Function RandomString() As String
Dim i As Long
Dim lngEnd As Long
Dim strResult As String
With Application.WorksheetFunction
lngEnd = .RandBetween(1, 20) 'String length 1-20 characters
strResult = ""
'create a random string of a random length between 1 and 20
For i = 1 To lngEnd
strResult = strResult & Chr(.RandBetween(97, 122))
Next i
End With
Debug.Print strResult
RandomString = strResult 'return the random string
End Function
Nếu có một giải pháp để thực hiện mã này bằng các công thức, do đó không có VBA, tôi rất muốn biết về nó :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
Công thức này không yêu cầu một ô có "abc ... ABC ... 012"
Ngẫu nhiên 1 char từ [a-zA-Z0-9].
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
Nếu cần thêm ký tự, sao chép CHAR (...) và tách chúng bằng &.
Giải pháp này là từ Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(Nếu bạn muốn các chuỗi chỉ có chữ cái, hãy xem đoạn được thêm vào bên dưới)
Tạo một chuỗi ngẫu nhiên các chữ cái viết hoa và các chữ số có độ dài ngẫu nhiên trong khoảng từ 8 đến 12:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
Giải trình:
BASE(RAND()*10^18,36,12)
. Thủ thuật là tạo ra một số ngẫu nhiên lớn và sau đó chuyển đổi nó thành cơ sở 36 để có được thứ gì đó trông giống như một chuỗi.RAND()*4+8
Các hàm được sử dụng trong công thức (từ trong ra ngoài):
RAND()
Trả về một số ngẫu nhiên trong khoảng từ 0 đến 1.BASE(Number; Radix; [MinimumLength])
Chuyển đổi một số nguyên dương thành một cơ sở xác định thành một văn bản từ hệ thống đánh số. Các chữ số 0-9 và các chữ cái AZ được sử dụng.MID("Text"; Start; Number)
Trả về một chuỗi văn bản của một văn bản. Các tham số xác định vị trí bắt đầu và số lượng ký tự.Số 10^18
này là một số ma thuật mà chuỗi được tạo không có các số 0 ở đầu hoặc cuối. Nếu bạn cần tạo chuỗi dài hơn, tôi sẽ đề nghị tạo hai hoặc nhiều chuỗi như vậy và nối chúng.
Lưu ý: giải pháp này đã được thử nghiệm trên LibreOffice Calc 5, nhưng nó cũng hoạt động trong Microsoft Excel vì các chức năng giống như tài liệu của họ (mà tôi không thể liên kết vì tôi không đủ danh tiếng).
Vì nó đã được chỉ ra trong một bình luận rằng OP chỉ đặc biệt yêu cầu các chữ cái nên tôi sẽ ném phiên bản thay thế này vào:
=MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BASE(RAND()*10^22,36,16),"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9",""),1,RAND()*4+8)
nơi bạn thay thế tất cả các lần xuất hiện của các chữ số thành các chuỗi trống. Bằng cách này, bạn chỉ có được chữ cái (chữ hoa). Tôi đã điều chỉnh các số ma thuật để tính khả năng chuỗi ngẫu nhiên ban đầu có nhiều chữ số. Nó không phải là không an toàn, mặc dù theo nghĩa là về nguyên tắc, bạn có thể có được các chuỗi ngắn hơn dự kiến.
Nếu bạn cần chắc chắn về độ dài tối thiểu thì bạn có cách thay thế khác (thậm chí phức tạp hơn) này:
=MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BASE(RAND()*10^22,36,16),"0",CHAR(RANDBETWEEN(65,90))),"1",CHAR(RANDBETWEEN(65,90))),"2",CHAR(RANDBETWEEN(65,90))),"3",CHAR(RANDBETWEEN(65,90))),"4",CHAR(RANDBETWEEN(65,90))),"5",CHAR(RANDBETWEEN(65,90))),"6",CHAR(RANDBETWEEN(65,90))),"7",CHAR(RANDBETWEEN(65,90))),"8",CHAR(RANDBETWEEN(65,90))),"9",CHAR(RANDBETWEEN(65,90))),1,RAND()*4+8)
trong đó bạn thay thế mỗi chữ số bằng một chữ cái viết hoa được tạo ngẫu nhiên.
Tôi phải nói rằng những gì tôi thích về giải pháp ban đầu liên quan đến những câu trả lời được cung cấp trong các câu trả lời khác là nó ngắn gọn và tương đối dễ hiểu. Hai lựa chọn thay thế mất các tính chất này.
Để tạo ký tự ngẫu nhiên:
Trong ô B1
= CHAR (RANDBETweEN (48,131)) (hoặc bất kỳ bộ char nào bạn muốn)
Điền số này vào số cột = ký tự yêu cầu tối đa trong chuỗi của bạn
Để tạo độ dài ngẫu nhiên
Trong ô A1
= TRÁI (CONCATENATE (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1), RANDBETweEN (0,9))
Để tạo chuỗi ngẫu nhiên
Điền toàn bộ bảng vào cột A1
INDEX(B1:B10,RANDBETWEEN(1,10))