Note: The other languages of the website are Google-translated. Back to English

如何在Excel中根据单元格值自动插入行?

文档插入行基于值 1
假设您具有一定范围的数据,并且想要在Excel中自动在某个值之上或之下插入空白行,例如,自动插入零值以下的行,如下面的屏幕截图所示。 在Excel中,没有直接的方法可以解决此任务,但是我可以为您介绍一个宏代码,以便您根据Excel中的某个值自动插入行。
使用VBA根据单元格值在下面插入行

使用Kutools for Excel根据单元格值在上方插入行 好主意3

要通过运行VBA根据单元格值插入行,请执行以下步骤:

1。 按 Alt + F11键 同时输入一个键 Microsoft Visual Basic应用程序 窗口弹出。

2。 点击 插页 > 模块,然后将以下VBA代码粘贴到弹出窗口 模块 窗口。

VBA:根据单元格值在下面插入行。

Sub BlankLine()
	'Updateby20150203
	Dim Rng As Range
	Dim WorkRng As Range
	On Error Resume Next
	xTitleId                   = "KutoolsforExcel"
	Set WorkRng                = Application.Selection
	Set WorkRng                = Application.InputBox("Range", xTitleId, WorkRng.Address, Type: = 8)
	Set WorkRng                = WorkRng.Columns(1)
	xLastRow                   = WorkRng.Rows.Count
	Application.ScreenUpdating = False
	For xRowIndex = xLastRow To 1 Step - 1
		Set Rng                   = WorkRng.Range("A" & xRowIndex)
		If Rng.Value = "0" Then
			Rng.Offset(1, 0).EntireRow.Insert Shift: = xlDown
		End If
	Next
	Application.ScreenUpdating = True
End Sub

3。 点击 F5 键或 运行 按钮,将弹出一个对话框,然后选择包含零的列。 看截图:
文档插入行基于值 2

4。 点击 OK。 然后将在零值以下插入空白行。
文档插入行基于值 3

小技巧:

1.如果要基于其他值插入行,则可以更改 0 到您在VBA中想要的任何值: 如果Rng.Value =“ 0”,则.

2.如果要插入大于零或其他值的行,则可以使用下面的vba代码。

VBA:在零值上方插入行:

Sub BlankLine()
	'Updateby20150203
	Dim Rng As Range
	Dim WorkRng As Range
	On Error Resume Next
	xTitleId                   = "KutoolsforExcel"
	Set WorkRng                = Application.Selection
	Set WorkRng                = Application.InputBox("Range", xTitleId, WorkRng.Address, Type: = 8)
	Set WorkRng                = WorkRng.Columns(1)
	xLastRow                   = WorkRng.Rows.Count
	Application.ScreenUpdating = False
	For xRowIndex = xLastRow To 1 Step - 1
		Set Rng                   = WorkRng.Range("A" & xRowIndex)
		If Rng.Value = "0" Then
			Rng.EntireRow.Insert Shift: = xlDown
		End If
	Next
	Application.ScreenUpdating = True
End Sub

文档插入行基于值 4


如果您不熟悉VBA,可以尝试 Kutools for Excel's 选择特定的单元格 实用程序,然后在上面插入行。

Kutools for Excel, 与超过 300 方便的功能,使您的工作更加轻松。 

安装后 Kutools for Excel,请执行以下操作:(立即免费下载Kutools for Excel!)

1.选择要从中查找特定单元格的列表,然后单击 库工具 > 选择 > 选择特定的单元格。 看截图:
doc基于值9插入行

2.在弹出的对话框中,选中 整行 选项,然后选择 等于 特定类型 列表,然后在右侧的文本框中输入要查找的值。 看截图:
doc基于值6插入行

3。 点击 Ok,然后会弹出一个对话框,提醒您选中的行数,只需将其关闭即可。

4.将光标放在选定的一行上,然后右键单击以选择 插页 从上下文菜单中。 看截图:
doc基于值7插入行

现在,将基于特定值在上方插入行。
doc基于值8插入行


相关文章:


最佳办公效率工具

Kutools for Excel解决了您的大多数问题,并使您的生产率提高了80%

  • 重用: 快速插入 复杂的公式,图表 以及您以前使用过的任何东西; 加密单元 带密码 创建邮件列表 并发送电子邮件...
  • 超级公式栏 (轻松编辑多行文本和公式); 阅读版式 (轻松读取和编辑大量单元格); 粘贴到过滤范围...
  • 合并单元格/行/列 不会丢失数据; 拆分单元格内容; 合并重复的行/列...防止细胞重复; 比较范围...
  • 选择重复或唯一 行; 选择空白行 (所有单元格都是空的); 超级查找和模糊查找 在许多工作簿中; 随机选择...
  • 确切的副本 多个单元格,无需更改公式参考; 自动创建参考 到多张纸; 插入项目符号,复选框等...
  • 提取文字,添加文本,按位置删除, 删除空间; 创建和打印分页小计; 在单元格内容和注释之间转换...
  • 超级滤镜 (将过滤方案保存并应用于其他工作表); 高级排序 按月/周/日,频率及更多; 特殊过滤器 用粗体,斜体...
  • 结合工作簿和工作表; 根据关键列合并表; 将数据分割成多个工作表; 批量转换xls,xlsx和PDF...
  • 超过300种强大功能. 支持 Office / Excel 2007-2021 和 365。支持所有语言。 在您的企业或组织中轻松部署。 完整功能 30 天免费试用。 60 天退款保证。
kte选项卡201905

Office选项卡为Office带来了选项卡式界面,使您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (43)
还没有评分。 成为第一位评论!
该评论由网站上的主持人最小化
我想在下面的单元格下粘贴特定内容。 怎么做? 我想在几列中插入值,而不是空白行。
该评论由网站上的主持人最小化
嗨,我想根据值插入多行 例如:我想在值为 1 的单元格下方插入 2 个空白行,在值为 2 的单元格下方插入 3 行,在值为 3 的单元格下方插入 4 行等等 你能请在这件事上给予我帮助?
该评论由网站上的主持人最小化
你有没有得到这个答案? 我正在尝试做同样的事情。

有一个员工名单,他们有 # 周的假期。 我想为每周插入一行。 这将是 1、2 或 3 行,具体取决于他们获得了多少时间。 #s 1 2 3 已经在我的电子表格中。
该评论由网站上的主持人最小化
我想使用一个电子表格中的单元格值根据计数插入行,并在另一个电子表格中插入行。
该评论由网站上的主持人最小化
感谢您的留言。 但是你能更详细地描述你的问题吗? 您要插入哪些行? 空白的? 以及您要在工作表中插入的位置? 如果可以的话,给我一些截图。 谢谢你。
该评论由网站上的主持人最小化
我爱你。 谢谢你。
该评论由网站上的主持人最小化
那真是太棒了! 谢啦。
该评论由网站上的主持人最小化
如何插入多行?
该评论由网站上的主持人最小化
你可以试试这个 VBA

子空白行()
'Updateby20150203
昏暗范围
将 WorkRng 调暗为范围
将 xInsertNum 变暗
' On Error Resume Next
xTitleId = "Kutools for Excel"
设置 WorkRng = Application.Selection
设置 WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
如果 WorkRng 什么都不是,则退出 Sub
xInsertNum = Application.InputBox("要插入的空白行数", xTitleId, Type:=1)
如果 xInsertNum = False 那么
MsgBox "要插入的空白行数", vbInformation, xTitleId
退出小组
结束如果
设置 WorkRng = WorkRng.Columns(1)
xLastRow = WorkRng.Rows.Count
Application.ScreenUpdating = False
对于 xRowIndex = xLastRow 到 1 步 -1
设置 Rng = WorkRng.Range("A" & xRowIndex)
如果Rng.Value =“ 0”,则
Rng.Resize(xInsertNum).EntireRow.Insert Shift:=xlDown
结束如果
下一页
Application.ScreenUpdating =真
END SUB
该评论由网站上的主持人最小化
如果你想在下面插入空白行,试试这个

子空白行()
'Updateby20150203
昏暗范围
将 WorkRng 调暗为范围
将 xInsertNum 变暗
' On Error Resume Next
xTitleId = "Kutools for Excel"
设置 WorkRng = Application.Selection
设置 WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
如果 WorkRng 什么都不是,则退出 Sub
xInsertNum = Application.InputBox("要插入的空白行数", xTitleId, Type:=1)
如果 xInsertNum = False 那么
MsgBox "要插入的空白行数", vbInformation, xTitleId
退出小组
结束如果
设置 WorkRng = WorkRng.Columns(1)
xLastRow = WorkRng.Rows.Count
Application.ScreenUpdating = False
对于 xRowIndex = xLastRow 到 1 步 -1
设置 Rng = WorkRng.Range("A" & xRowIndex)
如果Rng.Value =“ 0”,则
Rng.Offset(1, 0).Resize(xInsertNum).EntireRow.Insert 移位:=xlDown
结束如果
下一页
Application.ScreenUpdating =真
END SUB

下面是在上面插入行。
该评论由网站上的主持人最小化
嗨 Sunny,这个宏非常适合我; 我只需要将行数更改为 30 并将 0 更改为文本:“期末余额”。 但是现在我想将选择的 30 行高的单元格复制粘贴到该宏刚刚插入的 30 个空白行中。 你能建议一个新的宏(或对这个宏的修改)来复制并粘贴一个范围到每 30 个空白行中。 我已将要复制和粘贴的范围命名为“模板”。
该评论由网站上的主持人最小化
在这个问题上我需要很大的帮助。 我有 2 列,第 1 列我的数据时间为 01/01/2016 05:00:00,天/月/年时/分/秒,在第 2 列中,与时间相关联的相应数据。

我的问题是我想在行之间添加数据时间,因为我有天的差距。 第一行是 1/01/01,第二行是例如 2016/2/10,所以我有 01 天。 并且该代码对我不起作用。

期待得到一些反馈,拜托! 谢谢
该评论由网站上的主持人最小化
你可以试试这个 VBA

子 InsertValueBetween()
'更新 20130825
将 WorkRng 调暗为范围
昏暗范围
Dim outArr 作为变体
Dim dic 作为变体
设置 dic = CreateObject("Scripting.Dictionary")
'错误继续下一步
xTitleId = "KutoolsforExcel"
设置 WorkRng = Application.Selection
设置 WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
num1 = WorkRng.Range("A1").Value
num2 = WorkRng.Range("A" & WorkRng.Rows.Count).Value
间隔 = num2 - num1
ReDim outArr(1 To interval + 1, 1 To 2)
对于 WorkRng 中的每个 Rng
dic(Rng.Value) = Rng.Offset(0, 1).Value
下一页
For i = 0 To 区间
outArr(i + 1, 1) = i + num1
如果 dic.Exists(i + num1) 那么
输出数组 (i + 1, 2) = dic(i + num1)
其他
outArr(i + 1, 2) = ""
结束如果
下一页
使用 WorkRng.Range("A1").Resize(UBound(outArr, 1), UBound(outArr, 2))
.Value = outArr
。选择
结束
END SUB


或者如果你有 Kutools for Excel,你可以试试这个功能:
查看附件 (2 / 5)
该评论由网站上的主持人最小化
非常感谢,我都试过了,第一个,因为我有 1 行数据,我对所有 500 行都这样做并且什么都不做,我认为它可能对使用的行有限制,并且例如,当我只选择前 500 行时,它不会创建缺失的行,而是替换缺失数据的行。

我遇到的另一个问题是我的时间数据也有日/月/年 HH: MM: SS
该评论由网站上的主持人最小化
从 2 到 3,它创建了我想要的缺失数据,但是 03/01/2016 的值被消除了,并且有些时间数据被消除了一些我也不想要的
查看附件 (3 / 5)
该评论由网站上的主持人最小化
抱歉 VBA 代码没有帮助你,我找不到适用于日期和时间格式的方法。 如果你最终找到解决方案,你能告诉我吗? 谢谢你。
该评论由网站上的主持人最小化
你好,Sunny,我在编辑代码方面取得了一些成功(我将 num1 行更改为 A2 并使用 WorkRng.Range("A2:A100000").Resize(UBound(outArr, 1), UBound(outArr, 2) ):


子 InsertValueBetween()
'更新 20130825
将 WorkRng 调暗为范围
昏暗范围
Dim outArr 作为变体
Dim dic 作为变体
设置 dic = CreateObject("Scripting.Dictionary")
'错误继续下一步
xTitleId = "KutoolsforExcel"
设置 WorkRng = Application.Selection
设置 WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
num1 = WorkRng.Range("A2").Value
num2 = WorkRng.Range("A" & WorkRng.Rows.Count).Value
间隔 = num2 - num1
ReDim outArr(1 To interval + 1, 1 To 2)
对于 WorkRng 中的每个 Rng
dic(Rng.Value) = Rng.Offset(0, 1).Value
下一页
For i = 0 To 区间
outArr(i + 1, 1) = i + num1
如果 dic.Exists(i + num1) 那么
输出数组 (i + 1, 2) = dic(i + num1)
其他
outArr(i + 1, 2) = ""
结束如果
下一页
使用 WorkRng.Range("A2:A100000").Resize(UBound(outArr, 1), UBound(outArr, 2))
.Value = outArr
。选择
结束
END SUB



我给你看图表,它不能 100% 工作,因为它没有创建从 A1 到 A2 的时间
查看附件 (1 / 5)
该评论由网站上的主持人最小化
这是我的问题,我猜这是一个非常困难的问题.. 是否有一个 vba 代码在过滤列下方添加一个新行并将前三个单元格复制到添加的新行中并继续这样做,直到用户停止点击“进入”并取消过滤过滤的单元格?
该评论由网站上的主持人最小化
您的问题有点难和复杂,您可以将问题放在我们的论坛中,也许有人可以回答您。 https://www.extendoffice.com/forum.html
该评论由网站上的主持人最小化
嗨,我只是想问一下如何添加行,如果代码是当单元格已经有数据时应该添加行(这是一个有很多工作表的 excel 工作簿:) 谢谢!
该评论由网站上的主持人最小化
也许这个 vba 代码可以帮助你。 如果上面的行不为空,它将添加行

子帮助()
暗算只要
对于 count = ActiveSheet.UsedRange.Rows.count 到 1 步 -1
如果 Information.IsEmpty(Cells(count, 1)) = False Then Rows(count + 1).Insert
下一个计数
END SUB
该评论由网站上的主持人最小化
嗨,当单元格中的前 4 位数字发生变化时,我正在尝试使用此代码输入一行(如果可能的话)

例如,
2222A
2222B
2223K


该行将在 2222B 之后插入,因为第三个数字是 3 而不是 3

谢谢你们!!
该评论由网站上的主持人最小化
嗨,谢谢你,但是我有另一种情况,我需要在不为零的值下插入一个 cingle 单元格。 感谢任何建议。
该评论由网站上的主持人最小化
嗨,吉娜,我刚刚找到在非空白单元格上方插入空白行的代码,也许有人可以调整它以满足您的需要。

子插入_行()
将 LR 调暗,r 只要

Application.ScreenUpdating = False
LR = Range("A" & Rows.Count).End(xlUp).Row
对于 r = LR 到 1 步 -1
如果 Len(Range("A" & r).Value) > 0 那么
行(r).插入
结束如果
下一个
Application.ScreenUpdating =真
END SUB

来自 https://www.mrexcel.com/forum/excel-questions/548675-adding-blank-line-above-row-non-blank-cell.html
该评论由网站上的主持人最小化
你好,这个很有帮助。 如果我想在下面添加两行并且想要更多值怎么办。 例如,我想在值 26/04/2019 之后添加两行,然后在 03/04/2019 之后添加两行,然后列表继续。 如何继续添加到 vba? 对不起,我还是个初学者。 提前致谢。
该评论由网站上的主持人最小化
嗨,Safa,也许你可以试试 Kutools 的插入空白行/列实用程序。
查看附件 (1 / 5)
该评论由网站上的主持人最小化
子空白行()
'Updateby20150203
昏暗范围
将 WorkRng 调暗为范围
出错时继续下一步
xTitleId = "KutoolsforExcel"
设置 WorkRng = Application.Selection
设置 WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type: = 8)
设置 WorkRng = WorkRng.Columns(1)
xLastRow = WorkRng.Rows.Count
Application.ScreenUpdating = False
对于 xRowIndex = xLastRow 到 1 步 - 1
设置 Rng = WorkRng.Range("A" & xRowIndex)
如果Rng.Value =“ 0”,则
Rng.EntireRow.Insert 移位:= xlDown
结束如果
下一页
Application.ScreenUpdating =真
END SUB


每次我在单元格中放入一些东西时,我都需要它来工作,并且还有更多变量。 我的意思是,如果我将 2 放入单元格中,我需要它插入 2 行而不仅仅是 1。
该评论由网站上的主持人最小化
我需要宏根据数量列添加行,如果数量大于1,它会插入行数-1。 如果数量为 5,则在其下方插入 4 行并填写数据并将调用的数量从每行 5 更改为 1。 跳过所有数量 1。
该评论由网站上的主持人最小化
告诉我我想根据单元格值添加特定行数的代码。 例如,如果单元格包含数字 18,则应在我想要的位置自动添加 18 行,并且表格/单元格的其余部分应向下移动。
该评论由网站上的主持人最小化
非常感谢这一点,真的是一个巨大的节省时间。 是否可以添加一些代码,允许我在新行中插入一些文本。 例如,我根据目标值“x”插入新行,然后我想在目标值“x”下方的单元格中添加文本值“y”。 这可能吗?
该评论由网站上的主持人最小化
你好。 该宏对我有用,但是有没有办法始终将范围/参数设置为始终设置为 J 列,而输入框根本不出现? 我希望它跳过输入框出现的步骤。 此外,我已确保在此宏之前,我之前的宏的最后一行是 Range("J:J").Select 以确保已选择整个 J 列。
这是我迄今为止一直在使用的。

昏暗范围
将 WorkRng 调暗为范围
出错时继续下一步
xTitleId = "点击确定继续"
设置 WorkRng = Application.Selection
设置 WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
设置 WorkRng = WorkRng.Columns(1)
发送键“~”
xLastRow = WorkRng.Rows.Count
Application.ScreenUpdating = False
对于 xRowIndex = xLastRow 到 1 步 -1
设置 Rng = WorkRng.Range("A" & xRowIndex)
If Rng.Value = "New GMS Line" Then
Rng.EntireRow.Insert Shift:=xlDown
结束如果
下一页


我尝试在某些步骤之间使用 SendKeys“~”命令尝试让它在输入框出现时自动按 Enter,但这也没有奏效。 我不确定在宏中究竟在哪里使用 SendKeys 命令,或者它是否甚至可以与输入框一起使用!
该评论由网站上的主持人最小化
请帮小美有一个数据。我有一个月的时间数据,因为我必须根据转义时间插入一个空行
查看附件 (1 / 5)
该评论由网站上的主持人最小化
嗨,hr.babu08,抱歉回复晚了。 我猜您想插入空白行或为丢失的序列数据做一个标记,如果是这样,您可以尝试 Kutools for Excel 的 Find Missing Sequence Number 功能。这是有关该功能的教程: https://www.extendoffice.com/product/kutools-for-excel/excel-find-missing-numbers-in-sequence.htmlIf 您需要其他方法为缺失序列插入空白行,请访问:https://www.extendoffice.com/documents/excel/3522-excel-find-missing-dates.html</div>;
该评论由网站上的主持人最小化
嗨,
这个marco可以用于/改变有色细胞吗?
我需要在每个彩色系列的末尾插入至少 10 行。
THX!
该评论由网站上的主持人最小化
我需要为特定的单元格内容添加带有值的特定行,但不确定如何执行此操作而无需手动执行超过 3800 行以上的操作

例如:A1 = 节点 1
我需要插入一行并输入值 Scanner
输入另一行并输入值打印机
另一行具有价值 CD。
等等
该评论由网站上的主持人最小化
嗨,克里斯,这是一个 VBA 可以帮助您在值等于 Node1 时自动插入三行(扫描仪、打印机、CD)。
Sub BlankLine()
'ByExtendoffice
Dim Rng As Range

Dim WorkRng As Range

Dim xRngI As Range

On Error Resume Next

xTitleId = "KutoolsforExcel"

Set WorkRng = Application.Selection

Set WorkRng = Application.InputBox("Select a range", xTitleId, WorkRng.Address, Type:=8)

Set WorkRng = WorkRng.Columns(1)

xLastRow = WorkRng.Rows.Count

Application.ScreenUpdating = False

For xRowIndex = xLastRow To 1 Step -1

  Set Rng = WorkRng.Range("A" & xRowIndex)

  If Rng.Value = "Node1" Then

    Rng.Offset(1, 0).EntireRow.Insert Shift:=xlDown

    Rng.Offset(1, 0).EntireRow.Insert Shift:=xlDown

    Rng.Offset(1, 0).EntireRow.Insert Shift:=xlDown

    Rng.Offset(1, 0).Value = "Scanner"

    Rng.Offset(2, 0).Value = "Printer"

    Rng.Offset(3, 0).Value = "CD"

  End If

Next

Application.ScreenUpdating = True

End Sub

请让我知道是否适合您。
这里还没有评论
加载更多
留下你的意见
以访客身份发帖
×
评价此帖子:
0   产品特性
建议地点

关注我们

版权所有 © 2009 - extendoffice.com。 | 版权所有。 供电 ExtendOffice。 | 网站地图
Microsoft和Office徽标是Microsoft Corporation在美国和/或其他国家的商标或注册商标。
受Sectigo SSL保护