Board logo

標題: [發問] 我想要做sheet的欄位做排序並刪除重覆的列 [打印本頁]

作者: kasl    時間: 2014-2-10 23:18     標題: 我想要做sheet的欄位做排序並刪除重覆的列

我的程式寫完回測了 現在要做匯總的整理
接下來我想要做二件事
1. 依照 B 做排序
2. 從最後一行往回找 若是相同股票 & 出場日一樣 那麼則刪除先找到的那個

請問我要該怎麼寫成 vba,請給我些提點。
謝謝~
作者: GBKEE    時間: 2014-2-11 09:56

回復 1# kasl
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim i As Integer, Rng As Range
  4.     With ActiveSheet  'Sheets("sheet1")
  5.         .UsedRange.Sort Key1:=.Range("A2"), Order1:=xlAscending, Key2:=.Range( _
  6.         "E2"), Order2:=xlAscending, Header:=xlYes
  7.         i = 2
  8.         Do While .Cells(i, "E") <> ""
  9.             If .Cells(i, "b") & .Cells(i, "E") = .Cells(i + 1, "b") & .Cells(i + 1, "E") Then
  10.                 If Rng Is Nothing Then
  11.                     Set Rng = .Cells(i, "E").Offset(1)
  12.                 Else
  13.                     Set Rng = Union(Rng, .Cells(i, "E").Offset(1))
  14.                 End If
  15.             End If
  16.             i = i + 1
  17.         Loop
  18.         If Not Rng Is Nothing Then
  19.             Rng.EntireRow.Delete
  20.             .UsedRange.Sort Key1:=.Range("C2"), Order1:=xlAscending, Key2:=.Range( _
  21.             "A2"), Order2:=xlAscending, Header:=xlYes
  22.         End If
  23.     End With
  24. End Sub
複製代碼

作者: kasl    時間: 2014-2-11 21:44

回復 2# GBKEE

謝謝您的回答 我剛試了一下 可以用 不過我發現有另一個問題
用個股代號、進場日期來排序
刪除列應該是2個條件
1. 當日與下一日 個股名稱一樣 & 出場日一樣
2. 個股名稱一樣 當日進場還沒出場 下一筆就進場 這是不對的 (我昨天忘了考慮到這個)

剛自己改了改 應該ok 只是程式寫的有點醜
還望請你指點一二

Sub Ex()
    Dim i As Integer, Rng As Range
   
    'With ActiveSheet  'Sheets("sheet1")
    With Sheets("投資匯總表")
   
        .UsedRange.Sort Key1:=.Range("A2"), Order1:=xlAscending, Key2:=.Range( _
        "C2"), Order2:=xlAscending, Header:=xlYes
        
        i = 2
        
        Do While .Cells(i, "E") <> ""
            If (.Cells(i, "b") & .Cells(i, "E") = .Cells(i + 1, "b") & .Cells(i + 1, "E")) Then
                If Rng Is Nothing Then
                    Set Rng = .Cells(i, "E").Offset(1)
                Else
                    Set Rng = Union(Rng, .Cells(i, "E").Offset(1))
                End If
            End If
            i = i + 1
        Loop
        
        If Not Rng Is Nothing Then
            Rng.EntireRow.Delete
            ' 我自己寫的 主要是處理考慮點2
            i = 2
            Do While .Cells(i, "E") <> ""
              If .Cells(i, "b") = .Cells(i + 1, "b") Then
                If .Cells(i, "E") > .Cells(i + 1, "C") Then
                  .Rows(i + 1).Delete Shift:=xlUp
                i = i - 1
                End If
              End If
              i = i + 1
            Loop
            
            .UsedRange.Sort Key1:=.Range("C2"), Order1:=xlAscending, Key2:=.Range( _
            "A2"), Order2:=xlAscending, Header:=xlYes
        End If
        
    End With
   
End Sub
作者: GBKEE    時間: 2014-2-12 07:35

回復 3# kasl
  1. Option Explicit
  2. Sub Ex()
  3.     Dim i As Integer, Rng As Range
  4.     With ActiveSheet  'Sheets("sheet1")
  5.         .UsedRange.Sort Key1:=.Range("A2"), Order1:=xlAscending, Key2:=.Range( _
  6.         "E2"), Order2:=xlAscending, Header:=xlYes
  7.         i = 2
  8.         Do While .Cells(i, "E") <> ""
  9.             If .Cells(i, "b") = .Cells(i + 1, "b") Then '當日與下一日 個股名稱一樣
  10.                 If .Cells(i, "E") = .Cells(i + 1, "E") Or .Cells(i, "E") > .Cells(i + 1, "C") Then
  11.                   '.Cells(i, "E") = .Cells(i + 1, "E")-> 出場日一樣
  12.                   '.Cells(i, "E") > .Cells(i + 1, "C")-> 當日進場還沒出場 下一筆就進場
  13.                     If Rng Is Nothing Then
  14.                         Set Rng = .Cells(i, "E").Offset(1)
  15.                     Else
  16.                         Set Rng = Union(Rng, .Cells(i, "E").Offset(1))
  17.                     End If
  18.                 End If
  19.             End If
  20.             i = i + 1
  21.         Loop
  22.         If Not Rng Is Nothing Then
  23.             Rng.EntireRow.Delete
  24.             .UsedRange.Sort Key1:=.Range("C2"), Order1:=xlAscending, Key2:=.Range( _
  25.             "A2"), Order2:=xlAscending, Header:=xlYes
  26.         End If
  27.     End With
  28. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)