
Обща формула
=INDEX(characters,RANDARRAY(n,1,1,count,TRUE))
Обобщение
За да генерирате списък със произволни текстови низове, можете да използвате формула, базирана на INDEX, RANDARRAY и TEXTJOIN. В показания пример формулата в D5 е:
=TEXTJOIN("",1,INDEX(chars,RANDARRAY(6,1,1,26,TRUE)))
където символите е наименованият диапазон B5: B30, съдържащ буквите AZ. Докато формулата се копира надолу по колоната, тя генерира нов текстов низ от 6 знака на всеки ред.
Обяснение
Новите формули за динамичен масив в Excel 365 улесняват много по-лесно решаването на някои сложни проблеми с формули.
В този пример целта е да се генерира списък с произволни 6-символни кодове. Случайността се обработва от функцията RANDARRAY, нова функция в Excel 365. RANDARRAY връща 6 произволни числа в INDEX, които след това извлича 6 произволни стойности от посочените символи на диапазона. След това резултатите от INDEX се обединяват заедно с функцията TEXTJOIN.
В показания пример формулата в D5 е:
=TEXTJOIN("",1,INDEX(chars,RANDARRAY(6,1,1,26,TRUE)))
Работейки отвътре навън, функцията RANDARRAY се използва за генериране на масив, съдържащ шест произволни числа между 1-26:
RANDARRAY(6,1,1,26,TRUE) // return array like (14;5;21;7;25;3)
Обърнете внимание, че върнатият масив ще варира при всеки екземпляр на функцията RANDARRAY. Освен това, тъй като RANDARRAY е променлива функция, той ще се преизчисли при всяка промяна на работния лист.
Този масив от произволни числа се връща директно към функцията INDEX като аргумент редове:
INDEX(chars,(14;5;21;7;25;3))
Тъй като искаме INDEX за 6 реда, получаваме 6 резултата в масив като този:
("N","E","U","G","Y","C")
Този масив се връща към функцията TEXTJOIN като аргумент text1:
=TEXTJOIN("",1,("N","E","U","G","Y","C")) // returns "NEUGYC"
TEXTJOIN е настроен да използва празен низ като разделител и да игнорира празни стойности. С тази конфигурация TEXJOIN просто обединява всички стойности и връща текстов низ от 6 знака като "NEUGYC".
Бройте символи програмно
Вместо да кодирате твърдо размера на символите директно във функцията RANDARRAY, можете да използвате функцията COUNTA, за да преброите елементите в масива и да върнете тези стойности в RANDARRAY:
RANDARRAY(6,1,1,COUNTA(chars),TRUE)
Това предполага, че символите не съдържат празни клетки.
Генерирайте символи програмно
Тъй като буквите AZ имат основни цифрови кодови стойности, възможно е да се генерира масив от символи, използвани за програмно сглобяване на текстови низове, вместо да се използва диапазон. Това може да стане с функцията CHAR и функцията SEQUENCE.
За да генерирате масив с всички главни букви AZ, които съответстват на ASCII 65-90:
=CHAR(SEQUENCE(26,1,65,1)) // returns ("A","B","C",… )
За да генерирате малки букви az, които съответстват на ASCII 97-122:
=CHAR(SEQUENCE(26,1,97,1)) // returns ("a","b","c",… )
Този код може да бъде пуснат в оригиналната формула, за да замени "символите" по следния начин:
=TEXTJOIN("",1,INDEX(CHAR(SEQUENCE(26,1,65,1)),RANDARRAY(6,1,1,26,TRUE)))
Други знаци
Символите в посочените символи за диапазон могат да бъдат всичко, което ви харесва. Ако добавите повече от 26 знака (или по-малко), коригирайте числото 26, както е подходящо, или използвайте COUNTA, както е обяснено по-горе.
Без Excel 365
Възможно е да се генерират произволни текстови низове без Excel 365, но формулата е по-досадна и излишна. Тъй като нямаме добър начин да получим 6 случайни числа наведнъж, използваме функцията RANDBETWEEN, за да получим една случайна стойност наведнъж:
=INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))
Тази формула използва функцията INDEX за извличане на една произволна стойност в даден момент от посочените символи на диапазона и 6-те резултата се обединяват заедно в един текстов низ. Добавени са прекъсвания на редове за четливост.
Също така е възможно да се генерират стойности AZ директно с CHAR и RANDBETWEEN по следния начин:
=CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))
В тази версия RANDBETWEEN връща стойност между 65 и 90 (включително), която съответства на стойността ASCII за буквите AZ (главни букви). Функцията CHAR превежда числовата стойност в буква. Както по-горе, всички резултати се обединяват в един текстов низ.