Здравствуйте ребята. Подскажите - как поправить макрос.
Макрос по событию Worksheet_Change - при записи в ячейку S16 какого либо числа - формирует вокруг этой ячейки область из подобных чисел. Количество этих чисел - задается в ячейке H4. Однако рядом с ячейкой S16 - расположены ячейки со значением s78.
Вопрос в том, как макросу - не заполнять ячейки со значениями s78 - своими цифрами (во время срабатывания макроса)? ( При этом количество созданных макросом ячеек - должно быть по прежнему равно - заданному в H4 )
Здравствуйте ребята. Подскажите - как поправить макрос.
Макрос по событию Worksheet_Change - при записи в ячейку S16 какого либо числа - формирует вокруг этой ячейки область из подобных чисел. Количество этих чисел - задается в ячейке H4. Однако рядом с ячейкой S16 - расположены ячейки со значением s78.
Вопрос в том, как макросу - не заполнять ячейки со значениями s78 - своими цифрами (во время срабатывания макроса)? ( При этом количество созданных макросом ячеек - должно быть по прежнему равно - заданному в H4 )КошкаСофи
Do Set r = [S16].Offset(-iOffs, -iOffs).Resize(iOffs * 2 + 1, iOffs * 2 + 1) iCol = r.Columns.Count ' r(1) = x 'Target - 1 For i = 1 To iCol If Len(r(1, i)) = 0 Then r(1, i) = [S16] x = x - 1 End If 'x = [H4] If x <= 0 Then GoTo End_ Next For i = 2 To iCol If Len(r(i, iCol)) = 0 Then r(i, iCol) = [S16] x = x - 1 End If 'x = [H4] If x <= 0 Then GoTo End_ Next For i = iCol - 1 To 1 Step -1 If Len(r(iCol, i)) = 0 Then r(iCol, i) = [S16] x = x - 1 End If 'x = [H4] If x <= 0 Then GoTo End_ Next For i = iCol - 1 To 2 Step -1 If Len(r(i, 1)) = 0 Then r(i, 1) = [S16] x = x - 1 End If 'x = [H4] If x <= 0 Then GoTo End_ Next iOffs = iOffs + 1 DoEvents Loop
[/vba]
[vba]
Код
Do Set r = [S16].Offset(-iOffs, -iOffs).Resize(iOffs * 2 + 1, iOffs * 2 + 1) iCol = r.Columns.Count ' r(1) = x 'Target - 1 For i = 1 To iCol If Len(r(1, i)) = 0 Then r(1, i) = [S16] x = x - 1 End If 'x = [H4] If x <= 0 Then GoTo End_ Next For i = 2 To iCol If Len(r(i, iCol)) = 0 Then r(i, iCol) = [S16] x = x - 1 End If 'x = [H4] If x <= 0 Then GoTo End_ Next For i = iCol - 1 To 1 Step -1 If Len(r(iCol, i)) = 0 Then r(iCol, i) = [S16] x = x - 1 End If 'x = [H4] If x <= 0 Then GoTo End_ Next For i = iCol - 1 To 2 Step -1 If Len(r(i, 1)) = 0 Then r(i, 1) = [S16] x = x - 1 End If 'x = [H4] If x <= 0 Then GoTo End_ Next iOffs = iOffs + 1 DoEvents Loop
RAN, спасибо. А вот скажите - если ячейки с препятствиями будут идти непрерывно - как недопустить простановку области чисел на другой стороне препятствия из ячеек ?
Потому что сейчас в данном макросе - числа игнорируют препятствие и размещаются на другой его стороне. А ведь эта должна быть единая область. Получается - здесь числа должны разместится только на одной стороне - до препятствия.
RAN, спасибо. А вот скажите - если ячейки с препятствиями будут идти непрерывно - как недопустить простановку области чисел на другой стороне препятствия из ячеек ?
Потому что сейчас в данном макросе - числа игнорируют препятствие и размещаются на другой его стороне. А ведь эта должна быть единая область. Получается - здесь числа должны разместится только на одной стороне - до препятствия.КошкаСофи
КошкаСофи, а какие правила? Заполняем ячейки змейкой, или подразумеваем что ячейки заполняются радиально, от центра, во все стороны? Ещё много вопросов остается, о том как реагировать на препятствия
КошкаСофи, а какие правила? Заполняем ячейки змейкой, или подразумеваем что ячейки заполняются радиально, от центра, во все стороны? Ещё много вопросов остается, о том как реагировать на препятствияFidgy
Если область дойдет до края препятствия, что должно произойти?
В этом случае область должна продолжать увеличиваться, но в сторону противоположную препятствию. Потому что - если препятствие пересекать нельзя - то область не может увеличиваться проходя сквозь него.
Значит области нужно продолжать увеличиваться в ту сторону, где препятствий нет.
Если область дойдет до края препятствия, что должно произойти?
В этом случае область должна продолжать увеличиваться, но в сторону противоположную препятствию. Потому что - если препятствие пересекать нельзя - то область не может увеличиваться проходя сквозь него.
Значит области нужно продолжать увеличиваться в ту сторону, где препятствий нет.КошкаСофи
Скажите, вот в приложенном файле - если область достигает какого-то определенного уровня - то она перестает увеличиваться в размерах. Хотя препятствия перед ней нет. Почему так происходит и как это изменить ?
Ведь по идее - если препятствия нет, то область должна увеличиваться.
Fidgy, спасибо.
Скажите, вот в приложенном файле - если область достигает какого-то определенного уровня - то она перестает увеличиваться в размерах. Хотя препятствия перед ней нет. Почему так происходит и как это изменить ?
Ведь по идее - если препятствия нет, то область должна увеличиваться.КошкаСофи
КошкаСофи, только вам ведомо, что за задачу вы решаете. Но разные задачи требуют разный алгоритм. Вы просили "например", я вам сделал. Вы задали второй вопрос, я поправил. Но, наконец, можно уже и представить картину в целом. Не скупитесь на примеры, сделайте побольше вариантов, как должно получиться. Например, в вашем файле ячейка R11 заполнена, а ячейки P24 и T24 нет. Как будут размножаться ёжики (200 шт)?
КошкаСофи, только вам ведомо, что за задачу вы решаете. Но разные задачи требуют разный алгоритм. Вы просили "например", я вам сделал. Вы задали второй вопрос, я поправил. Но, наконец, можно уже и представить картину в целом. Не скупитесь на примеры, сделайте побольше вариантов, как должно получиться. Например, в вашем файле ячейка R11 заполнена, а ячейки P24 и T24 нет. Как будут размножаться ёжики (200 шт)?RAN
Например, в вашем файле ячейка R11 заполнена, а ячейки P24 и T24 нет.
В моем файле ячейка R11 - заполнена. Ячейки P24 и T24 - заполнены препятствием. Они не пустые - это препятствия.
В моем приложенном файле - видно, что ячейки Q31, R31, S31 - пустые, то есть там нет препятствий - ограничивающих рост области. Но область на них не распространяется, при срабатывании макроса. Я не совсем понимаю почему, ведь там нет препятствий.
Например, в вашем файле ячейка R11 заполнена, а ячейки P24 и T24 нет.
В моем файле ячейка R11 - заполнена. Ячейки P24 и T24 - заполнены препятствием. Они не пустые - это препятствия.
В моем приложенном файле - видно, что ячейки Q31, R31, S31 - пустые, то есть там нет препятствий - ограничивающих рост области. Но область на них не распространяется, при срабатывании макроса. Я не совсем понимаю почему, ведь там нет препятствий.
Почему же тогда область перестает увеличиваться ?КошкаСофи
Никаких возражений. Уберите. Или, как вариант, можете рисовать вашу "непроходимость" вокруг ячейки KUR500000. Там, я думаю, строк хватит. И почему вы так не любите число 13?
Никаких возражений. Уберите. Или, как вариант, можете рисовать вашу "непроходимость" вокруг ячейки KUR500000. Там, я думаю, строк хватит. И почему вы так не любите число 13?RAN