Excel:基于输入的数字动态列表
我正试着根据硬编码输入制作一个数字列表 假设我在A1中写5,那么我想在下面的一列中列出数字1,2,3,4,5。如果输入为25,列表将增加到1-25,以此类推 有人能帮我吗 致以最诚挚的问候您需要一份工作表\u更改事件: 您需要一个工作表更改事件: 使用公式: 在A2中,使用以下公式:Excel:基于输入的数字动态列表,excel,vba,Excel,Vba,我正试着根据硬编码输入制作一个数字列表 假设我在A1中写5,那么我想在下面的一列中列出数字1,2,3,4,5。如果输入为25,列表将增加到1-25,以此类推 有人能帮我吗 致以最诚挚的问候您需要一份工作表\u更改事件: 您需要一个工作表更改事件: 使用公式: 在A2中,使用以下公式: =IFERROR(IF(A1="","",1),"") 在A3使用中: 并使用公式向下填充: 在A2中,使用以下公式: =IFERROR(IF(A1="","",1),"") 在A3使用中: 并向下填充编号的
=IFERROR(IF(A1="","",1),"")
在A3使用中:
并使用公式向下填充:
在A2中,使用以下公式:
=IFERROR(IF(A1="","",1),"")
在A3使用中:
并向下填充编号的
特征
当用户输入或通过VBA更改源单元格范围中的值时
程序被触发。如果源单元格区域包含公式,并且由于另一个单元格的更改而更改了该值,则不会运行该函数。对于该功能,您必须使用工作表计算事件。
如果该值不是数字,则不会发生任何事情。
如果该值为十进制数1.5,则将四舍五入至最接近的数字
整数2。
如果该值超过工作表中的行数,则
工作表将填充到底部单元格。其余的价值观
将被忽略。
将工作表中的源单元格范围地址更改为A1以满足您的需要,例如C17。
只有下面的单元格会受到影响。
代码
将以下代码复制到标准模块VBE>>插入>>模块,例如
模块1
选项显式
Sub NumberedCellRange作为范围
将vntT作为变量“目标数组/值”
Dim srcVal作为变量值
将srcMax变为“长”最大值
尺寸srcSgn为“长”标志+-
将srcAbs变长为“绝对值”
Dim i As Long“目标阵列行计数器
“在单元格范围内
与手机通话
'将CellRange的值写入值。
srcVal=.Value
'计算最大值。
srcMax=.Worksheet.Rows.Count-.Offset1.Row+1
以
'检查值是否为数字。
如果IsNumericsrcVal,则
'将值转换为整数。
srcVal=CLngsrcVal
'将值的符号写入符号。
srcSgn=SgnsrcVal
'检查值的绝对值是否大于最大值。
如果AbssrcVal>srcMax,则
'使用正确的符号对值写入最大值。
srcVal=srcSgn*srcMax
如果结束
'将值的绝对值写入绝对值。
srcAbs=AbssrcVal
'检查绝对值
选择案例srcAbs
病例>1
'将目标数组调整为绝对值行和一列。
重拨VNT1至srcAbs,1至1
'在目标数组的行中循环。
对于i=1到srcAbs
'写入第i行和第1列的元素
'的目标阵列。
VNTI,1=srcSgn*i
下一个
案例1
'如果绝对值为1,则vntT将不是数组,而是数组
'包含一个值的变量。
vntT=srcSgn*1
案例0
'如果绝对值为0,则vntT将不是数组,而是数组
'包含一个值的变量。
vntT=0'或
结束选择
如果结束
'在目标范围的第一个单元格中,单元格范围下的单元格
使用CellRange.Offset1
'调整到底部单元格并清除内容。
.ResizesrcMax.ClearContents
'检查vntT是否为数组。
如果为IsArrayvntT,则为“多个值”
'计算目标范围:按大小调整目标范围第一个单元格的大小
“绝对值。
'将目标阵列复制到目标范围。
.ResizesrcAbs=vntT
Else的一个值
'将目标值写入目标范围的第一个单元格。
.Value=vntT
如果结束
以
端接头
将以下代码复制到要运行程序的任何工作表模块中,例如
表1
编号
特征
当用户输入或通过VBA更改源单元格范围中的值时
程序被触发。如果源单元格区域包含公式,并且由于另一个单元格的更改而更改了该值,则不会运行该函数。对于该功能,您必须使用工作表计算事件。
如果该值不是数字,则不会发生任何事情。
如果该值为十进制数1.5,则将四舍五入至最接近的数字
整数2。
如果该值超过工作表中的行数,则
工作表将填充到底部单元格。其余的价值观
将被忽略。
将工作表中的源单元格范围地址更改为A1以满足您的需要,例如C17。
只有下面的单元格会受到影响。
代码
将以下代码复制到标准模块VBE>>插入>>模块,例如
模块1
选项显式
Sub NumberedCellRange作为范围
变光vntT作为“目标”
数组/值
Dim srcVal作为变量值
将srcMax变为“长”最大值
尺寸srcSgn为“长”标志+-
将srcAbs变长为“绝对值”
Dim i As Long“目标阵列行计数器
“在单元格范围内
与手机通话
'将CellRange的值写入值。
srcVal=.Value
'计算最大值。
srcMax=.Worksheet.Rows.Count-.Offset1.Row+1
以
'检查值是否为数字。
如果IsNumericsrcVal,则
'将值转换为整数。
srcVal=CLngsrcVal
'将值的符号写入符号。
srcSgn=SgnsrcVal
'检查值的绝对值是否大于最大值。
如果AbssrcVal>srcMax,则
'使用正确的符号对值写入最大值。
srcVal=srcSgn*srcMax
如果结束
'将值的绝对值写入绝对值。
srcAbs=AbssrcVal
'检查绝对值
选择案例srcAbs
病例>1
'将目标数组调整为绝对值行和一列。
重拨VNT1至srcAbs,1至1
'在目标数组的行中循环。
对于i=1到srcAbs
'写入第i行和第1列的元素
'的目标阵列。
VNTI,1=srcSgn*i
下一个
案例1
'如果绝对值为1,则vntT将不是数组,而是数组
'包含一个值的变量。
vntT=srcSgn*1
案例0
'如果绝对值为0,则vntT将不是数组,而是数组
'包含一个值的变量。
vntT=0'或
结束选择
如果结束
'在目标范围的第一个单元格中,单元格范围下的单元格
使用CellRange.Offset1
'调整到底部单元格并清除内容。
.ResizesrcMax.ClearContents
'检查vntT是否为数组。
如果为IsArrayvntT,则为“多个值”
'计算目标范围:按大小调整目标范围第一个单元格的大小
“绝对值。
'将目标阵列复制到目标范围。
.ResizesrcAbs=vntT
Else的一个值
'将目标值写入目标范围的第一个单元格。
.Value=vntT
如果结束
以
端接头
将以下代码复制到要运行程序的任何工作表模块中,例如
表1
绝对的传奇!感谢所有的帮助!绝对的传奇!感谢所有的帮助!
=IFERROR(IF(A2+1>A$1,"",A2+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