返回列表 上一主題 發帖

[發問] 如何建立只選取''非隱藏儲存格''的循環語句

[發問] 如何建立只選取''非隱藏儲存格''的循環語句

本帖最後由 HSINLI 於 2015-7-8 21:53 編輯

如題,程式碼見附件可以執行,但計算出來都不是想要的結果,
一一檢查發現好像是循環語句將篩選結果的“隱藏儲存格”的值也算進去了,但我只需要非隱藏儲存格的值;
自己有試過一些方法offset、resize...但無法解決,故想要來請教一下各位前輩,謝謝!

這程式主要目的是要將交易紀錄(工作表a)做整理,整理出非重複的項目,並計算各非重複項目現有的股數與成本
我的想法是:
先利用AdvancedFilter,將非重複的項目貼於另一工作表b
藉由工作表b有的項目,去利用循環語句一一篩選出工作表a裡該項目的重複項目
然後利用IF判斷是bought還是sold,bought為+,sold為-,再利用循環語句加總至工作表b的儲存格內

如果有更好的寫法就更感激了,謝謝!
  1. Sub 現有交易部位整理()

  2. Dim po As Worksheet
  3. Dim 交 As Worksheet
  4.    
  5.     Set po = Sheets("position")
  6.     Set 交 = Sheets("交易紀錄")
  7.    
  8.     Application.ScreenUpdating = False
  9.    
  10.     '過濾出所有重複的symbol,並將之貼至sheets("position")的a5處
  11.       交.Range("d:d").AdvancedFilter xlFilterInPlace, Range("d:d"), , True
  12.       交.Range("d:d").SpecialCells(xlCellTypeVisible).Copy po.Range("a5")
  13.     '刪除標題
  14.       po.Range("a5").EntireRow.Delete
  15.    
  16.     '在Sheets("交易紀錄")篩選出在Sheets("交易紀錄")上的symbol,並加以計算QTY貼於Sheets("交易紀錄")
  17.     Dim i As Integer
  18.     Dim last As Integer
  19.     Dim ipo As Integer
  20.     Dim lastpo As Integer
  21.    
  22.     lastpo = po.Range("a5").End(xlDown).Row
  23.    
  24.     For ipo = 1 To lastpo
  25.       '利用貼至Sheets("position")的不重複物件,一一來篩選原表格所含有該物件的所有項目
  26.       交.ListObjects("表格1").Range.AutoFilter field:=4, Criteria1:=po.Range("a" & ipo)
  27.       
  28.       '"想要"得到篩選出來項目的數目(不包括隱藏)
  29.       last = 交.Range("d2").End(xlDown).Row
  30.       For i = 1 To last
  31.       '如果在ACT.那格是bought的話qty得值為正,ACT.那格是Sold的話qty的值為負,循環加總至Sheets("position")對應的總量儲存格
  32.              If 交.Range("c" & i + 1) = "Bought" Then
  33.                  po.Range("c" & ipo + 4) = po.Range("c" & ipo + 4) + 交.Range("e" & i)
  34.              ElseIf 交.Range("c" & i + 1) = "Sold" Then
  35.                   po.Range("c" & ipo + 4) = po.Range("c" & ipo + 4) - 交.Range("e" & i)
  36.               End If
  37.             Next i
  38.        Next ipo
  39.     Application.ScreenUpdating = True

  40. End Sub
複製代碼
活頁簿3.xlsx.zip (10.08 KB)

[版主管理留言]
  • GBKEE(2015/7/9 14:01): 依你的附檔測試沒有 1004的錯誤,請上傳有巨集(XLSM)的檔案

了解了!!
利用行高>0來篩選出非隱藏的儲存格
學到一課,謝謝指教!
g大的寫法晚上再慢慢研究!

還想再請問一下,
程式碼這部分的執行,常常在
po.Range("c" & ipo) = po.Range("c" & ipo) + 交.Range("e" & i)
這句出現“1004”'range'方法('_worksheet'物件)失敗
有時會發生有時又不會,不知是何種緣故?或哪裡需要改進?
  1. For i = 2 To 交.Range("d2").End(xlDown).Row
  2.             If 交.Range("c" & i).RowHeight Then 'RowHeight > 0
  3.                 If 交.Range("c" & i) = "Bought" Then
  4.                     po.Range("c" & ipo) = po.Range("c" & ipo) + 交.Range("e" & i)
  5.                 ElseIf 交.Range("c" & i) = "Sold" Then
  6.                     po.Range("c" & ipo) = po.Range("c" & ipo) - 交.Range("e" & i)
  7.                 End If
  8.             End If
  9.         Next i
複製代碼

TOP

在這�堙耤�

活頁簿23.xlsm.zip (19.44 KB)

TOP

可以了!!謝謝g大
想請問如果發生這種錯誤的話,要怎麼找出問題在哪裡啊!?
想說以後自己先嘗試處理就好,不用麻煩您

TOP

        靜思自在 : 犯錯出懺悔心,才能清淨無煩惱。
返回列表 上一主題