Làm thế nào để tạo một chuỗi ngẫu nhiên có độ dài ngẫu nhiên từ bảng chữ cái?


11

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:


14

Căn bản

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.


Nâng cao

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.


4

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.
  • Sau đó trong cột tiếp theo, đặt =A1vào ô B1.
  • Đặt =B1&A2vào B2 và điền vào B2: B10. (CONCATENATE không chấp nhận phạm vi, thật khó chịu.)
  • Trong ô C2, đặt =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ì đó.


1
+1 - Tôi biết nên có một cách - tuy nhiên, tôi thà sử dụng INDEX thay vì OFFSET - nhưINDEX(B1:B10,RANDBETWEEN(1,10))
Jook

2

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ó :)


1

=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))


Một chút bối cảnh về cách làm việc này sẽ thực sự cải thiện câu trả lời.
Burgi


0

(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:

  1. tạo một chuỗi chữ số và chữ in hoa ngẫu nhiên, có độ dài minimun 12 : 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.
  2. tạo một số ngẫu nhiên trong khoảng từ 8 đến 12, độ dài chuỗi RAND()*4+8
  3. lấy các ký tự của chuỗi như trong (1) từ 1 đến chiều dài bạn đã tạo trong (2).

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^18nà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).

Chỉnh sửa câu trả lời

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.


OP đặc biệt chỉ yêu cầu các ký tự bảng chữ cái. Bạn có thể chỉnh sửa câu trả lời của bạn để giải quyết điều này?
nhạc2myear

@ music2myear đã hoàn thành, nhưng theo cách này, bạn sẽ mất đi sự đồng nhất của phiên bản gốc.
CristianCantoro

Sự đồng tình chỉ hữu ích nếu nó đáp ứng nhu cầu. Câu trả lời này, mặc dù dài hơn, nhưng tốt hơn bởi vì nó thực sự trả lời câu hỏi cụ thể mà OP đã hỏi.
nhạc2myear

0

Để 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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.