Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel:基于输入的数字动态列表_Excel_Vba - Fatal编程技术网

Excel:基于输入的数字动态列表

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使用中: 并向下填充编号的

我正试着根据硬编码输入制作一个数字列表

假设我在A1中写5,那么我想在下面的一列中列出数字1,2,3,4,5。如果输入为25,列表将增加到1-25,以此类推

有人能帮我吗

致以最诚挚的问候

您需要一份工作表\u更改事件:

您需要一个工作表更改事件:

使用公式:

在A2中,使用以下公式:

=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