Здравствуйте, уважаемые эксперты! Подскажите, какой формулой можно собрать случайные кодировки из цифр и букв по заготовленным шаблонам. Есть столбец с необходимыми буквами (L:L) и столбец с нужными цифрами (M:M) Нужно, чтобы в строке 3 выдавалось значение по образцу (выделен зелёной заливкой) забирая в качестве основы значения высвоей вышестоящей ячейки. То есть, если я меняю значение ячейки в строке 2, о расположенная под ним ячейка в строке 3 меняет наполнение. Также, если я меняю буквы или цифры в столбцах - они подставляются в формулу.
ЗЫ. В строке 2 "Ц" - означает (Ц)ифру в формуле, а "Б" - соответственно (Б)укву. При обновлении - значения меняются но из того же диапазона по той же формуле.
Заранее спасибо.
Здравствуйте, уважаемые эксперты! Подскажите, какой формулой можно собрать случайные кодировки из цифр и букв по заготовленным шаблонам. Есть столбец с необходимыми буквами (L:L) и столбец с нужными цифрами (M:M) Нужно, чтобы в строке 3 выдавалось значение по образцу (выделен зелёной заливкой) забирая в качестве основы значения высвоей вышестоящей ячейки. То есть, если я меняю значение ячейки в строке 2, о расположенная под ним ячейка в строке 3 меняет наполнение. Также, если я меняю буквы или цифры в столбцах - они подставляются в формулу.
ЗЫ. В строке 2 "Ц" - означает (Ц)ифру в формуле, а "Б" - соответственно (Б)укву. При обновлении - значения меняются но из того же диапазона по той же формуле.
Strateg_ru, честно говоря, не знаю как можно устроить стандартными ф-ями. Вот ф-я, заданная пользователем: [vba]
Код
Function st(Rng1 As Range, RngB As Range, RngC As Range) As String Dim i&, i_n&, k& Dim rng As Range Dim BC() As String Dim B() As String Dim C() As String Dim maxB&, maxC& i_n = Len(Rng1) ReDim BC(i_n) For i = 1 To i_n BC(i) = Mid(Rng1, i, 1) Next i For Each rng In RngB k = k + 1 ReDim Preserve B(k) B(k) = rng Next rng maxB = k k = 0 For Each rng In RngC k = k + 1 ReDim Preserve C(k) C(k) = rng Next rng maxC = k For i = 1 To i_n If UCase(BC(i)) = "Б" Then st = st & B(Int((maxB) * Rnd + 1)) ElseIf UCase(BC(i)) = "Ц" Then st = st & C(Int((maxC) * Rnd + 1)) End If Next i End Function
[/vba] Или так даже чуть-чуть будет получше:
[vba]
Код
Function fst(Rng1 As Range, RngB As Range, RngC As Range) As String Dim i&, i_n&, k& Dim rng As Range Dim BC() As String Dim B() As String Dim C() As String Dim maxB&, maxC& maxB = RngB.Cells.Count maxC = RngC.Cells.Count i_n = Len(Rng1) ReDim BC(i_n) ReDim B(maxB) ReDim C(maxC) For i = 1 To i_n BC(i) = Mid(Rng1, i, 1) Next i For Each rng In RngB k = k + 1 B(k) = rng Next rng k = 0 For Each rng In RngC k = k + 1 C(k) = rng Next rng For i = 1 To i_n If UCase(BC(i)) = "Б" Then fst = fst & B(Int((maxB) * Rnd + 1)) ElseIf UCase(BC(i)) = "Ц" Then fst = fst & C(Int((maxC) * Rnd + 1)) End If Next i End Function
[/vba]
Strateg_ru, честно говоря, не знаю как можно устроить стандартными ф-ями. Вот ф-я, заданная пользователем: [vba]
Код
Function st(Rng1 As Range, RngB As Range, RngC As Range) As String Dim i&, i_n&, k& Dim rng As Range Dim BC() As String Dim B() As String Dim C() As String Dim maxB&, maxC& i_n = Len(Rng1) ReDim BC(i_n) For i = 1 To i_n BC(i) = Mid(Rng1, i, 1) Next i For Each rng In RngB k = k + 1 ReDim Preserve B(k) B(k) = rng Next rng maxB = k k = 0 For Each rng In RngC k = k + 1 ReDim Preserve C(k) C(k) = rng Next rng maxC = k For i = 1 To i_n If UCase(BC(i)) = "Б" Then st = st & B(Int((maxB) * Rnd + 1)) ElseIf UCase(BC(i)) = "Ц" Then st = st & C(Int((maxC) * Rnd + 1)) End If Next i End Function
[/vba] Или так даже чуть-чуть будет получше:
[vba]
Код
Function fst(Rng1 As Range, RngB As Range, RngC As Range) As String Dim i&, i_n&, k& Dim rng As Range Dim BC() As String Dim B() As String Dim C() As String Dim maxB&, maxC& maxB = RngB.Cells.Count maxC = RngC.Cells.Count i_n = Len(Rng1) ReDim BC(i_n) ReDim B(maxB) ReDim C(maxC) For i = 1 To i_n BC(i) = Mid(Rng1, i, 1) Next i For Each rng In RngB k = k + 1 B(k) = rng Next rng k = 0 For Each rng In RngC k = k + 1 C(k) = rng Next rng For i = 1 To i_n If UCase(BC(i)) = "Б" Then fst = fst & B(Int((maxB) * Rnd + 1)) ElseIf UCase(BC(i)) = "Ц" Then fst = fst & C(Int((maxC) * Rnd + 1)) End If Next i End Function
Roman777, прошу прощения - эту штуку не пойму... ((( Хотелось бы обычной формулой. Может как-то через Поиск позиции и если она ИСТИНА - то вставить от Индекс (я Индекс уже настроил в том же примере - под столбцом цифр и букв), а если ЛОЖЬ - то соседний индекс... У меня просто это целиком в голову не влезает...
Roman777, прошу прощения - эту штуку не пойму... ((( Хотелось бы обычной формулой. Может как-то через Поиск позиции и если она ИСТИНА - то вставить от Индекс (я Индекс уже настроил в том же примере - под столбцом цифр и букв), а если ЛОЖЬ - то соседний индекс... У меня просто это целиком в голову не влезает...Strateg_ru
Strateg_ru, к сожалению, стандартными формулами, эту задачу, скорее всего не решить. Мб кто-то ещё подскажет. Я же Вам предложил User Defined Function (UDF), тоесть та же ф-я, но написанная пользователем. Но для этого необходимо код ВБА добавить в личную книгу макросов или модуль самой книги (для этого формат книги должен поддерживать макросы). Прилагаю Вам пример в формате ".xls". Тут я добавил макрос в саму книгу и использовал эту написанную ф-ю для решения Вашей задачи.
Strateg_ru, к сожалению, стандартными формулами, эту задачу, скорее всего не решить. Мб кто-то ещё подскажет. Я же Вам предложил User Defined Function (UDF), тоесть та же ф-я, но написанная пользователем. Но для этого необходимо код ВБА добавить в личную книгу макросов или модуль самой книги (для этого формат книги должен поддерживать макросы). Прилагаю Вам пример в формате ".xls". Тут я добавил макрос в саму книгу и использовал эту написанную ф-ю для решения Вашей задачи.Roman777
buchlotnik, да, действительно, монстрик) Но вы - просто монстрище!)) Спасибо Вам огромное!!! Ни полный, ни оптимизированный вариант у меня даже в голову не укладывается. Но всё работает как надо! Супер!
Всем спасибо! Тему можно закрывать.
buchlotnik, да, действительно, монстрик) Но вы - просто монстрище!)) Спасибо Вам огромное!!! Ни полный, ни оптимизированный вариант у меня даже в голову не укладывается. Но всё работает как надо! Супер!