2016-11-23 39 views
0

我當前正在嘗試在VBA上創建一個代碼,以便按升序對我的值進行排序。在我的程序找到最小值並將其添加到另一列「B」後,我想讓最小值的單元格消失,以便找到我的新最小值並在初始值下將其輸入到「B」列。這是我的代碼。由於某些原因,它不會刪除單元格,並給我一個「對象所需的錯誤」。請幫助通過刪除每個循環發現下一個最小值的最小值來升序排列

Option Explicit 
Sub decreasing() 
Dim a As Range, b As Range 
Dim i As Integer 
Dim n As Long 
Dim minimum As Long 

n = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row 

i = 1 

While Cells(i, "A") <> "" 
i = i + 1 
For i = 1 To n 

    Set a = Range(Cells(1, "A"), Cells(n, "A")) 

Cells(i, "B") = Application.WorksheetFunction.Min(a) 

Application.Min(a).Cells.Delete 



    Next i 
Wend 


End Sub 
+2

'Min()'返回一個值,而不是範圍對象。您需要使用Find()或Match()以Minimum值定位單元格,然後將其刪除。你可能會發現在你的循環中使用'Application.Small(a,i)'更容易:那麼你不需要刪除你已經複製的單元格。 –

+0

此外,您還需要決定是否要使用早期綁定的'Application.WorksheetFunction.Min'或後期綁定的'Application.Min'函數。請一致! –

+0

歡迎來到Stack Overflow!它看起來像你需要學習使用調試器。請幫助一些[互補調試技術](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。如果您之後仍然有問題,請隨時返回更多詳情。 –

回答

1

Min()返回一個值,而不是範圍對象。您需要使用Find()Match()來定位具有最小值的單元格,然後將其刪除。您可能會發現它更容易使用Application.Small(a, i)你的循環中:那麼你就不會需要刪除您已經複製

Sub decreasing() 

    Dim a As Range, b As Range 
    Dim i As Integer 
    Dim n As Long 
    Dim minimum As Long 

    n = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row 
    Set a = Sheet1.Range(Sheet1.Cells(1, "A"), Sheet1.Cells(n, "A")) 

    For i = 1 To Application.Count(a) 
     Sheet1.Cells(i, "B").Value = Application.Small(a, i) 
    Next i 

End Sub 
0

,因爲你選不重新發明輪子,並使用Sort()方法細胞Range object:

Sub decreasing2()   
    With Sheet1 
     With .Range("A1", .Cells(Rows.COUNT, 1).End(xlUp)) 
      .Offset(, 1).Value = .Value 
      .Offset(, 1).Sort key1:=Range("B1"), order1:=xlAscending, Header:=xlYes ' 
     End With 
    End With 
End Sub 
相關問題