返回列表 上一主題 發帖

[發問] 使用End 語法問題

[發問] 使用End 語法問題

我使用如下的語法要取的一整列最後一個有資料儲存格的位置,
但是如果遇到A1無資料或是A1有資料A2無資料時,
x 變數的值就會不對,請問這要如何寫才能避免這個問題
x = Sheet1.Range("A1").End(xlToRight).Column

本帖最後由 GBKEE 於 2011-11-12 10:47 編輯

回復 9# luhpro
   指定範圍內有不連續的資料, 最後一個有資料的儲存格選定
  1. Sub Ex()
  2.     Dim Rng As Range
  3.     Set Rng = [B5:B50]
  4.     Set Rng = Rng.SpecialCells(xlCellTypeConstants)
  5.     Set Rng = Rng.Areas(Rng.Areas.Count)
  6.     Rng.Cells(Rng.Rows.Count, 1).Select
  7. End Sub
複製代碼

TOP

本帖最後由 luhpro 於 2011-11-12 08:51 編輯
回復  wind6424
End 屬性  定傳回 Range 物件,該物件代表包含來源範圍之區域結尾處的儲存格。等於在工作表中 按 Enter+向上鍵、Enter+向下鍵、Enter+向左鍵或 Enter+向右鍵 ...
GBKEE 發表於 2011-11-11 07:45

抱歉, 做個更正,
我試了一下按 Enter+向下鍵似乎不能出現我們所期望的動作,
我猜應該是 :
等於在工作表中 按 Ctrl+向上鍵、Ctrl+向下鍵、Ctrl+向左鍵或 Ctrl+向右鍵

而且雖然它的定義是 "該物件代表包含來源範圍之區域結尾處的儲存格",
但據我測試結果它的動作應該是 :
若下一格無資料就找第一個有資料的儲存格.
而若下一格有資料就找第一個無資料儲存格的前一格(也就是連續資料區中的最後一格).
若繼續按下同一組按鍵則依上述規則繼續移動焦點,
直到已移動到最末格. (上述每次移動標的的儲存格必然是 "有資料的" 或是 "最末格" 之一)

其關鍵就在於:
假設 Excel 檔中有多列不連續資料,
當我們在儲存格 A1 多次按下 Ctrl+向下鍵 時,
焦點並不會停留在 "第一次找到的儲存格" 上, <雖然它已是 A1 儲存格(同時也是 "第一次找到的儲存格")所在區域的 "區域結尾處的儲存格">
而是會一直移動下去直到最末一列才會停下.

TOP

本帖最後由 GBKEE 於 2011-11-12 10:07 編輯

回復 7# wind6424
End 不是搜尋
End 屬性  定傳回 Range 物件,該物件代表包含來源範圍之區域結尾處的儲存格。等於在工作表中 按  Ctrl+向上鍵、 Ctrl+向下鍵、 Ctrl+向左鍵或  Ctrl+向右鍵

luhpro  謝謝更正

你在1樓說  : 但是如果遇到A1無資料或是A1有資料A2無資料時,     你的意思: 資料是不連續的
所以 luhpro 的 x = Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column  ,從檔案最後一欄往左到第1個有資料的儲存格 .

TOP

1. 我所說懶的記最後一行的意思是指當引用上述方式時,
若覺得 IV(即第 256) 欄(或 65536 列)不容易記起來 ...
luhpro 發表於 2011-11-2 21:38


當資料中有空白儲存格時,搜尋就會停在這個我能理解

但是我的表格內只要是第一個開始搜尋不論第一儲存格空白或是有資料就會錯誤,
從後面往前就ok,這就就讓我無法理解

TOP

luhpro 大,
也不是懶的記最末一欄,
.
.
但是為何由第一個開始搜尋就會錯誤,從後面往前就ok 真是奇怪
wind6424 發表於 2011-11-2 21:13

1. 我所說懶的記最後一行的意思是指當引用上述方式時,
若覺得 IV(即第 256) 欄(或 65536 列)不容易記起來,
可以用 Columns.Count(或 Rows.Count) 較直覺也比較好記.

2. 我的理解是此種搜尋是找內容狀態(有無資料)將要發生變化的那一個儲存格,
所以當資料中有空白儲存格時,
搜尋就會停在這個非我們想要的地方,
自然結果就會是錯的了.

反之來說若你有兩個表格且中間是用空白欄(或 列)來做區隔時,
上述的方式就不適合用來找第一個表格資料的最末欄(或 列)了.

TOP

回復  wind6424
如果懶的記最末一欄到底是哪一行,
或是希望每個版本都可使用無需考慮差異的話也可用 :
...
luhpro 發表於 2011-10-31 21:57


luhpro 大,
也不是懶的記最末一欄,
是因為我的表會一直增加資料,
而且每欄都會不一樣,
所以我需要用一個判斷式找出每欄最後一筆資料的位置,
然後將新增的資料用程式自動加到後面
您的方法真不錯,有學到一招

但是為何由第一個開始搜尋就會錯誤,從後面往前就ok 真是奇怪

感謝

TOP

Excel 2003
x = Sheet1.Range("IV1").End(xlToLeft).Column
diabo 發表於 2011-10-28 17:38


感謝 diabo 大大的解答
謝謝

TOP

回復 1# wind6424
如果懶的記最末一欄到底是哪一行,
或是希望每個版本都可使用無需考慮差異的話也可用 :

x = Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column

TOP

Excel 2003
x = Sheet1.Range("IV1").End(xlToLeft).Column
diabo

TOP

        靜思自在 : 時時好心就是時時好日。
返回列表 上一主題