在序列

时间:2017-07-20 13:39:03

标签: excel excel-vba vba

我希望在序列中为每个遗漏的数字插入一行。例如,我有“35C-1412-K01”和“35C-1421”,并且想法是在1412到1421之间为每个错过的数字添加一行。但是之前我已经这样做了,我使用的代码不起作用对于这个,因为代码比较了单元格中的最后5个字符,而我正在查看该单元格的中间数字。我的想法是可能使用“MID”属性而不是“RIGHT”属性,但我在实现它时遇到了麻烦。我还有一些单元格在第一个“ - ”之前有三个以上的字符,即“35TC-1411”,这样如果只考虑只有三个字符,可能会抛弃代码。非常感谢任何帮助。

我在上面引用的代码:

Option Explicit
Sub InsertNullTest()
Dim i As Long, gap As Long
Dim WorkRng As Range

On Error Resume Next
Set WorkRng = Application.InputBox(Prompt:="Range To Check", Title:="Select a Range", Default:=Selection.Address, Type:=8)
On Error GoTo 0
If WorkRng Is Nothing Then Exit Sub '<--| check user hasn't canceled the dialog box
With WorkRng
    For i = .Rows.Count To 2 Step -1
        gap = Right(.Cells(i), 5) - Right(.Cells(i - 1), 5)
        If gap > 1 Then .Cells(i).Resize(gap - 1).Insert xlDown
    Next
End With
End Sub

1 个答案:

答案 0 :(得分:1)

你可以使用Split。此代码假定字符串的第一个和第三个元素是常量。

Sub InsertNullTest()

Dim i As Long, v1, v2, j As Long
Dim WorkRng As Range

On Error Resume Next
Set WorkRng = Application.InputBox(Prompt:="Range To Check", Title:="Select a Range", Default:=Selection.Address, Type:=8)
On Error GoTo 0
If WorkRng Is Nothing Then Exit Sub '<--| check user hasn't canceled the dialog box

With WorkRng
    For i = .Rows.Count To 2 Step -1
        v1 = Split(.Cells(i), "-")
        v2 = Split(.Cells(i - 1), "-")
        If Val(v1(1) - v2(1)) > 1 Then
            .Cells(i).Resize(Val(v1(1) - v2(1)) - 1).Insert xlDown
            For j = 1 To Val(v1(1) - v2(1)) - 1
                .Cells(i - 1).Offset(j) = v2(0) & "-" & Val(v2(1)) + j & "-" & v2(2)
            Next j
        End If
    Next
End With

End Sub