Numbered
Функции
- Когда значение в
Source Cell Range
изменяется с помощью пользовательского ввода или с помощью VBA, программа запускается.Он не запустится, если Source Cell Range
содержит формулу и значение изменилось из-за изменения другой ячейки.Для этой функции вы должны использовать событие Worksheet Calculate
. - Если значение не является числом, ничего не произойдет.
- Если значение является десятичным числом (
1.5
), то онобудет округлено до ближайшего целого числа (2
). - Если значение превышает количество строк в листе, лист будет заполнен до нижней ячейки.Остальные значения будут игнорироваться.
- Измените
Source Cell Range Address
в Worksheet_Change
(установите на A1
) в соответствии с вашими потребностями, например C17
. Будут затронуты только указанные ниже ячейки.
Код
Скопируйте следующий код в стандартный модуль (VBE >> Insert >> Module
)например,
Module1
Option Explicit
Sub Numbered(CellRange As Range)
Dim vntT As Variant ' Target Array/Value
Dim srcVal As Variant ' Value
Dim srcMax As Long ' Maximum Value
Dim srcSgn As Long ' Sign (+-)
Dim srcAbs As Long ' Absolute Value
Dim i As Long ' Target Array Row Counter
' In Cell Range
With CellRange
' Write value of CellRange to Value.
srcVal = .Value
' Calculate Maximum Value.
srcMax = .Worksheet.Rows.Count - .Offset(1).Row + 1
End With
' Check if Value is a number.
If IsNumeric(srcVal) Then
' Convert Value to whole number.
srcVal = CLng(srcVal)
' Write the sign of Value to Sign.
srcSgn = Sgn(srcVal)
' Check if the absolute value of Value is greater than Maximum Value.
If Abs(srcVal) > srcMax Then
' Write Maximum Value with (correct) Sign to Value.
srcVal = srcSgn * srcMax
End If
' Write the absolute value of Value to Absolute Value.
srcAbs = Abs(srcVal)
' Check Absolute Value
Select Case srcAbs
Case Is > 1
' Resize Target Array to Absolute Value rows and one column.
ReDim vntT(1 To srcAbs, 1 To 1)
' Loop through rows of Target Array.
For i = 1 To srcAbs
' Write to element at i-th row and 1st column
' of Target Array.
vntT(i, 1) = srcSgn * i
Next
Case 1
' If Absolute Value is 1, vntT will not be an array, but a
' variant containing one value.
vntT = srcSgn * 1
Case 0
' If Absolute Value is 0, vntT will not be an array, but a
' variant containing one value.
vntT = 0 ' or ""
End Select
End If
' In First Cell of Target Range (Cell Below Cell Range)
With CellRange.Offset(1)
' Resize to bottom cell and clear contents.
.Resize(srcMax).ClearContents
' Check if vntT is an array.
If IsArray(vntT) Then ' Multiple values
' Calculate Target Range: Resize First Cell of Target Range by
' Absolute Value.
' Copy Target Array to Target Range.
.Resize(srcAbs) = vntT
Else ' One value
' Write Target Value to First Cell of Target Range.
.Value = vntT
End If
End With
End Sub
Скопируйте следующий код в любой листовой модуль , где вы хотите запустить программу, например
Лист1
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Const cSrc As String = "A1" ' Source Cell Range Address
If Target.Address = Range(cSrc).Address Then
Numbered Target
End If
End Sub