返回列表 上一主題 發帖

資料區域右下欄位獲取

資料區域右下欄位獲取

如附檔,使用ActiveCell.SpecialCells(xlLastCell).Select 資料區域右下欄位,得到G15欄位(為原資料區域)
因原資料有修改,新區域實際右下應為F13
可是ActiveCell.SpecialCells(xlLastCell).Select 仍至G15
請問如何獲取F13,謝謝

Book1.rar (1.9 KB)

SpecialCells(xlLastCell)
除非原範圍是被clear或delete
就是連同格式清除
否則excel仍認為該範圍已使用
用CurrentRegion屬性試試
學海無涯_不恥下問

TOP

本帖最後由 GBKEE 於 2010-6-11 13:07 編輯

回復 1# 巴克斯

SpecialCells(xlLastCell)永遠是工作表中已使用的儲存格之最後一個的儲存格
  1. Sub Ex() 'ActiveCell只要位於一連續範圍中
  2.     Dim Rng As Range
  3.     Set Rng = ActiveCell.CurrentRegion
  4.     Rng(Rng.Rows.Count, Rng.Columns.Count).Select
  5. End Sub
複製代碼

TOP

回復  Hsieh

SpecialCells(xlLastCell)永遠是工作表中已使用的儲存格之最後一個的儲存格
GBKEE 發表於 2010-6-11 08:17


謝謝兩位板主回覆
可是是不是可以不管ActiveCell有沒有在連續區域,都可找到右下角區域
我試著把資料弄得更亂些,請問如何找到右下角橘色位置?
謝謝

Book1.rar (6.29 KB)

TOP

For Each a In Range(Cells.SpecialCells(xlCellTypeConstants).Address)
  If a.Row > r Then r = a.Row
  If a.Column > k Then k = a.Column
Next
MsgBox Cells(r, k).Address
學海無涯_不恥下問

TOP

回復 4# 巴克斯
  1. Sub Ex()
  2.     Dim E As Range, R&, C&
  3.     For Each E In Cells.SpecialCells(xlCellTypeConstants).Areas
  4.         If E(E.Rows.Count, E.Columns.Count).Row > R Then R = E(E.Rows.Count, E.Columns.Count).Row
  5.         If E(E.Rows.Count, E.Columns.Count).Column > C Then C = E(E.Rows.Count, E.Columns.Count).Column
  6.     Next
  7.     Cells(R, C).Select
  8. End Sub
複製代碼

TOP

回復 6# GBKEE

謝謝兩位板主提供Cells.SpecialCells(xlCellTypeConstants)的用法
又多學了一種用法,一種是由區域內各非空白欄位找出最右及最下位置
一種是由區域內各連續區塊的右下,逐一找出最右及最下位置,
於小資料測試ok,可是當我用到資料多且複雜區域時
因為需逐欄位去檢測位置,就掛在那裡
   
只好另想辦法,試著也從SpecialCells(xlLastCell),但從外部倒找回去
請版主指教,謝謝


book1.rar (12.31 KB)

TOP

回復 7# 巴克斯


    由後往前推
  1. Sub NN()
  2. Set Rng = Sheet1.UsedRange
  3. r = Rng.Rows.Count
  4. k = Rng.Columns.Count
  5. Do Until Application.CountA(Rng.Columns(k)) <> 0
  6. k = k - 1
  7. Loop
  8. Do Until Application.CountA(Rng.Rows(r)) <> 0
  9. r = r - 1
  10. Loop
  11. MsgBox Cells(r, k).Address
  12. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 8# Hsieh

謝謝Hsieh版主回應,我本來也想使用counta來往前推
可是不會使用,現在又學了一種用法
這一帖獲益良多,感謝

TOP

回復 9# 巴克斯

不過剛剛又想到,先前測試也有用過類似從外往內找的方法
但如果也是資料異動多的時候(ex:從30000筆變1000筆)
這時候用counta找到非空白row還是必須找29000次
所以覺得若要適合多資料狀況
可能還是從cells(65536,1).end(3).row到cells(cells(65536,ActiveCell.SpecialCells(xlLastCell).column).row,找到最大row
頂多不會超過256次

TOP

        靜思自在 : 不要隨心所欲,要隨心教育自己。
返回列表 上一主題