vba代码根据两列条件插入新行
Posted
技术标签:
【中文标题】vba代码根据两列条件插入新行【英文标题】:vba code to insert new row based on two columns condition 【发布时间】:2022-01-19 00:42:28 【问题描述】:当excel中两列单元格的值发生变化时,我想插入一行 例如,F 列和 G 列,其中 F 的字符串值为“Buy”和“Sell”,G 列的字符串值为“D”和“S”。
我的代码仅在一个列条件下创建一个空白行,即当值更改时添加一个空白行。
Sub InsertRowsAtValueChange()
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)
Application.ScreenUpdating = False
For i = WorkRng.Rows.Count To 2 Step -1
If WorkRng.Cells(i, 1).Value <> WorkRng.Cells(i - 1, 1).Value Then
WorkRng.Cells(i, 1).EntireRow.Insert
End If
Next
Application.ScreenUpdating = True
End Sub
但是当列被排序并且最后一个值是 “买” - “D” “买” - “S” “卖出” - “D” “卖出” - “S”
图片显示了我想要实现的目标。Code should work to create the bottom requirement
【问题讨论】:
似乎您想在Cells(i, 1)
和Cells(i - 1, 1)
中使用与1
不同的列号。根据您的屏幕截图,该行似乎仅在 G 列更改时才插入,但您可以添加一个条件来检查 F 列是否也发生更改(使用 Or
)。
【参考方案1】:
看起来很简单,你只需要在你的 if 条件中添加一个 OR 子句:
Sub InsertRowsAtValueChange()
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)
Application.ScreenUpdating = False
For i = WorkRng.Rows.Count To 2 Step -1
If WorkRng.Cells(i, 1).Value <> WorkRng.Cells(i - 1, 1).Value _
Or WorkRng.Cells(i, 2).Value <> WorkRng.Cells(i - 1, 2).Value Then
WorkRng.Cells(i, 1).EntireRow.Insert
End If
Next
Application.ScreenUpdating = True
End Sub
(我添加了“_”只是为了将其包装到下一行以提高可读性)
【讨论】:
以上是关于vba代码根据两列条件插入新行的主要内容,如果未能解决你的问题,请参考以下文章