Excel'deki alfabeden rastgele uzunluklu rastgele bir dize oluşturmak istiyorum. Örneğin, "jlskdjf", "kjlk", "kljsodif" vb. Bunu nasıl yapabilirim?
Excel'deki alfabeden rastgele uzunluklu rastgele bir dize oluşturmak istiyorum. Örneğin, "jlskdjf", "kjlk", "kljsodif" vb. Bunu nasıl yapabilirim?
Yanıtlar:
Küçük harfli alfabelerden (az) rastgele bir uzunluk (1-8 karakter) oluşturmak istediğinizi varsayalım.
=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)
Her biri CHAR(...)
1 rastgele küçük harf alfabe oluşturur.
Küçük harf yerine büyük harfli alfabe (AZ) kullanmak için CHAR(RAND()*26+97)
ile değiştirebilirsiniz CHAR(RAND()*26+65)
. Çünkü AZ'nin ASCII kodu 65-90 ve az'ın ASCII kodu 97-122'dir.
Basitçe formülü için kullanabilirsiniz RANDBETWEEN()
ait Çözümleme Araç Takımı eklentisinin yerine RAND()*xx+yy
.
Belirli karakterlerden rastgele bir uzunluk (1-8 karakter) dizesi oluşturmak istediğinizi varsayalım.
A1 hücresine istediğiniz karakterleri girebilirsiniz, örneğin:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
Sonra,
=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)
Her biri MID(...)
A1'den 1 rastgele karakter alır.
Hmm. VBA ile bunu yapmak için bir işlev yapmak oldukça kolay olurdu. Formüllerle biraz daha ilgili.
=CHAR(RANDBETWEEN(97,122))
belli ki sana bir mektup veriyor. Bu yüzden on tanesini A sütununa koyun.=A1
B1 hücresini koyun .=B1&A2
B2'yi koyun ve B2: B10'u doldurun. (BİRLEŞTİR aralıkları rahatsız edici bir şekilde kabul etmez.)=OFFSET(B1,RANDBETWEEN(0,9),0)
.Dizi formülleri veya başka bir şeyle daha kolay bir yol olabilir.
Tek bir karakterin formülü olarak bunu kullanabilirsiniz
=CHAR(RANDBETWEEN(97,122))
İstediğiniz rand aralığını seçmek için herhangi bir ACSII Tablosuna bakın.
Ancak rastgele uzunluk, rastgele uzunluk nedeniyle değil, bir araya getirmek istediğiniz rastgele karakterler nedeniyle zor. Aksi takdirde, RAND işleviyle ve yukarıdaki formülle yalnızca REPT işlevini birleştirebilirsiniz.
Ama açıklanan sonucu sığdırmak için, ben bu kodu kullanabilirsiniz:
'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
Bu kodu formüllerle yapmak için bir çözüm varsa, bu nedenle VBA olmadan, bunu bilmek istiyorum :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
Bu formül "abc ... ABC ... 012" içeren bir hücre gerektirmez
[A-zA-Z0-9] 'dan rastgele 1 karakter.
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
Daha fazla karakter gerekiyorsa, CHAR'ı (...) kopyalayın ve & ile ayırın.
Bu çözüm Oaktree'den http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(Yalnızca harf dizeleri istiyorsanız, aşağıdaki paragrafa bakın)
8 ila 12 arasında rastgele büyük harf ve rakamlardan oluşan rastgele bir dize oluşturun:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
Açıklama:
BASE(RAND()*10^18,36,12)
. Hile büyük bir rasgele sayı üretiyor ve daha sonra onu etkili bir şekilde bir dizeye benzeyen bir şey elde etmek için taban 36'ya dönüştürüyor.RAND()*4+8
Formülde kullanılan işlevler (içten dışa):
RAND()
0 ile 1 arasında rastgele bir sayı döndürür.BASE(Number; Radix; [MinimumLength])
Pozitif bir tam sayıyı, belirtilen bir tabana, numaralandırma sisteminden bir metne dönüştürür. 0-9 arasındaki rakamlar ve AZ harfleri kullanılır.MID("Text"; Start; Number)
Metnin metin dizesini döndürür. Parametreler başlangıç konumunu ve karakter sayısını belirtir.Sayı 10^18
, oluşturulan dizenin sonunda veya başında sıfır olmadığı sihirli bir sayıdır. Daha uzun dize oluşturmanız gerekiyorsa, bu tür iki veya daha fazla dize oluşturup bunları birleştirmeyi öneririm.
Lütfen dikkat: Bu çözüm LibreOffice Calc 5 üzerinde test edilmiştir, ancak işlevler belgelerine göre aynı olduğundan (yeterli üne sahip olmadığım için bağlantı kuramıyorum) Microsoft Excel'de de çalışmalıdır.
OP özellikle sadece harf istedi bir yorumda işaret beri, ben bu alternatif sürümü atar:
=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)
burada tüm basamak oluşumlarını boş dizelerle değiştirirsiniz. Bu şekilde yalnızca (büyük harf) harfler elde edersiniz. İlk rastgele dizenin birçok basamak içermesi olasılığı için sihirli sayıları ayarladım. Prensipte beklenenden daha kısa dizeler elde edebileceğiniz anlamına gelse de, güvenli değildir.
Minimum uzunluktan emin olmanız gerekiyorsa, bu başka (daha karmaşık) alternatifiniz vardır:
=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)
burada her rakamı rastgele oluşturulmuş büyük harfle değiştirirsiniz.
Şunu söylemeliyim ki, diğer cevaplarda verilenlerle ilgili olarak ilk çözümden hoşlandığım şey, anlaşılır olmanın özlü ve nispeten basit olmasıdır. İki alternatif bu özellikleri kaybeder.
Rastgele karakter üretmek için:
B1 Hücresinde
= CHAR (RANDBETWEEN (48,131)) (veya istediğiniz karakter kümesi)
Bunu sütun sayısına kadar doldurun = dizenizde gereken maksimum karakter sayısı
Rastgele uzunluk oluşturmak için
A1 hücresinde
= SOL (BİRLEŞTİR (B1, C1, D1, E1, F1, G1, H 1, I1, J1, K1), RANDBETWEEN (0,9))
Rastgele dizeler oluşturmak için
Tüm tabloyu A1 sütununda doldurun
INDEX(B1:B10,RANDBETWEEN(1,10))