Я пытаюсь расставить единицы в ячейках - в зависимости от столбцов A, B и D.
В столбце D - записано сколько столбцов должно быть заполнено единицами по горизонтали слева направо. В столбце B - какой вид заполнения используется. Тут не конкретная ячейка отвечает за свою строку, а непрерывный участок ячеек одинакового цвета - отвечает за свои строки. Видов всего три - 1,2 и 3.
Участок зеленых ячеек "1" - означает, что 1 начинает ставиться в строке - там где прерывается 1 верхней строки Участок рыжих ячеек "2" - означает, что нижняя ячейка рыжего участка столбца B - запускает новый цикл расстановки 1 с верхней строки этого же рыжего участка (количество циклов - число в синей ячейке из столбца A) Участок желтых ячеек "3" - это точный аналог зеленых ячеек, но всегда идет с самого начала.
Как формулой, без дополнительных столбцов - расставить единицы в диапазоне F5:CA35 - таким образом ?
Здравствуйте. Помогите решить вопрос.
Я пытаюсь расставить единицы в ячейках - в зависимости от столбцов A, B и D.
В столбце D - записано сколько столбцов должно быть заполнено единицами по горизонтали слева направо. В столбце B - какой вид заполнения используется. Тут не конкретная ячейка отвечает за свою строку, а непрерывный участок ячеек одинакового цвета - отвечает за свои строки. Видов всего три - 1,2 и 3.
Участок зеленых ячеек "1" - означает, что 1 начинает ставиться в строке - там где прерывается 1 верхней строки Участок рыжих ячеек "2" - означает, что нижняя ячейка рыжего участка столбца B - запускает новый цикл расстановки 1 с верхней строки этого же рыжего участка (количество циклов - число в синей ячейке из столбца A) Участок желтых ячеек "3" - это точный аналог зеленых ячеек, но всегда идет с самого начала.
Как формулой, без дополнительных столбцов - расставить единицы в диапазоне F5:CA35 - таким образом ?Dalm
непрерывный участок ячеек одинакового цвета - отвечает за свои строки
а если серьёзно - вот зачем создавать структуру данных, изначально кривую для обработки, чтобы потом героически впихивать всё в одну формулу? (причём в 2019 - вы реально предполагаете массивный ввод на весь диапазон?)
непрерывный участок ячеек одинакового цвета - отвечает за свои строки
а если серьёзно - вот зачем создавать структуру данных, изначально кривую для обработки, чтобы потом героически впихивать всё в одну формулу? (причём в 2019 - вы реально предполагаете массивный ввод на весь диапазон?)прохожий2019
Сообщение отредактировал прохожий2019 - Суббота, 02.08.2025, 22:03
Я пытаюсь расставить единицы в ячейках - в зависимости от столбцов A, B и D.
В столбце D - записано сколько столбцов должно быть заполнено единицами по горизонтали слева направо. В столбце B - какой вид заполнения используется. Тут не конкретная ячейка отвечает за свою строку, а непрерывный участок ячеек одинакового цвета - отвечает за свои строки. Видов всего три - 1,2 и 3.
Участок зеленых ячеек "1" - означает, что 1 начинает ставиться в строке - там где прерывается 1 верхней строки Участок рыжих ячеек "2" - означает, что нижняя ячейка рыжего участка столбца B - запускает новый цикл расстановки 1 с верхней строки этого же рыжего участка (количество циклов - число в синей ячейке из столбца A) Участок желтых ячеек "3" - это точный аналог зеленых ячеек, но всегда идет с самого начала.
Как формулой, без дополнительных столбцов - расставить единицы в диапазоне F5:CA35 - таким образом ?
Здравствуйте. Помогите решить вопрос.
Я пытаюсь расставить единицы в ячейках - в зависимости от столбцов A, B и D.
В столбце D - записано сколько столбцов должно быть заполнено единицами по горизонтали слева направо. В столбце B - какой вид заполнения используется. Тут не конкретная ячейка отвечает за свою строку, а непрерывный участок ячеек одинакового цвета - отвечает за свои строки. Видов всего три - 1,2 и 3.
Участок зеленых ячеек "1" - означает, что 1 начинает ставиться в строке - там где прерывается 1 верхней строки Участок рыжих ячеек "2" - означает, что нижняя ячейка рыжего участка столбца B - запускает новый цикл расстановки 1 с верхней строки этого же рыжего участка (количество циклов - число в синей ячейке из столбца A) Участок желтых ячеек "3" - это точный аналог зеленых ячеек, но всегда идет с самого начала.
Как формулой, без дополнительных столбцов - расставить единицы в диапазоне F5:CA35 - таким образом ?Dalm
Dalm, здравствуйте, Вы думаете чем больше раз повторите, как мантру, то, что вам нужно, то помощь придет быстрее? Я бы на Вашем месте не заморачивался с формулами, а сделал это макросом, например таким: [vba]
Код
Sub Макрос1() Dim arr_1, arr_2, k1 As Integer, k3 As Integer, h As Integer, fl As Byte, n As Integer, n1 As Integer, n2 As Integer, n3 As Integer, m As Integer, pov As Integer k1 = 1: k3 = 1: fl = 0 arr_1 = Range("A5:D" & Cells(Rows.Count, 2).End(xlUp).Row) h = UBound(arr_1) ReDim arr_2(1 To h, 1 To 1) For n = 1 To h If arr_1(n, 2) = 1 Then For m = 1 To arr_1(n, 4) arr_2(n, k1) = 1 k1 = k1 + 1 If k1 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k1) Next k3 = 1 ElseIf arr_1(n, 2) = 2 Then If arr_1(n, 1) <> "" Then pov = arr_1(n, 1) n1 = n: fl = 1 End If If n < h Then If arr_1(n, 2) <> arr_1(n + 1, 2) Or arr_1(n + 1, 1) <> "" Then n2 = n: fl = 0 End If Else n2 = h: fl = 0 End If If fl = 0 Then Do For n3 = n1 To n2 For m = 1 To arr_1(n3, 4) arr_2(n3, k1) = 1 k1 = k1 + 1 If k1 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k1) Next Next pov = pov - 1 Loop Until pov <= 0 End If k3 = 1 ElseIf arr_1(n, 2) = 3 Then For m = 1 To arr_1(n, 4) arr_2(n, k3) = 1 k3 = k3 + 1 k1 = k3 If k3 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k3) Next End If Next [f5].Resize(UBound(arr_2), UBound(arr_2, 2)) = arr_2 End Sub
[/vba] Но есть куча вопросов: 1. я правильно понял, что 2 отличается от 1 способностью размножаться, и больше ни 1, ни 3 этого не могут? 2. может ли за 2 идти снова 2 (это предусмотрел, но нужно тестировать); 3. что делать если после 3 идет 1 или 2, откуда они должны начинаться. Сделал как понял, в соответствии с примером, разукрасил просто для наглядности. Если, что-то не так, то думаю, Вы без труда исправите макрос
Dalm, здравствуйте, Вы думаете чем больше раз повторите, как мантру, то, что вам нужно, то помощь придет быстрее? Я бы на Вашем месте не заморачивался с формулами, а сделал это макросом, например таким: [vba]
Код
Sub Макрос1() Dim arr_1, arr_2, k1 As Integer, k3 As Integer, h As Integer, fl As Byte, n As Integer, n1 As Integer, n2 As Integer, n3 As Integer, m As Integer, pov As Integer k1 = 1: k3 = 1: fl = 0 arr_1 = Range("A5:D" & Cells(Rows.Count, 2).End(xlUp).Row) h = UBound(arr_1) ReDim arr_2(1 To h, 1 To 1) For n = 1 To h If arr_1(n, 2) = 1 Then For m = 1 To arr_1(n, 4) arr_2(n, k1) = 1 k1 = k1 + 1 If k1 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k1) Next k3 = 1 ElseIf arr_1(n, 2) = 2 Then If arr_1(n, 1) <> "" Then pov = arr_1(n, 1) n1 = n: fl = 1 End If If n < h Then If arr_1(n, 2) <> arr_1(n + 1, 2) Or arr_1(n + 1, 1) <> "" Then n2 = n: fl = 0 End If Else n2 = h: fl = 0 End If If fl = 0 Then Do For n3 = n1 To n2 For m = 1 To arr_1(n3, 4) arr_2(n3, k1) = 1 k1 = k1 + 1 If k1 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k1) Next Next pov = pov - 1 Loop Until pov <= 0 End If k3 = 1 ElseIf arr_1(n, 2) = 3 Then For m = 1 To arr_1(n, 4) arr_2(n, k3) = 1 k3 = k3 + 1 k1 = k3 If k3 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k3) Next End If Next [f5].Resize(UBound(arr_2), UBound(arr_2, 2)) = arr_2 End Sub
[/vba] Но есть куча вопросов: 1. я правильно понял, что 2 отличается от 1 способностью размножаться, и больше ни 1, ни 3 этого не могут? 2. может ли за 2 идти снова 2 (это предусмотрел, но нужно тестировать); 3. что делать если после 3 идет 1 или 2, откуда они должны начинаться. Сделал как понял, в соответствии с примером, разукрасил просто для наглядности. Если, что-то не так, то думаю, Вы без труда исправите макросmsi2102
msi2102, Вы думаете чем больше раз повторите, как мантру, то, что вам нужно, то помощь придет быстрее?
Ну мало ли... Мир же не без добрых людей.
1. Да - только 2 может размножаться. 2. Как это понять ? Если сразу за участком 2 идет еще один участок 2 - то это не два разных участка, а единый участок 2. 3. Участок 3 идет всегда последним, после него не может быть участков 1 или 2.
Вообще, спасибо за макрос - он все правильно расставляет, в нужном порядке. Просто мне мне нужна именно формула, а не макрос. Я же специально написал именно в раздел формул, а не vba - свой вопрос.
msi2102, Вы думаете чем больше раз повторите, как мантру, то, что вам нужно, то помощь придет быстрее?
Ну мало ли... Мир же не без добрых людей.
1. Да - только 2 может размножаться. 2. Как это понять ? Если сразу за участком 2 идет еще один участок 2 - то это не два разных участка, а единый участок 2. 3. Участок 3 идет всегда последним, после него не может быть участков 1 или 2.
Вообще, спасибо за макрос - он все правильно расставляет, в нужном порядке. Просто мне мне нужна именно формула, а не макрос. Я же специально написал именно в раздел формул, а не vba - свой вопрос.
Function Единицы(arg_1 As Range) As Variant Dim arr_1, arr_2, k1 As Integer, k3 As Integer, h As Integer, fl As Byte, n As Integer, n1 As Integer, n2 As Integer, n3 As Integer, m As Integer, pov As Integer k1 = 1: k3 = 1: fl = 0 arr_1 = arg_1 'Range("A5:D" & Cells(Rows.Count, 2).End(xlUp).Row) h = UBound(arr_1) ReDim arr_2(1 To h, 1 To 1) For n = 1 To h If arr_1(n, 2) = 1 Then For m = 1 To arr_1(n, 4) arr_2(n, k1) = 1 k1 = k1 + 1 If k1 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k1) Next k3 = 1 ElseIf arr_1(n, 2) = 2 Then If arr_1(n, 1) <> "" Then pov = arr_1(n, 1) n1 = n: fl = 1 End If If n < h Then If arr_1(n, 2) <> arr_1(n + 1, 2) Or arr_1(n + 1, 1) <> "" Then n2 = n: fl = 0 End If Else n2 = h: fl = 0 End If If fl = 0 Then Do For n3 = n1 To n2 For m = 1 To arr_1(n3, 4) arr_2(n3, k1) = 1 k1 = k1 + 1 If k1 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k1) Next Next pov = pov - 1 Loop Until pov <= 0 End If k3 = 1 ElseIf arr_1(n, 2) = 3 Then For m = 1 To arr_1(n, 4) arr_2(n, k3) = 1 k3 = k3 + 1 k1 = k3 If k3 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k3) Next End If Next Единицы = arr_2 End Function
Function Единицы(arg_1 As Range) As Variant Dim arr_1, arr_2, k1 As Integer, k3 As Integer, h As Integer, fl As Byte, n As Integer, n1 As Integer, n2 As Integer, n3 As Integer, m As Integer, pov As Integer k1 = 1: k3 = 1: fl = 0 arr_1 = arg_1 'Range("A5:D" & Cells(Rows.Count, 2).End(xlUp).Row) h = UBound(arr_1) ReDim arr_2(1 To h, 1 To 1) For n = 1 To h If arr_1(n, 2) = 1 Then For m = 1 To arr_1(n, 4) arr_2(n, k1) = 1 k1 = k1 + 1 If k1 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k1) Next k3 = 1 ElseIf arr_1(n, 2) = 2 Then If arr_1(n, 1) <> "" Then pov = arr_1(n, 1) n1 = n: fl = 1 End If If n < h Then If arr_1(n, 2) <> arr_1(n + 1, 2) Or arr_1(n + 1, 1) <> "" Then n2 = n: fl = 0 End If Else n2 = h: fl = 0 End If If fl = 0 Then Do For n3 = n1 To n2 For m = 1 To arr_1(n3, 4) arr_2(n3, k1) = 1 k1 = k1 + 1 If k1 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k1) Next Next pov = pov - 1 Loop Until pov <= 0 End If k3 = 1 ElseIf arr_1(n, 2) = 3 Then For m = 1 To arr_1(n, 4) arr_2(n, k3) = 1 k3 = k3 + 1 k1 = k3 If k3 > UBound(arr_2, 2) Then ReDim Preserve arr_2(1 To h, 1 To k3) Next End If Next Единицы = arr_2 End Function
Я пытаюсь расставить единицы в ячейках - в зависимости от столбцов A, B и D.
В столбце D - записано сколько столбцов должно быть заполнено единицами по горизонтали слева направо. В столбце B - какой вид заполнения используется. Тут не конкретная ячейка отвечает за свою строку, а непрерывный участок ячеек одинакового цвета - отвечает за свои строки. Видов всего три - 1,2 и 3.
Участок зеленых ячеек "1" - означает, что 1 начинает ставиться в строке - там где прерывается 1 верхней строки Участок рыжих ячеек "2" - означает, что нижняя ячейка рыжего участка столбца B - запускает новый цикл расстановки 1 с верхней строки этого же рыжего участка (количество циклов - число в синей ячейке из столбца A) Участок желтых ячеек "3" - это точный аналог зеленых ячеек, но всегда идет с самого начала.
Как формулой, без дополнительных столбцов - расставить единицы в диапазоне F5:CA35 - таким образом ?
Здравствуйте. Помогите решить вопрос.
Я пытаюсь расставить единицы в ячейках - в зависимости от столбцов A, B и D.
В столбце D - записано сколько столбцов должно быть заполнено единицами по горизонтали слева направо. В столбце B - какой вид заполнения используется. Тут не конкретная ячейка отвечает за свою строку, а непрерывный участок ячеек одинакового цвета - отвечает за свои строки. Видов всего три - 1,2 и 3.
Участок зеленых ячеек "1" - означает, что 1 начинает ставиться в строке - там где прерывается 1 верхней строки Участок рыжих ячеек "2" - означает, что нижняя ячейка рыжего участка столбца B - запускает новый цикл расстановки 1 с верхней строки этого же рыжего участка (количество циклов - число в синей ячейке из столбца A) Участок желтых ячеек "3" - это точный аналог зеленых ячеек, но всегда идет с самого начала.
Как формулой, без дополнительных столбцов - расставить единицы в диапазоне F5:CA35 - таким образом ?Dalm
Будете так продолжать, добрый модератор придет, разозлится и закроет тему, а то и забанит)
Судя по тому, что работу макроса Вы проверить смогли, на Вашем компе макросы не запрещены. UDF можно сделать надстройкой, тогда файл будет xlsx без всяких m. Если надо файл отправлять кому-то, чтобы отображался без надстройки, можно туда же написать функцию копирования листа с только данными в новый файл. Чисто формулой... как-то даже не представляется как, может еще зайдут гении, но повторять еще раз вопрос точно не надо
Будете так продолжать, добрый модератор придет, разозлится и закроет тему, а то и забанит)
Судя по тому, что работу макроса Вы проверить смогли, на Вашем компе макросы не запрещены. UDF можно сделать надстройкой, тогда файл будет xlsx без всяких m. Если надо файл отправлять кому-то, чтобы отображался без надстройки, можно туда же написать функцию копирования листа с только данными в новый файл. Чисто формулой... как-то даже не представляется как, может еще зайдут гении, но повторять еще раз вопрос точно не надоelovkov
Умное лицо это еще не признак ума. Все глупости на земле делаются именно с этим выражением лица
elovkov, да какая разница - смог я проверить работу макроса или не смог. Я же не про макрос спрашивал, а про ФОРМУЛУ. Я же в первом сообщении написал - что нужна формула, а не макрос (и не пользовательская функция, которая тоже является макросом) и не надстройка какая-то. А именно про формулу, которая запускается в файле xlsx. Потому что формула будет использоваться только в файлах xlsx, никаких надстроек мне никто устанавливать не разрешит и макросы запускать никто не позволит.
Ну мало ли. Может кто-то знает - как это сделать формулой.
elovkov, да какая разница - смог я проверить работу макроса или не смог. Я же не про макрос спрашивал, а про ФОРМУЛУ. Я же в первом сообщении написал - что нужна формула, а не макрос (и не пользовательская функция, которая тоже является макросом) и не надстройка какая-то. А именно про формулу, которая запускается в файле xlsx. Потому что формула будет использоваться только в файлах xlsx, никаких надстроек мне никто устанавливать не разрешит и макросы запускать никто не позволит.
Ну мало ли. Может кто-то знает - как это сделать формулой.Dalm
Сообщение отредактировал Dalm - Среда, 06.08.2025, 10:13
Чисто формулой... как-то даже не представляется как
ну как... сложно, громоздко, неоптимально... короче маме такие формулы лучше не показывать )))
пы.сы. написано чисто из принципа, чтобы показать, что такое возможно - на практике надо не выпендриваться и использовать pq - он тоже не имеет никакого отношения к "объектной модели VBA" (что бы это ни значило)
Чисто формулой... как-то даже не представляется как
ну как... сложно, громоздко, неоптимально... короче маме такие формулы лучше не показывать )))
пы.сы. написано чисто из принципа, чтобы показать, что такое возможно - на практике надо не выпендриваться и использовать pq - он тоже не имеет никакого отношения к "объектной модели VBA" (что бы это ни значило)прохожий2019
да как скажете - "непрерывный участок ячеек одинакового цвета" не означает, что надо ориентироваться на цвет, формулой (а не формулами) не означает единственное число, спорить не буду; спасибо за повод попрактиковаться в 365
да как скажете - "непрерывный участок ячеек одинакового цвета" не означает, что надо ориентироваться на цвет, формулой (а не формулами) не означает единственное число, спорить не буду; спасибо за повод попрактиковаться в 365прохожий2019