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代码根据两列条件插入新行的主要内容,如果未能解决你的问题,请参考以下文章

Excel根据标题比较两列以查找同一行中的匹配或差异

Excel VBA代码过滤两列并提取数据

根据条件将两列与 nan 连接(python)

如何根据条件找到至少两列?

根据相同的条件语句选择两列SQL

根据条件将一列转换为两列