2017-02-06 72 views
0

我有部分代碼供VBA運行,並在我的數據中發現非連續數字後添加空白行。但是,我的數據包含字母和代碼編寫方式,它只比較整數序列。有沒有辦法操縱代碼來只選擇部分單元格並比較該部分?選擇Excel單元格(未完成單元格)的一部分並將其與其他單元格進行比較

例如我有以下順序:

100-CG-000-10008 
100-CG-000-10009 
100-CG-000-10011 
100-CG-000-10012 

和想法是讓VBA後100-CG-000-10009插入空行由於它不再在那之後按順序。我正在使用的代碼是:

Sub InsertNullBetween() 
    'Update 20130829 
    Dim WorkRng As Range 
    Dim Rng As Range 
    Dim outArr As Variant 
    Dim dic As Variant 
    Set dic = CreateObject("Scripting.Dictionary") 
    'On Error Resume Next 
    xTitleId = "KutoolsforExcel" 
    Set WorkRng = Application.Selection 
    Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) 
    num1 = WorkRng.Range("A1").Value 
    num2 = WorkRng.Range("A" & WorkRng.Rows.Count).Value 
    interval = num2 - num1 
    ReDim outArr(1 To interval + 1, 1 To 2) 
    For Each Rng In WorkRng 
    dic(Rng.Value) = Rng.Offset(0, 1).Value 
    Next 
    For i = 0 To interval 
    If dic.Exists(i + num1) Then 
     outArr(i + 1, 1) = i + num1 
     outArr(i + 1, 2) = dic(i + num1) 
    Else 
     outArr(i + 1, 1) = "" 
     outArr(i + 1, 2) = "" 
    End If 
    Next 
    With WorkRng.Range("A1").Resize(UBound(outArr, 1), UBound(outArr, 2)) 
    .Value = outArr 
    .Select 
    End With 
End Sub 

有沒有什麼辦法可以修改代碼只查找包含第3次之後,整數單元的最後部分「 - 」?

回答

0

編輯一個代碼只插入線和處理任何差距

您可以使用此

Option Explicit 

Sub InsertNullBetween() 
    Dim i As Long, gap As Long 

    With Range("A1", Cells(Rows.count, 1).End(xlUp)) 
     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 
+0

@ Pvelez_3,你有沒有通過它? – user3598756

+0

hi @ user3598756,你給我的代碼的第一部分工作,但如果我有一個跳過了多個數字的數字序列,它不會爲每個跳過的數字添加一個空行。我怎樣才能做到這一點?例如,如果序列是1,2,3,4,7,則需要添加空白行5和行6的代碼。 –

+0

代碼不會被分成兩部分,而有兩個代碼:1st只有1個數字的間隔,第二個差距大於1.所以,如果你的情況是有大於1的間隙,你必須使用第二個代碼。試着讓我知道 – user3598756

0

您的代碼對於任務來說看起來太複雜了。在這裏,我只會給你提取繼上次的最後一個數字的方式「 - 」從你的細胞:

Function ExtractNumber(r As Range) As Long 
    ExtractNumber = Mid(r.Value, 1 + InStrRev(r.Value, "-")) 
End Function 

假設您目前的代碼工作好,如果那些純粹的數字,你可以使用這個功能的細胞自定義它。例如:

num1= ExtractNumber(WorkRng.Range("A1")) 
num2 = ExtractNumber(WorkRng.Range("A" & WorkRng.Rows.Count)) 
... 
dic(ExtractNumber(Rng)) = Rng.Offset(0, 1).Value 

等。

相關問題