【问题标题】:How to Insert # of Rows based on Value Criteria in Column如何根据列中的值标准插入行数
【发布时间】:2020-03-18 16:58:11
【问题描述】:

我花了几个小时试图找到正确的代码。我已经有一个“潜艇”,这是潜艇的下一步。

如果 Column("C:C") ,我有一个数据集,我想在其中插入 3 行

进一步了解模块,我有: 暗淡为工作表 设置 ws = Worksets("Report1")

我不知道我是否需要设置另一个 DIM.. 这是我目前所拥有的:

'在$ Share

With ws
    If Range("C:C").Value < "1.0" Then
    Rows.EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    End If
End With

但我收到运行时错误“13”: 类型不匹配

感谢您的帮助!

【问题讨论】:

  • 您必须遍历 C 列中的单元格...
  • ...因为您要插入行,所以从下往上的工作会更容易。
  • 如果没有点,With 毫无用处。

标签: excel vba if-statement insert


【解决方案1】:

添加或删除行时,最好从工作表的底部到顶部:

Dim i As Long, lr As Long, ws As Worksheet

Set ws = ActiveSheet

lr = ws.Cells(ws.Rows.Count, 3).End(xlUp).Row

For i = lr To 2 Step -1
    With ws.Cells(i, 3)
        If Len(.Value) > 0 And .Value < 1 Then
            .Offset(1, 0).Resize(3, 1).EntireRow.Insert
        End If
    End With
Next i

编辑:修改后的描述

For i = 2 To lr
    With ws.Cells(i, 3)
        If Len(.Value) > 0 And .Value < 1 Then
            .Offset(1, 0).Resize(3, 1).EntireRow.Insert
            Exit For
        End If
    End With
Next i

Dim i As Long, n As Long, lr As Long, ws As Worksheet
Dim c As Range

EDIT2:在

Set ws = ActiveSheet
Set c = ws.Cells(ws.Rows.Count, 3).End(xlUp)
Do While c.Row > 1
    If Len(c.Value) > 0 And c.Value < 1 Then
        'insert 3 rows above
        For n = 1 To 3
            c.EntireRow.Insert
            Set c = c.Offset(-1, 0) '<<adjust for added row
        Next n
        Exit Do '<< stop checking
    End If
    Set c = c.Offset(-1, 0)
Loop

【讨论】:

  • Tim,在Offset 中使用0 和在Resize 中使用1 只是最佳实践吗?
  • 我不能说最佳实践是什么——即使不是“必需”,我也喜欢明确说明……这样您就不必记住所有必需的规则。跨度>
  • 我错过了一些信息......这段代码的问题是它在底部添加了 3 行。我有从最大到最小过滤的行,我只需要从顶部开始的第一个
  • @TimWilliams 谢谢!我想了解“i”,如果我不想让这个循环,请只在第一次出现时添加 3 行?
猜你喜欢
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 2021-04-30
  • 2012-12-21
相关资源
最近更新 更多