Vba 基于特定文本及其引用插入行
我使用VBA代码根据特定文本及其引用插入下面的行 我正在使用下面的代码来执行此操作Vba 基于特定文本及其引用插入行,vba,excel,Vba,Excel,我使用VBA代码根据特定文本及其引用插入下面的行 我正在使用下面的代码来执行此操作 Sub try() Dim c As Range For Each c In Range("A1:A100") If c.Value Like "*COLLECTION*" Then c.Offset(1, 0).EntireRow.Insert End If Next c End Sub 我希望将文本余额放在集合单元格下方,而不是空白行 我想在最后一个集合条目下面插入余额
Sub try()
Dim c As Range
For Each c In Range("A1:A100")
If c.Value Like "*COLLECTION*" Then
c.Offset(1, 0).EntireRow.Insert
End If
Next c
End Sub
这通常是您希望从最后一个单元格开始的情况,因为插入一行会弄乱下面的所有计数器 换句话说,为每个人设计优雅的服装并不是一个好主意。太难以预料了。一个丑陋的,古老的简单的步骤-1是前进的道路。比如:
Sub Macro1()
For l = 100 To 1 Step -1
If Trim(Cells(l, 1)) = "COLLECTION" And Trim(Cells(l + 1, 1)) = "DEMAND" Then
Rows(CStr(l + 1) & ":" & CStr(l + 1)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(l + 1, 1) = "BALANCE"
End If
Next l
End Sub
刚刚在EXCEL 2013上试用过,似乎可以正常工作。不过,可能还有更优雅的解决方案
编辑:想法如下:
_从最后一行开始(事实上,最后一行无法工作,因此一个优化可以从上一行开始),然后转到第一行
_如果行testes是“COLLECTION”,下一行是“DEMAND”,那么您需要在两者之间插入一个“BALANCE”行。分两次完成,首先插入一个空行,然后在新创建的行中添加“BALANCE”。这通常是您希望从最后一个单元格开始的情况,因为插入一行会弄乱下面的所有计数器 换句话说,为每个人设计优雅的服装并不是一个好主意。太难以预料了。一个丑陋的,古老的简单的步骤-1是前进的道路。比如:
Sub Macro1()
For l = 100 To 1 Step -1
If Trim(Cells(l, 1)) = "COLLECTION" And Trim(Cells(l + 1, 1)) = "DEMAND" Then
Rows(CStr(l + 1) & ":" & CStr(l + 1)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(l + 1, 1) = "BALANCE"
End If
Next l
End Sub
刚刚在EXCEL 2013上试用过,似乎可以正常工作。不过,可能还有更优雅的解决方案
编辑:想法如下:
_从最后一行开始(事实上,最后一行无法工作,因此一个优化可以从上一行开始),然后转到第一行
_如果行testes是“COLLECTION”,下一行是“DEMAND”,那么您需要在两者之间插入一个“BALANCE”行。它分两次完成,首先插入一个空行,然后在新创建的行中添加“BALANCE”。我将使用一个循环,从第1行到列
a
中最后填充的行。然后有一个布尔标记,当当前单元格中的单元格值类似于“*COLLECTION*”
时为true,但如果不是,则为false。因此,如果当前单元格与“*COLLECTION*”
不同,但标记为true,则当前单元格上方的最后一个单元格与“*COLLECTION*”
相似。然后插入一个带有“BALANCE”
的新行,如果该单元格尚未“BALANCE”
subtry()
调光范围
暗淡的光线和长的一样
lRow=1
黯淡如水
Dim bfind为布尔值
使用ActiveSheet
lRowLast=.Cells(.Rows.Count,1).End(xlUp).Row
做
设置c=.Range(“A”&lRow)
如果c.值像“*集合*”那么
bFound=True
那么埃尔塞夫找到了吗
bFound=False
如果c.值“余额”,则
c、 EntireRow.Insert
lRowLast=lRowLast+1
c、 抵销(-1,0)。Value=“余额”
c、 偏移量(-1,0)。Font.Color=RGB(0,0,0)
如果结束
如果结束
lRow=lRow+1
Loop While lRow我将使用从第1行到列a
中最后一个填充行的循环来执行此操作。然后有一个布尔标记,当当前单元格中的单元格值类似于“*COLLECTION*”
时为true,但如果不是,则为false。因此,如果当前单元格与“*COLLECTION*”
不同,但标记为true,则当前单元格上方的最后一个单元格与“*COLLECTION*”
相似。然后插入一个带有“BALANCE”
的新行,如果该单元格尚未“BALANCE”
subtry()
调光范围
暗淡的光线和长的一样
lRow=1
黯淡如水
Dim bfind为布尔值
使用ActiveSheet
lRowLast=.Cells(.Rows.Count,1).End(xlUp).Row
做
设置c=.Range(“A”&lRow)
如果c.值像“*集合*”那么
bFound=True
那么埃尔塞夫找到了吗
bFound=False
如果c.值“余额”,则
c、 EntireRow.Insert
lRowLast=lRowLast+1
c、 抵销(-1,0)。Value=“余额”
c、 偏移量(-1,0)。Font.Color=RGB(0,0,0)
如果结束
如果结束
lRow=lRow+1
Loop While lRow使图片中的样本数据不正确,因为没有空行。我已经更新了我的代码。我想平衡文本的颜色应该是黑色。2.我在DEMAND行中有值,在COLLECTION行中有值,现在我想要BALANCE=DEMAND-COLLECTION,一个条目有两次COLLECTION,因此根据COLLECTION的发生情况,余额应该出现。你能告诉我宏代码吗。我有D2:S2的需求值D1:S1收集值,余额应该在下一行。请在这个问题上帮助我。对于您的第一个问题,请参阅编辑后的代码。请注意插入行后的附加lRowLast=lRowLast+1
。这是必要的,因为lRowLast
是在插入新行之前计算的。你的其他问题是额外的。所以请问一个新问题。在平衡行中显示您使用的实际代码和预期结果。因此,图片中的示例数据不正确,因为没有空行。我已经更新了我的代码。我想平衡文本的颜色应该是黑色。2.我在DEMAND行中有值,在COLLECTION行中有值,现在我想要BALANCE=DEMAND-COLLECTION,一个条目有两次COLLECTION,因此根据COLLECTION的发生情况,余额应该出现。你能告诉我宏代码吗。我有D2:S2的需求值D1:S1收集值,余额应该在下一行。请在这个问题上帮助我。关于你的第一个问题,请参阅