2017-07-20 40 views
1

我正在尋找爲我的序列中的每個錯過的數字插入一行。例如,我有「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

你可以使用拆分。此代碼假定您的字符串的第一個和第三個元素是常量。

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 
+0

有沒有辦法讓它只看標籤號碼的數字值?我剛剛意識到一些單元包含標籤,如「35E-1401AK」,後跟「35E-1408」。當代碼針對這兩個標籤運行時,我應該得到一個插入的行,但是我得到一個錯誤。除此之外,它似乎在工作 –

+0

如果你閱讀斯普利特,你會解決它。在35C-1412-K01的原始示例中,v1(0)= 35C,v1(1)= 1412,v(2)= K01。它返回你指定分隔符的數組。所以是的,如果只有一個連字符就會出錯。 – SJR

+0

謝謝你的幫助! –

相關問題