Формула на Excel: Генериране на произволни текстови низове -

Обща формула

=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 превежда числовата стойност в буква. Както по-горе, всички резултати се обединяват в един текстов низ.

Интересни статии...