2015-06-18 63 views
0
Sub o() 
Dim x As Integer 
Dim y As Integer 

For y = 2 To 2 
For x = 1 To 600 
    If Cells(x, y).Value = "CD Sector Average" Then 
     Cells(x, y).EntireRow.Select 
     Selection.Insert Shift:=xlDown 
     Cells(x + 2, y).Select 
    End If 
Next x 
Next y 

For y = 2 To 2 
For x = 1 To 600 
    Next x 
    If Cells(x, y).Value = "CS Sector Average" Then 
     Cells(x, y).EntireRow.Select 
     Selection.Insert Shift:=xlDown 
     Cells(x + 2, y).Select 
    End If 
Next x 
Next y 


For y = 2 To 2 
For x = 1 To 600 
    Next x 
    If Cells(x, y).Value = "E Sector Average" Then 
     Cells(x, y).EntireRow.Select 
     Selection.Insert Shift:=xlDown 
     Cells(x + 2, y).Select 
    End If 
Next x 
Next y 
End Sub 

所以我在找的是找到第一個值並添加上面的行,然後繼續搜索下一個值並添加一行。找到一個值並在VBA中插入一行

它所做的是在第一個值之前插入行,直到它達到600範圍,然後宏結束。

這怎麼可以改變,只是運行查找和插入一次,然後移動到下一個值來找到?

+0

這些值的排列順序可以在工作表中找到,但輸入數據會根據它們有多少條目來更改它們在哪個行上找到。 – Greg

回答

0

問題是你的方向不對。例如,在你的循環中,如果它找到第5行(x = 5)中的值,它將添加一行並移動找到該值的行(在此情況下從5到6)。當FOR循環迭代時,它移動到下一行(x = 6)並找到剛纔移動的同一行。
要解決此問題,您需要向後工作。執行此類功能或刪除特定行時,這總是一個好習慣。爲了反向工作,您只需對FOR循環進行一些小修改即可。嘗試將其更改爲:
For x = 600 to 1 Step -1
這告訴Excel從600到1,一次迭代-1,避免出現問題。

相關問題