【问题标题】:vba code to insert new row based on two columns conditionvba代码根据两列条件插入新行
【发布时间】: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)。

标签: excel vba if-statement conditional-statements


【解决方案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

(我添加了“_”只是为了将其包装到下一行以提高可读性)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2020-09-08
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 2020-02-22
    相关资源
    最近更新 更多