У меня появился вопрос про увеличение-уменьшение области чисел. В книге есть ячейка S16, в ней находится число "4".
Как вокруг этой ячейки симметрично расставить определенное количество чисел?
Иными словами - если это одна ячейка, а вокруг - пустые ячейки. То вокруг S16 - расставятся числа "4", в том количестве какое требуется чтобы полностью окружить эту ячейку, но не больше числа указанного в ячейке H4. Но если вокруг S16 - уже стоят какие-то число - то нужно симметрично расставить вокруг этой области - еще 11 цифр-четверок.
Адрес ячейки указан в H3. Число цифр указано в H4.
То есть - чем больше щелчков по кнопке - тем больше будет становится область.
Добрый день.
У меня появился вопрос про увеличение-уменьшение области чисел. В книге есть ячейка S16, в ней находится число "4".
Как вокруг этой ячейки симметрично расставить определенное количество чисел?
Иными словами - если это одна ячейка, а вокруг - пустые ячейки. То вокруг S16 - расставятся числа "4", в том количестве какое требуется чтобы полностью окружить эту ячейку, но не больше числа указанного в ячейке H4. Но если вокруг S16 - уже стоят какие-то число - то нужно симметрично расставить вокруг этой области - еще 11 цифр-четверок.
Адрес ячейки указан в H3. Число цифр указано в H4.
То есть - чем больше щелчков по кнопке - тем больше будет становится область.КошкаСофи
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long, c As Long, v As Long, i As Long
If Target.CountLarge <> 1 Then Exit Sub Application.EnableEvents = False Application.ScreenUpdating = False Application.Calculation = xlCalculationManual On Error GoTo Error_exit
r = Target.Row c = Target.Column v = Val(Target.Value) For i = v - 1 To 0 Step -1 Range(Cells(WorksheetFunction.Max(r - i, 1), WorksheetFunction.Max(c - i, 1)), _ Cells(WorksheetFunction.Min(r + i, Rows.Count), WorksheetFunction.Min(c + i, Columns.Count))).Value = v - i Next i
Error_exit: Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.EnableEvents = True End Sub
[/vba] Этот код при появлении какого-то числа на листе - окружает его числами по периметру ячейки.
В моем вопросе - тоже нужно как-то окружать область вокруг ячейки, но не полностью по всему периметру, а добавлять фиксированное количество чисел по периметру. То есть это будет выглядеть как область с неровными краями, а не как квадрат.
Подскажите - как это сделать ?
Имеется вот такой код:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long, c As Long, v As Long, i As Long
If Target.CountLarge <> 1 Then Exit Sub Application.EnableEvents = False Application.ScreenUpdating = False Application.Calculation = xlCalculationManual On Error GoTo Error_exit
r = Target.Row c = Target.Column v = Val(Target.Value) For i = v - 1 To 0 Step -1 Range(Cells(WorksheetFunction.Max(r - i, 1), WorksheetFunction.Max(c - i, 1)), _ Cells(WorksheetFunction.Min(r + i, Rows.Count), WorksheetFunction.Min(c + i, Columns.Count))).Value = v - i Next i
Error_exit: Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.EnableEvents = True End Sub
[/vba] Этот код при появлении какого-то числа на листе - окружает его числами по периметру ячейки.
В моем вопросе - тоже нужно как-то окружать область вокруг ячейки, но не полностью по всему периметру, а добавлять фиксированное количество чисел по периметру. То есть это будет выглядеть как область с неровными краями, а не как квадрат.
Private Sub Worksheet_Change(ByVal Target As Range) Dim iOffs&, iCol&, x&, i&, r As Range If Target.CountLarge <> 1 Then Exit Sub If Len(Target) = 0 Then Exit Sub If Not IsNumeric(Target) Then Exit Sub On Error GoTo End_ x = Target.Value iOffs = 1 Application.EnableEvents = False Do Set r = Target.Offset(-iOffs, -iOffs).Resize(iOffs * 2 + 1, iOffs * 2 + 1) iCol = r.Columns.Count r(1) = x 'Target - 1 For i = 1 To iCol r(1, i) = x x = x - 1 If x < 0 Then GoTo End_ Next For i = 2 To iCol r(i, iCol) = x x = x - 1 If x < 0 Then GoTo End_ Next For i = iCol - 1 To 1 Step -1 r(iCol, i) = x x = x - 1 If x < 0 Then GoTo End_ Next For i = iCol - 1 To 2 Step -1 r(i, 1) = x x = x - 1 If x < 0 Then GoTo End_ Next iOffs = iOffs + 1 DoEvents Loop End_: Application.EnableEvents = True End Sub
[/vba]
Мяу [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim iOffs&, iCol&, x&, i&, r As Range If Target.CountLarge <> 1 Then Exit Sub If Len(Target) = 0 Then Exit Sub If Not IsNumeric(Target) Then Exit Sub On Error GoTo End_ x = Target.Value iOffs = 1 Application.EnableEvents = False Do Set r = Target.Offset(-iOffs, -iOffs).Resize(iOffs * 2 + 1, iOffs * 2 + 1) iCol = r.Columns.Count r(1) = x 'Target - 1 For i = 1 To iCol r(1, i) = x x = x - 1 If x < 0 Then GoTo End_ Next For i = 2 To iCol r(i, iCol) = x x = x - 1 If x < 0 Then GoTo End_ Next For i = iCol - 1 To 1 Step -1 r(iCol, i) = x x = x - 1 If x < 0 Then GoTo End_ Next For i = iCol - 1 To 2 Step -1 r(i, 1) = x x = x - 1 If x < 0 Then GoTo End_ Next iOffs = iOffs + 1 DoEvents Loop End_: Application.EnableEvents = True End Sub
RAN, скажите пожалуйста - у вас в макросе числа которые расставляются вокруг ячейки S16 - неидентичны тому числу, которое стоит в самой ячейке S16. То есть - если в ячейке S16 стоит цифра 8, то вокруг нее должны появиться 10 чисел (как написано в H4), со значениями 8.
Что можно поменять в макросе, что он расставлял именно одинаковые числа в заданном (в ячейке H4) количестве - вокруг S16 ? Как вы считаете ?
RAN, скажите пожалуйста - у вас в макросе числа которые расставляются вокруг ячейки S16 - неидентичны тому числу, которое стоит в самой ячейке S16. То есть - если в ячейке S16 стоит цифра 8, то вокруг нее должны появиться 10 чисел (как написано в H4), со значениями 8.
Что можно поменять в макросе, что он расставлял именно одинаковые числа в заданном (в ячейке H4) количестве - вокруг S16 ? Как вы считаете ?КошкаСофи