Saya ingin membuat string acak dengan panjang acak dari alfabet di Excel. Misalnya, "jlskdjf", "kjlk", "kljsodif", dll. Bagaimana saya bisa melakukan itu?
Saya ingin membuat string acak dengan panjang acak dari alfabet di Excel. Misalnya, "jlskdjf", "kjlk", "kljsodif", dll. Bagaimana saya bisa melakukan itu?
Jawaban:
Asumsikan Anda ingin membuat string panjang acak (1-8 karakter) dari huruf kecil (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)
Masing-masing CHAR(...)
menghasilkan 1 huruf kecil acak.
Untuk menggunakan huruf besar (AZ) dan bukan huruf kecil, Anda dapat menggantinya CHAR(RAND()*26+97)
dengan CHAR(RAND()*26+65)
. Karena kode ASCII AZ adalah 65-90, dan kode ASCII az adalah 97-122.
Untuk hanya rumus, Anda dapat menggunakan RANDBETWEEN()
dari Analisis ToolPak untuk menggantikan RAND()*xx+yy
.
Asumsikan Anda ingin membuat string panjang acak (1-8 karakter) dari karakter tertentu.
Anda dapat memasukkan karakter yang diinginkan di sel A1 , misalnya:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
Kemudian,
=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)
Masing MID(...)
- masing mendapat 1 karakter acak dari A1.
Hmm. Akan sangat mudah dengan VBA untuk membuat fungsi untuk melakukannya. Dengan formula itu sedikit lebih terlibat.
=CHAR(RANDBETWEEN(97,122))
jelas memberi Anda satu surat. Jadi letakkan sepuluh di kolom A.=A1
dalam sel B1.=B1&A2
B2, dan isi B2: B10. (CONCATENATE tidak menerima rentang, mengganggu.)=OFFSET(B1,RANDBETWEEN(0,9),0)
.Mungkin ada cara yang lebih mudah, dengan rumus array atau sesuatu.
Sebagai rumus untuk satu karakter Anda bisa menggunakan ini
=CHAR(RANDBETWEEN(97,122))
Lihat saja ACSII-Table apa saja untuk memilih rentang rand yang Anda inginkan.
Tetapi panjang acak itu rumit, bukan karena panjang acak, tetapi karena karakter acak yang ingin Anda kumpulkan. Jika tidak, Anda bisa saja fungsi REPT bergabung dengan fungsi RAND dan rumus di atas.
Tetapi agar sesuai dengan hasil yang Anda jelaskan, saya akan menggunakan kode ini:
'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
Jika ada solusi untuk melakukan kode ini dengan formula, maka tanpa VBA, saya sangat ingin tahu tentang hal itu :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
Formula ini tidak memerlukan sel dengan "ab ... ABC ... 012"
Acak 1 char dari [a-zA-Z0-9].
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
Jika diperlukan lebih banyak karakter, salin CHAR (...) dan pisahkan dengan &.
Solusi ini dari Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(Jika Anda ingin string hanya huruf lihat paragraf yang ditambahkan di bawah ini)
Hasilkan string acak dari huruf besar dan angka dengan panjang acak antara 8 dan 12:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
Penjelasan:
BASE(RAND()*10^18,36,12)
. Triknya adalah menghasilkan angka acak yang besar dan kemudian mengubahnya menjadi basis 36 untuk mendapatkan sesuatu yang secara efektif terlihat seperti string.RAND()*4+8
Fungsi yang digunakan dalam rumus (dalam ke luar):
RAND()
Mengembalikan angka acak antara 0 dan 1.BASE(Number; Radix; [MinimumLength])
Mengubah bilangan bulat positif ke basis yang ditentukan menjadi teks dari sistem penomoran. Digit 0-9 dan huruf AZ digunakan.MID("Text"; Start; Number)
Mengembalikan string teks dari sebuah teks. Parameter menentukan posisi awal dan jumlah karakter.Angka tersebut 10^18
adalah angka ajaib yang string yang dihasilkannya tidak memiliki trailing atau nol di depannya. Jika Anda perlu membuat string yang lebih panjang, saya sarankan untuk membuat dua atau lebih string tersebut dan menyatukannya.
Harap perhatikan: solusi ini telah diuji pada LibreOffice Calc 5, tetapi harus bekerja juga di Microsoft Excel karena fungsinya sama seperti pada dokumentasi mereka (yang saya tidak dapat tautkan karena saya tidak memiliki reputasi yang cukup).
Karena itu ditunjukkan dalam komentar bahwa OP secara khusus meminta surat hanya saya akan melemparkan versi alternatif ini di:
=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)
di mana Anda mengganti semua kemunculan digit ke string kosong. Dengan cara ini Anda hanya mendapatkan huruf (huruf besar). Saya telah men-tweak angka ajaib untuk menghitung kemungkinan bahwa string acak awal memiliki banyak digit. Ini tidak aman, meskipun dalam arti bahwa pada prinsipnya Anda bisa mendapatkan string yang lebih pendek dari yang diharapkan.
Jika Anda perlu memastikan panjang minimum maka Anda memiliki alternatif lain (bahkan lebih rumit):
=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)
di mana Anda mengganti setiap digit dengan huruf besar yang dibuat secara acak.
Saya harus mengatakan bahwa apa yang saya sukai dari solusi awal sehubungan dengan yang disediakan dalam jawaban lain adalah bahwa itu singkat dan relatif mudah untuk dipahami. Dua alternatif kehilangan properti ini.
Untuk menghasilkan karakter acak:
Di Sel B1
= CHAR (RANDBETWEEN (48.131))) (atau karakter apa pun yang Anda inginkan)
Isi ini ke jumlah kolom = karakter yang diperlukan maksimum dalam string Anda
Untuk menghasilkan panjang acak
Di Sel A1
= KIRI (CONCATENATE (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1), RANDBETWEEN (0,9))
Untuk menghasilkan string acak
Isi seluruh tabel di kolom A1
INDEX(B1:B10,RANDBETWEEN(1,10))