ฉันต้องการสร้างสตริงแบบสุ่มที่มีความยาวแบบสุ่มจากตัวอักษรใน Excel ตัวอย่างเช่น "jlskdjf", "kjlk", "kljsodif" ฯลฯ ฉันจะทำอย่างไร
ฉันต้องการสร้างสตริงแบบสุ่มที่มีความยาวแบบสุ่มจากตัวอักษรใน Excel ตัวอย่างเช่น "jlskdjf", "kjlk", "kljsodif" ฯลฯ ฉันจะทำอย่างไร
คำตอบ:
สมมติว่าคุณต้องการสร้างสตริงแบบยาว (1-8 ตัวอักษร) จากตัวอักษรพิมพ์เล็ก (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)
แต่ละตัวจะCHAR(...)
สร้างตัวอักษรตัวพิมพ์เล็ก 1 ตัว
หากต้องการใช้ตัวอักษรพิมพ์ใหญ่ (AZ) แทนกรณีที่ต่ำกว่าคุณสามารถแทนที่ด้วยCHAR(RAND()*26+97)
CHAR(RAND()*26+65)
เนื่องจากรหัส ASCII ของ AZ คือ 65-90 และรหัส ASCII ของ az คือ 97-122
เพียงแค่สูตรคุณสามารถใช้RANDBETWEEN()
การวิเคราะห์ ToolpakRAND()*xx+yy
จะเข้ามาแทนที่
สมมติว่าคุณต้องการสร้างสตริงแบบยาว (1-8 ตัวอักษร) จากอักขระที่ต้องการ
คุณสามารถป้อนอักขระที่ต้องการในเซลล์A1ตัวอย่างเช่น:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
จากนั้น
=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)
แต่ละตัวMID(...)
จะได้รับสุ่ม 1 ตัวจาก A1
อืมมม มันจะค่อนข้างง่ายกับ VBA ที่จะทำให้ฟังก์ชั่นทำมัน ด้วยสูตรมันมีส่วนเกี่ยวข้องเล็กน้อย
=CHAR(RANDBETWEEN(97,122))
เห็นได้ชัดว่าให้จดหมายหนึ่งฉบับแก่คุณ ดังนั้นให้ใส่สิบอันในคอลัมน์ A=A1
ในเซลล์ B1=B1&A2
ใน B2 และเติม B2: B10 (CONCATENATE ไม่ยอมรับช่วงรบกวนอย่างน่ารำคาญ)=OFFSET(B1,RANDBETWEEN(0,9),0)
ใส่อาจมีวิธีที่ง่ายกว่าด้วยสูตรอาร์เรย์หรือบางอย่าง
เป็นสูตรสำหรับอักขระเดี่ยวคุณสามารถใช้สิ่งนี้
=CHAR(RANDBETWEEN(97,122))
เพียงแค่ดูใน ACSII-Table ใด ๆ เพื่อเลือกช่วงแรนด์ที่คุณต้องการ
แต่ความยาวแบบสุ่มนั้นค่อนข้างยุ่งยากไม่ใช่เพราะความยาวแบบสุ่ม แต่เป็นเพราะตัวอักษรแบบสุ่มที่คุณต้องการรวมเข้าด้วยกัน มิฉะนั้นคุณสามารถทำได้เพียงฟังก์ชั่น REPT เข้าร่วมกับฟังก์ชั่น RAND และสูตรด้านบน
แต่เพื่อให้เหมาะสมกับผลลัพธ์ที่คุณอธิบายฉันจะใช้รหัสนี้:
'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
หากมีวิธีแก้ปัญหาในการทำรหัสนี้ด้วยสูตรดังนั้นถ้าไม่มี VBA ฉันก็อยากรู้เกี่ยวกับมัน :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
สูตรนี้ไม่ต้องการเซลล์ที่มี "abc ... ABC ... 012"
สุ่ม 1 ถ่านจาก [a-zA-Z0-9]
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
หากต้องการตัวอักษรเพิ่มเติมให้คัดลอก CHAR (... ) และแยกพวกเขาด้วย &
วิธีนี้มาจาก Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(หากคุณต้องการสตริงตัวอักษรเท่านั้นดูย่อหน้าที่เพิ่มด้านล่าง)
สร้างสตริงสุ่มของตัวอักษรตัวพิมพ์ใหญ่และตัวเลขของความยาวแบบสุ่มระหว่าง 8 และ 12:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
คำอธิบาย:
BASE(RAND()*10^18,36,12)
12: เคล็ดลับคือการสร้างตัวเลขสุ่มขนาดใหญ่แล้วแปลงเป็นฐาน 36 เพื่อรับบางสิ่งที่ดูเหมือนสตริงRAND()*4+8
ฟังก์ชั่นที่ใช้ในสูตร (ด้านใน):
RAND()
ส่งคืนตัวเลขสุ่มระหว่าง 0 ถึง 1BASE(Number; Radix; [MinimumLength])
แปลงจำนวนเต็มบวกเป็นฐานที่ระบุเป็นข้อความจากระบบลำดับเลข ใช้ตัวเลข 0-9 และตัวอักษร AZMID("Text"; Start; Number)
ส่งคืนสตริงข้อความของข้อความ พารามิเตอร์ระบุตำแหน่งเริ่มต้นและจำนวนตัวอักษรหมายเลข10^18
นี้เป็นเลขอาถรรพ์ที่สายอักขระที่สร้างขึ้นไม่มีส่วนท้ายหรือเลขศูนย์นำหน้า หากคุณต้องการสร้างสตริงที่ยาวขึ้นฉันขอแนะนำให้สร้างสตริงดังกล่าวสองสตริงขึ้นไปและเชื่อมโยงสตริงเหล่านั้น
โปรดทราบ: วิธีการแก้ปัญหานี้ได้รับการทดสอบใน Lotus Symphony Spreadsheets แต่มันควรจะทำงานได้ใน Microsoft Excel เนื่องจากฟังก์ชั่นจะเหมือนกับเอกสารของพวกเขา (ซึ่งฉันไม่สามารถเชื่อมโยงได้เพราะฉันไม่มีชื่อเสียงเพียงพอ)
เนื่องจากมันชี้ให้เห็นในความคิดเห็นว่า OP ขอเฉพาะตัวอักษรเท่านั้นฉันจะโยนรุ่นทางเลือกนี้ใน:
=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)
โดยที่คุณแทนที่ตัวเลขทั้งหมดที่เกิดขึ้นเป็นสตริงว่าง ด้วยวิธีนี้คุณจะได้รับเฉพาะตัวอักษร (ตัวพิมพ์ใหญ่) เท่านั้น ฉันได้ปรับเปลี่ยนตัวเลขเวทย์มนตร์เพื่อนับความเป็นไปได้ที่สตริงสุ่มเริ่มต้นจะมีตัวเลขหลายหลัก ไม่ใช่ความปลอดภัย แต่โดยหลักการแล้วคุณสามารถรับสายที่สั้นกว่าที่คาดไว้
หากคุณต้องการให้แน่ใจว่ามีความยาวต่ำสุดคุณก็มีทางเลือกอื่น (ยิ่งซับซ้อน):
=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)
โดยที่คุณแทนที่ตัวเลขแต่ละตัวด้วยตัวอักษรตัวพิมพ์ใหญ่ที่สร้างแบบสุ่ม
ฉันต้องบอกว่าสิ่งที่ฉันชอบในการแก้ปัญหาเบื้องต้นด้วยความเคารพต่อคำตอบอื่น ๆ คือมันกระชับและค่อนข้างตรงไปตรงมาที่จะเข้าใจ ทางเลือกสองทางจะสูญเสียคุณสมบัติเหล่านี้
วิธีสร้างตัวอักษรแบบสุ่ม:
ในเซลล์ B1
= CHAR (RANDBETWEEN (48,131)) (หรือชุดถ่านที่คุณต้องการ)
เติมสิ่งนี้ลงในจำนวนคอลัมน์ = ตัวอักษรที่ต้องการสูงสุดในสตริงของคุณ
เพื่อสร้างความยาวแบบสุ่ม
ในเซลล์ A1
= ซ้าย (CONCATENATE (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1) RANDBETWEEN (0,9))
เพื่อสร้างสตริงแบบสุ่ม
เติมทั้งตารางลงในคอลัมน์ A1
INDEX(B1:B10,RANDBETWEEN(1,10))