Alfabeden rastgele uzunluktaki rastgele bir dize nasıl oluşturulur?


Yanıtlar:


14

Temel

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.


ileri

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.


4

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.
  • Sonra bir sonraki sütuna =A1B1 hücresini koyun .
  • =B1&A2B2'yi koyun ve B2: B10'u doldurun. (BİRLEŞTİR aralıkları rahatsız edici bir şekilde kabul etmez.)
  • C2 hücresine koyun =OFFSET(B1,RANDBETWEEN(0,9),0).

Dizi formülleri veya başka bir şeyle daha kolay bir yol olabilir.


1
+1 - Bir yol olması gerektiğini biliyordum - ancak, OFFSET yerine INDEX kullanmayı tercih ederim - likeINDEX(B1:B10,RANDBETWEEN(1,10))
Jook

2

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


1

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


Bunun nasıl işlediğine dair biraz daha bağlam, cevabı gerçekten geliştirecektir.
Burgi


0

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

  1. minimun uzunluğu 12 olan rastgele bir rakam ve büyük harf dizesi oluşturun 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.
  2. 8 ile 12 arasında rastgele bir sayı üretin, dize uzunluğu RAND()*4+8
  3. dizenin karakterlerini (1) 'de olduğu gibi 1'den (2)' de oluşturduğunuz boyuta getirin.

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.

Düzenlenmiş cevap

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.


OP özellikle sadece alfabe karakterleri istiyordu. Bu sorunu çözmek için cevabınızı düzenleyebilir misiniz?
music2my18

@ music2myear bitti, ancak bu şekilde orijinal sürümün özlüğini kaybedersiniz.
CristianCantoro

Özlülük sadece ihtiyaçları karşılıyorsa yararlıdır. Bu cevap, daha uzun olmasına rağmen daha iyidir çünkü OP'nin sorduğu soruya cevap verir.
music2my19

0

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.