Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Форумула для смешивания букв - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Форумула для смешивания букв
s0vit Дата: Понедельник, 17.08.2015, 14:26 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый день всем! Подскажите возможно ли в excel рандомно расставить буквы в слове? Подскажите пожалуйста формулу для этого. Например корова - оркова и т.д. Заранее спасибо за помощь!
 
Ответить
СообщениеДобрый день всем! Подскажите возможно ли в excel рандомно расставить буквы в слове? Подскажите пожалуйста формулу для этого. Например корова - оркова и т.д. Заранее спасибо за помощь!

Автор - s0vit
Дата добавления - 17.08.2015 в 14:26
KSV Дата: Понедельник, 17.08.2015, 15:09 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Добрый день!
Например, так: (UDF) [vba]
Код
Function Anagram(ByVal Word As String) As String
     Dim i&, n&
     Randomize
     For i = 1 To Len(Word) \ 2
         n = Len(Word) * Rnd + 1
         Anagram = Anagram & Mid$(Word, n, 1)
         Word = Left$(Word, n - 1) & Mid$(Word, n + 1)
     Next
     Anagram = Anagram & Word
End Function
[/vba]
К сообщению приложен файл: Anagram.xls (32.5 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеДобрый день!
Например, так: (UDF) [vba]
Код
Function Anagram(ByVal Word As String) As String
     Dim i&, n&
     Randomize
     For i = 1 To Len(Word) \ 2
         n = Len(Word) * Rnd + 1
         Anagram = Anagram & Mid$(Word, n, 1)
         Word = Left$(Word, n - 1) & Mid$(Word, n + 1)
     Next
     Anagram = Anagram & Word
End Function
[/vba]

Автор - KSV
Дата добавления - 17.08.2015 в 15:09
s0vit Дата: Понедельник, 17.08.2015, 15:21 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо большое за помощь!
 
Ответить
СообщениеСпасибо большое за помощь!

Автор - s0vit
Дата добавления - 17.08.2015 в 15:21
Rioran Дата: Понедельник, 17.08.2015, 15:40 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
KSV, привет, классное решение!

Хочу заметить один момент. Это не совсем случайный разброс букв. Своим кодом ты половину букв из слова случайно выдёргиваешь, а оставшуюся половину добавляешь с конца. Это значит, что если применять функцию к строке "12345678", то во второй половине результата числа всегда будут идти по возрастающей. Что уже пусть и слабая, но закономерность.

Предлагаю подправить одну строку функции для "совсем случайного" разброса:

[vba]
Код
For i = 1 To Len(Word) - 1
[/vba]


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеKSV, привет, классное решение!

Хочу заметить один момент. Это не совсем случайный разброс букв. Своим кодом ты половину букв из слова случайно выдёргиваешь, а оставшуюся половину добавляешь с конца. Это значит, что если применять функцию к строке "12345678", то во второй половине результата числа всегда будут идти по возрастающей. Что уже пусть и слабая, но закономерность.

Предлагаю подправить одну строку функции для "совсем случайного" разброса:

[vba]
Код
For i = 1 To Len(Word) - 1
[/vba]

Автор - Rioran
Дата добавления - 17.08.2015 в 15:40
Michael_S Дата: Понедельник, 17.08.2015, 16:21 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
[vba]
Код
Function Anagram_(ByVal Word As String) As String
     Dim i&, n&
     Randomize
     With New Collection
         For i = 1 To Len(Word)
             .Add Mid(Word, i, 1)
         Next
         For i = 1 To .Count
             n = Int(Rnd * .Count) + 1
             Anagram_ = Anagram_ & .Item(n)
             .Remove (n)
         Next
     End With
End Function
[/vba]
 
Ответить
Сообщение[vba]
Код
Function Anagram_(ByVal Word As String) As String
     Dim i&, n&
     Randomize
     With New Collection
         For i = 1 To Len(Word)
             .Add Mid(Word, i, 1)
         Next
         For i = 1 To .Count
             n = Int(Rnd * .Count) + 1
             Anagram_ = Anagram_ & .Item(n)
             .Remove (n)
         Next
     End With
End Function
[/vba]

Автор - Michael_S
Дата добавления - 17.08.2015 в 16:21
KSV Дата: Понедельник, 17.08.2015, 17:49 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Rioran, привет!
Я сначала сделал именно так (Len-1), но потом решил, что не стоит тратить в 2 раза больше времени и ресурсов, т.к. после "выдергивания" букв оставшаяся часть будет уже и так псевдо-перемешанной.
если применять функцию к строке "12345678"
На строке с числами, да, будет видно, что во второй половине они будут идти по возрастанию, но когда речь идет не о цифрах, а о буквах, то это уже не заметно :)
Единственное, что я бы изменил, это добавил бы единичку, чтобы в словах с нечетным кол-вом букв, выдергивалось больше половины, а не меньше, как сейчас. [vba]
Код
For i = 1 To Len(Word) \ 2 + 1
[/vba] Но это только мое IMHO :) , а ТС может сделать, как захочет.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеRioran, привет!
Я сначала сделал именно так (Len-1), но потом решил, что не стоит тратить в 2 раза больше времени и ресурсов, т.к. после "выдергивания" букв оставшаяся часть будет уже и так псевдо-перемешанной.
если применять функцию к строке "12345678"
На строке с числами, да, будет видно, что во второй половине они будут идти по возрастанию, но когда речь идет не о цифрах, а о буквах, то это уже не заметно :)
Единственное, что я бы изменил, это добавил бы единичку, чтобы в словах с нечетным кол-вом букв, выдергивалось больше половины, а не меньше, как сейчас. [vba]
Код
For i = 1 To Len(Word) \ 2 + 1
[/vba] Но это только мое IMHO :) , а ТС может сделать, как захочет.

Автор - KSV
Дата добавления - 17.08.2015 в 17:49
Gustav Дата: Понедельник, 17.08.2015, 18:00 | Сообщение № 7
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
А я как блондинка-секретарша на трёх формулах сделал. Формулы типа такие:
Код
=ОКРУГЛ(99*СЛЧИС();)+1/СТОЛБЕЦ()

Код
=ПСТР($A3;РАНГ(E3;$E3:$X3;);1)

Код
=СЦЕПИТЬ(Z3;AA3;AB3;AC3;AD3;AE3;AF3;AG3;AH3;AI3;AJ3;AK3;AL3;AM3;AN3;AO3;AP3;AQ3;AR3;AS3)

Но повторяются многократно :)
К сообщению приложен файл: WordMixer.xls (36.0 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеА я как блондинка-секретарша на трёх формулах сделал. Формулы типа такие:
Код
=ОКРУГЛ(99*СЛЧИС();)+1/СТОЛБЕЦ()

Код
=ПСТР($A3;РАНГ(E3;$E3:$X3;);1)

Код
=СЦЕПИТЬ(Z3;AA3;AB3;AC3;AD3;AE3;AF3;AG3;AH3;AI3;AJ3;AK3;AL3;AM3;AN3;AO3;AP3;AQ3;AR3;AS3)

Но повторяются многократно :)

Автор - Gustav
Дата добавления - 17.08.2015 в 18:00
Serge_007 Дата: Понедельник, 17.08.2015, 20:19 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
в excel рандомно расставить буквы в слове?
Лет пять назад заморочился этим вопросом :)

Ответы см. во вложении
К сообщению приложен файл: 2529250.xls (67.5 Kb)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
в excel рандомно расставить буквы в слове?
Лет пять назад заморочился этим вопросом :)

Ответы см. во вложении

Автор - Serge_007
Дата добавления - 17.08.2015 в 20:19
Udik Дата: Понедельник, 17.08.2015, 20:35 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Я через байтовый массив
[vba]
Код

Private Function stirWrd(ByVal strW As String)
Static buff As Byte, buff2 As Byte
Dim arrLtr() As Byte

Randomize
buff = Len(strW)
If buff < 2 Then Exit Function
arrLtr = StrConv(strW, vbFromUnicode)
For i = 0 To buff - 1
      buff2 = Int(buff * Rnd)
      stirWrd = arrLtr(i)
      arrLtr(i) = arrLtr(buff2)
      arrLtr(buff2) = stirWrd
Next i
stirWrd = ""
For i = 0 To buff - 1
stirWrd = stirWrd & Chr(arrLtr(i))
Next i
End Function
[/vba]


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Понедельник, 17.08.2015, 20:37
 
Ответить
СообщениеЯ через байтовый массив
[vba]
Код

Private Function stirWrd(ByVal strW As String)
Static buff As Byte, buff2 As Byte
Dim arrLtr() As Byte

Randomize
buff = Len(strW)
If buff < 2 Then Exit Function
arrLtr = StrConv(strW, vbFromUnicode)
For i = 0 To buff - 1
      buff2 = Int(buff * Rnd)
      stirWrd = arrLtr(i)
      arrLtr(i) = arrLtr(buff2)
      arrLtr(buff2) = stirWrd
Next i
stirWrd = ""
For i = 0 To buff - 1
stirWrd = stirWrd & Chr(arrLtr(i))
Next i
End Function
[/vba]

Автор - Udik
Дата добавления - 17.08.2015 в 20:35
Rioran Дата: Вторник, 18.08.2015, 16:21 | Сообщение № 10
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Вариант Gustav'a вдохновил для создания такой функции. По ресурсам, возможно, не самое оптимальное решение - просто понравился принцип.

[vba]
Код
Public Function Mess$(StrX$)
     Dim ArrX, i&
     ReDim ArrX(Len(StrX) - 1)
     Randomize
     For i = 0 To UBound(ArrX): ArrX(i) = Rnd: Next i
     Do While Len(Mess) < Len(StrX)
         For i = 0 To UBound(ArrX)
             If Application.WorksheetFunction.Max(ArrX) = ArrX(i) Then
                 Mess = Mess & Mid(StrX, i + 1, 1)
                 ArrX(i) = 0
                 Exit For
             End If
         Next i
     Loop
End Function
[/vba]


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеВариант Gustav'a вдохновил для создания такой функции. По ресурсам, возможно, не самое оптимальное решение - просто понравился принцип.

[vba]
Код
Public Function Mess$(StrX$)
     Dim ArrX, i&
     ReDim ArrX(Len(StrX) - 1)
     Randomize
     For i = 0 To UBound(ArrX): ArrX(i) = Rnd: Next i
     Do While Len(Mess) < Len(StrX)
         For i = 0 To UBound(ArrX)
             If Application.WorksheetFunction.Max(ArrX) = ArrX(i) Then
                 Mess = Mess & Mid(StrX, i + 1, 1)
                 ArrX(i) = 0
                 Exit For
             End If
         Next i
     Loop
End Function
[/vba]

Автор - Rioran
Дата добавления - 18.08.2015 в 16:21
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!