返回列表 上一主題 發帖

資料區域右下欄位獲取

資料區域右下欄位獲取

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

Book1.rar (1.9 KB)

一句搞定。
MsgBox Cells(Cells.Find("*", , , , 1, 2).Row, Cells.Find("*", , , , 2, 2).Column).Address(0, 0)

TOP

謝謝GBKEE 版主
解說得很清楚,我想最終這是最符合我的需求了

TOP

回復 15# 巴克斯


   
若row可以直接求出,那column是否可比照找到
  1. Sub Ex()
  2.     Dim Rng As Object, E, R, C
  3.     Set Rng = ActiveSheet.Cells.SpecialCells(xlCellTypeConstants).Areas
  4.     R = Rng(Rng.Count)(Rng(Rng.Count).Count).Row
  5.     For Each E In Rng
  6.         If E(E.Count).Column > C Then C = E(E.Count).Column
  7.     Next
  8.     MsgBox Cells(R, C).Address
  9. End Sub
複製代碼

TOP

本帖最後由 GBKEE 於 2010-6-13 08:03 編輯

回復 15# 巴克斯
Areas 屬性 傳回集合,此集合代表多重範圍中的所有範圍
在 Set a = Cells.SpecialCells(xlCellTypeConstants).Areas
a=集合多重範圍中的所有範圍
a.Count=計算a所有範圍中多重範圍的數量
a(a的第幾個範圍)-->a(a.Count)=a(a中最後一個範圍)
a(a中最後一個範圍).Count=計算a(a中最後一個範圍)範圍中Cells數量
a(a中最後一個範圍)(a(a中最後一個範圍).Count)->a(a中最後一個範圍)(最後一個Cell)
所以 r = a(a.Count)(a(a.Count).Count).Row 是你要的
且若row可以直接求出,那column是否可比照找到    找不到的

a(a.Count) 不一定是工作表最右邊的 範圍
a(a.Count) 一定是工作表最下面的範圍
另測版主k = UsedRange.SpecialCells(xlCellTypeLastCell).Column用法時

UsedRange 如沒有指明是那一工作表的已用範圍 程序必須是置於作用中Sheet 的物件模組中  例: 作用中的工作表是 Sheet1 程序碼須置於 Sheet1的物件模組中 可行
你可能將 程序 置於一般模組中(Module) 或 ThisWorkbook物件模組中
必須指明是那一工作表ActiveSheet.UsedRange 或Sheet1.UsedRange

TOP

回復 14# GBKEE

謝謝兩位板主回覆
版主寫的程式真是精簡
雖知道a(a.Count)(a(a.Count).Count).Row是為了求最下方row
可是看不懂結構用法,是否請版主解釋一下
且若row可以直接求出,那column是否可比照找到
我試著修改如下,可是column會往前多找一格,只好先用k+1,不知為什麼??
  1. Sub aa()
  2. Set a = Cells.SpecialCells(xlCellTypeConstants).Areas
  3. r = a(a.Count)(a(a.Count).Count).Row
  4. k = a(a.Count)(a(a.Count).Count).Column

  5. Cells(r, k + 1).Select
  6. End Sub
複製代碼
另測版主k = UsedRange.SpecialCells(xlCellTypeLastCell).Column用法時
會有錯誤發生,請問正確用法?
我先改用k = ActiveCell.SpecialCells(xlLastCell).Column可用
謝謝

TOP

工作表沒有修改任一儲存格的格式 前提下可使用
Sub Ex()
    With ActiveSheet.UsedRange
        .Cells(.Rows.Count, .Columns.Count).Select
    End With
End Sub

TOP

回復 10# 巴克斯
  1.    Sub nn()
  2. Set a = Cells.SpecialCells(xlCellTypeConstants).Areas
  3. r = a(a.Count)(a(a.Count).Count).Row
  4. k = UsedRange.SpecialCells(xlCellTypeLastCell).Column
  5. Do Until Application.CountA(Columns(k)) > 0
  6.    k = k - 1
  7. Loop
  8. MsgBox Cells(r, k).Address
  9. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 10# 巴克斯
試試如 Hsieh 板主 所說的由後往前推
  1. Sub Ex()
  2. Dim Rng As Range, i&, R&, C&
  3. Set Rng = ActiveSheet.UsedRange
  4. For i = Rng.Columns.Count To 1 Step -1
  5.     If Application.CountA(Rng.Columns(i)) <> 0 Then
  6.         C = Rng.Columns(i).Column
  7.         Exit For
  8.     End If
  9. Next
  10. For i = Rng.Rows.Count To 1 Step -1
  11.     If Application.CountA(Rng.Rows(i)) <> 0 Then
  12.         R = Rng.Rows(i).Row
  13.         Exit For
  14.     End If
  15. Next
  16. If R <> 0 And C <> 0 Then Cells(R, C).Select
  17. End Sub
複製代碼

TOP

[版主管理留言]
  • GBKEE(2010-6-12 07:18): 打錯字 可在原文 按編輯再修改即可 不必重新再發一次文

本帖最後由 巴克斯 於 2010-6-13 05:46 編輯

回復 10# 巴克斯

sorry,打錯
cells(65536,1).end(3).row到cells(cells(65536,ActiveCell.SpecialCells(xlLastCell).column).end(3).row


瞭解了,以前舊版好像不能重編輯,所以我也沒注意到,順便測試一下~

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題