【问题标题】:Excel VBA compare, add row and fill inExcel VBA比较,添加行并填写
【发布时间】:2018-10-19 14:32:31
【问题描述】:

这是我的数据示例:

A1。 1

A2。 2

A3。 5

A4。 7

A5。 8

A6。 9

A7。 10

我想要做的是选择一个范围(例如从 A2 到有数据的行的末尾),如果序列中的下一个数字不等于前一个数字 + 1,则插入一行。填写该数字(前一个数字 +1) 进入刚刚创建的行,然后跳转到下一行并重新计算。这将一直持续到程序遇到空值。

这就是我设想的伪

  Range = select range in column

  For range when value is not null

  If A3 <> value in A2 +1

     Insert row below A2
     Insert value into new A2 (should Now be blank) as sum of A2 + 1
     Then go to next row
     Go back to blank check for loop 
  Else

      Go to next row
      Go back to blank check

  End for

我不完全确定我是否遗漏了什么,但我在 VBA 中的循环很糟糕,因为我上次使用它已经很多年了。 抱歉格式化,这是在手机上完成的

提前致谢!

【问题讨论】:

    标签: excel vba compare


    【解决方案1】:

    您的代码逻辑相当合理,但如果您打算编写更多程序,那么练习实际语法永远不会有坏处。我已经对其进行了更改,以便它检查单元格是否为空,我假设这就是您所说的 Null 的意思,但如果您实际上是指 NULL,那么您可以将 isempty 更改为 isnull。我有点允许你选择一个范围,但不是真的。它要求您进入代码并将maxrow 更改为您希望查看的最后一行。请记住,如果您的代码之间缺少数字,则最多只能查找 100 个值,包括宏放置的值。

    如果您希望用户能够更轻松地让用户输入最后一行编号,请考虑使用InputBox

    Option Explicit
    
    Sub numberfiller()
    
        Dim i As Long
        Dim maxrow As Long
    
        i = 2
        maxrow = 100
        With ThisWorkbook.Worksheets(1)
    
            While Not IsEmpty(.Range("A" & i).Value) And i < maxrow
                If Not .Range("A" & i).Value = .Range("A" & i - 1).Value + 1 Then
                    .Range("A" & i).EntireRow.Insert shift:=xlDown
                    .Range("A" & i).Value = .Range("A" & i - 1).Value + 1
                Else
                    i = i + 1
                End If
            Wend
        End With
    End Sub
    

    【讨论】:

    • 哇,没想到这么顺利。下次我将使用实际语法而不是伪语法,并尝试进一步澄清。非常感谢,我会多练习的。 vba 和 C 之间的差异有时会毁了我的一天啊哈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多