Добрый день, форумчане! Подскажите, пожалуйста, макрос, который случайным образом заменял бы русские буквы на схожие латинские, но не сразу все. К примеру, в слове «привет» может заменить сразу «р» и «е». А может только «р» или же только «е». Надеюсь, понятно объяснил.
Делаете проверку в слове на эти буквы, видимо с учетом регистра, добавляете в массив, рандомите цифру от 1 до количества полученных букв, в цикле от 1 до этого рандомного числа рандомом достаёте букву и заменяете её, удаляя её из массива.
kavaka08, я бы не писал сюда, если бы не был на «Вы» с VBA.
Вот макрос от пользователя Alex_ST
Код
Sub RUS_Chr()
Dim LATChr$: LATChr = "CcEeTOopPAaHKkXxBM"
Dim RUSChr$: RUSChr = "СсЕеТОорРАаНКкХхВМ"
Dim i%, iSht As Worksheet
For Each iSht In ThisWorkbook.Sheets
For i = 1 To Len(LATChr)
iSht.UsedRange.Replace _
What:=Mid(LATChr, i, 1), _
Replacement:=Mid(RUSChr, i, 1), _
LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True
Next i
Next iSht
End Sub
Можно ли его как-то преобразовать, чтобы подходил под моё описание?
А вам нужна макрофункция (чтобы, скажем, применять её как функцию листа к ячейкам)? Причем рандом должен быть волатильным (то есть всегда заново символы будут подменяться)? Либо вам нужна процедура, которая именно только при своём запуске, да ещё и, скажем, для указанного диапазона ячеек только, - заменит символы?
AndreTM написал: вам нужна процедура, которая именно только при своём запуске, да ещё и, скажем, для указанного диапазона ячеек только, - заменит символы
Но все равно тогда объясните, зачем именно вам нужны такие подмены? Возможно, сообщество более полно подскажет (и покажет) правильные пути решения. А то ведь, может, вы страдаете тем, что макросами в Excel меняете текст из Word. который потом рассылается Outlook
Задача:Сделать максимальное количество вариантов видимых одинаково, (читаемых одинаково), но по кодировке можно менять сколько угодно раз через рус лат буквы.
пример: слово ТЕКСТ имеет порядка 15 вариантов написания: текст, Текст, тЕкст, теКст, текСт, тексТ, ТЕкст, ТеКст и т.д. Капсом писал латинский шрифт, чтобы наглядно было видно.
vahr написал: P.S. В универе задачку задали по информатике
Могу понять, если вы не можете разобраться в алгоритме решения, а вы просто vba не знаете. Раз задали такую задачу в экселе, то должны были преподавать. А потом будете писать просьбы о помощи в решении заданий при устройстве на работу?
kavaka08, вот зачем Вы так? Я тоже когда учился (и сейчас продолжаю учиться) задавал разные вопросы, в том числе и те, которые демонстрировали мои незнания. Ничего страшного! vahr, Вам может следует показать вид того, что должно получиться в Excel. Ведь не очень сложно сделать перебор последовательно по символам, а потом по комбинациям.
kavaka08, я конкретно написал, в чем нуждаюсь. И я с самого начала дал понять, что не разбираюсь в VBA... Не хочу грубить, но если Вы не знаете, что написать по теме, тогда лучше помолчите.
А ваш преподаватель точно уверен в том,что его комп выдержит генерацию ВСЕХ вариантов?
Создаётся впечатление, что препод,придумавший задачу вывести в Excel (а не, например, посчитать количество возможных замен) - аспирант на полставки. Посчитайте хотя бы количество вариантов для фразы "РАНО ОХРАНЕ СВЕТА ВМЕСТО КРЕСТА" (ладно хоть, не "охранка Светы" )
Просто ведь: =2^27-1... с этим не то что Excel - не каждая СУБД справится. Особенно с такой бессмыслицей в постановке задачи... Можете, кстати, данный пост продемонстрировать преподу в качестве решения. Если умный - поймёт, если упёртый - недолго и написать макрос, который ему комп повесит. Только условием - будет именно использование именно этой фразы
vahr написал: нужно задать количество выводимых вариантов
Если это означает "вывести не более N вариантов" - то это одно. Если же "посчитать количество возможных вариантов и предупредить, что "ми-и-и-и-ллиио-о-о-он йа-а-а-а вывводи-и-и-и-ить бу-у-у-ду до-о-о-о-лго" - это другое.
Мнда... я тоже думал о том, что вариантов будет масса.... и как их выводить... куда? на этот же лист? псоел текущего текста? А может заменять существующий, тогда, собственно, получится вариант со всеми заменнёнными символами и всё.
AndreTM, Вы были правы)) Препод не стал долго спорить, сказал сделать Макс количество возможных вариантов не более 1000.
Цитата
AndreTM написал: Если это означает "вывести не более N вариантов" - то это одно. Если же "посчитать количество возможных вариантов и предупредить, что "ми-и-и-и-ллиио-о-о-он йа-а-а-а вывводи-и-и-и-ить бу-у-у-ду до-о-о-о-лго" - это другое.
Первое
Цитата
Kirill Gureev написал: Мнда... я тоже думал о том, что вариантов будет масса.... и как их выводить... куда? на этот же лист? после текущего текста? А может заменять существующий, тогда, собственно, получится вариант со всеми заменёнными символами и всё.
Задаем лимит не более 1000 вариантов. Вбиваем нужное нам предложение в ячейку А1, в ячейку B1 вбиваем количество вариантов, которое мы хотим. Запускаем макрос, и он выводит варианты в ячейки, начиная с А2 по Аn. Все действия на текущем листе.
Ну так начните его делать хотя бы, покажите, что получается...
Кстати, дам совет сразу (хотя это расширяет задачу): выводить не только сам вариант в ячейку Ai, но ещё и количество/список замененных символов в Bi, чтобы было наглядно видно, что именно произошло в данной строке. Можно было бы и добраться до того, чтобы цветом выделять измененное, но это уже высокие материи.
Эти пару дней мучил макрос, но моих знаний недостаточно, либо не хватает смекалки, как это сделать. Вот попробовал счетчик букв сделать, которые можно заменить. Считать-то он считает, да только неправильно...
Код
Sub RUS_Chr()
Dim LATChr$: LATChr = "CcEeTOopPAaHKkXxBM06"
Dim RUSChr$: RUSChr = "СсЕеТОорРАаНКкХхВМОб"
Dim i%, iCell As Range
Dim k As Integer
k = 0
For Each iCell In ActiveSheet.Range("A1")
For i = 1 To Len(RUSChr)
With iCell
If .Value Like "*" & Mid(RUSChr, i, 1) & "*" Then
k = k + 1
End If
End With
Next i
Next iCell
Cells(10, 1) = k
End Sub
Еще вопрос. Не могли бы Вы объяснить роль функции Len, пожалуйста?
Доброго всем, почитал, посмеялся, возник вопрос ради спортивного интереса - кто даст макрос протестить ))), который комп вешает? без повреждений, просто хочу повесить, и ознакомиться с таким макросом. любопытно стало.
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
Думаю, процесс, копирующий формулы на миллион строк, и чтобы в формулах был динамический диапазон для пересчета, да при включенном автопересчете - нагрузку даст. Если же не упираться в сам Excel - то запустите, например, создание миллиона непустых файлов на диске...
AndreTM, хорошая идея, про фориулы, думаю если к примеру поставить вычисление Пи деленое на экспоненту копированное во все ячейки листа, а может и создание энного количества листов, то результат получится. Особенно на книге открытой через getобъект в фоновом режиме.. А вот с файломи, эт уже следы, кгторые придется убитать ))))))
Инженер не тот, кто все знает, а тот кто знает где найти ответ.