Re: [算表] VBA 中尋找最後一列非空白位置並選取範圍

看板Office作者 (生活藝術家)時間6年前 (2018/04/29 11:20), 6年前編輯推噓3(3027)
留言30則, 3人參與, 7年前最新討論串1/1
爬文發現想用VBA 中尋找最後一列非空白位置並選取範圍 參考了S大的說明可用迴圈if判斷的方式尋找到最後一列的位置 但完整程式碼該怎麼套以選取範圍新手還試不出來 可以請版上高手稍微示範一下嗎? 感謝!! 目前的程式碼如下: Dim myRange As Range For i = myRange.Row To 1 Step -1 If Range("A" & i) <> "" Then Exit For Next Set myRange = ThisWorkbook.Sheets("資料產出").Range("a2", ActiveSheet.Range("a1".)Range("A" & i).End(xlToRight).End(xlToRight).End(xlToRight)) myRange.Select End Sub ※ 引述《supisces (被~~~切~~~八~~~段)》之銘言: : 軟體: Excel : 版本: 2010 : Google 後查到以下程式碼可以找到最後一列的位置 : ============================================================= : Dim myRange As Range : Set myRange = ThisWorkbook.Sheets(1).Range("B65536").End(xlUp) '表示在B欄 : 的最後一列 : myRange.Select : Debug.Print myRange.Value : Debug.Print myRange.Address : Debug.Print myRange.Row : Debug.Print myRange.Column : MsgBox "值 : " & vbTab & myRange.Value & vbCr & _ : "位置: " & vbTab & myRange.Address & vbCr & _ : "列數: " & vbTab & myRange.Row & vbCr & _ : "行數: " & vbTab & myRange.Column & vbCr : Set myRange = Nothing : ============================================================== : 但是經測試後發現, : 這個方式並不管儲存格是否為空白. : 如果最後一列的儲存格中有公式, : 但是結果為空白, : 請問該如何寫 VBA? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.150.75 ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1524972052.A.FE0.html

04/29 11:24, 6年前 , 1F
不考慮用Range
04/29 11:24, 1F

04/29 11:24, 6年前 , 2F
不小心按到送出...
04/29 11:24, 2F

04/29 11:25, 6年前 , 3F
不考慮用Range("A" & Columns.Count).End(XlToLeft)嗎?
04/29 11:25, 3F

04/29 11:29, 6年前 , 4F
不對,你是想要找到A欄最後一筆資料位置,還是第1列最右邊
04/29 11:29, 4F

04/29 11:29, 6年前 , 5F
的資料?
04/29 11:29, 5F

04/29 11:30, 6年前 , 6F
然後你的程式第二行,你沒有先Set myRange,所以myRange現
04/29 11:30, 6F

04/29 11:31, 6年前 , 7F
在是Nothing,所以會跳錯誤
04/29 11:31, 7F
不好意思以下再補充說明 我是想選取一個範圍 我的想法是先尋找A欄中最個一個非空白的值儲存格 再往右選取到最右邊那欄 現在主要卡在判斷尋找最後一個非空白值的儲存格後 該怎麼套用的選取的範圍 感謝! ※ 編輯: nash30113 (114.24.150.75), 04/29/2018 11:39:25

04/29 11:37, 6年前 , 8F
要以迴圈的話,可以i =1048576(或65536),缺點效率不好
04/29 11:37, 8F

04/29 11:38, 6年前 , 9F
剛睡醒真的不適合用手機打code...
04/29 11:38, 9F

04/29 11:38, 6年前 , 10F
你要找A欄最後一筆資料用這個:
04/29 11:38, 10F

04/29 11:38, 6年前 , 11F
Range("A" & Rows.Count).End(xlUp)
04/29 11:38, 11F

04/29 11:39, 6年前 , 12F
判斷最後一列出現的列號或儲存格用的是range.end(參數)
04/29 11:39, 12F

04/29 11:39, 6年前 , 13F
你要找第1列最右邊資料用這個:
04/29 11:39, 13F

04/29 11:39, 6年前 , 14F
參數為xlup或xldown
04/29 11:39, 14F

04/29 11:40, 6年前 , 15F
Cells(1, Columns.Count).End(xlToLeft)
04/29 11:40, 15F

04/29 11:40, 6年前 , 16F
xlup為可能有非連續儲存格且有可能只有單一儲存格有值時使
04/29 11:40, 16F

04/29 11:40, 6年前 , 17F
用,xldown則為連續儲存格且複數以上
04/29 11:40, 17F
感謝newacc的code 目前套用會選到有公式的空白儲存格 所以才會用S大的建議套用if的判斷式 但不知道判斷後該怎麼套進選取範圍 實例如附檔 我想選取檔案中Sheets"資料產出"非空白儲存格範圍(如A2:C6) 檔案連結:https://goo.gl/jtLdXw ※ 編輯: nash30113 (114.24.150.75), 04/29/2018 12:01:53

04/29 11:53, 6年前 , 18F

04/29 12:00, 6年前 , 19F
想補充S大的做法,除非你很確定資料格式,否則不要用
04/29 12:00, 19F

04/29 12:01, 6年前 , 20F
xlDown或xlToRight,有可能會直接選到最尾端的空白格
04/29 12:01, 20F

04/29 12:02, 6年前 , 21F
像是你原本的code連用三次xlToRight,如果該列資料是連續
04/29 12:02, 21F

04/29 12:03, 6年前 , 22F
的,就會選到最右邊的空白,也就是XFD欄
04/29 12:03, 22F

04/29 12:07, 6年前 , 23F
噢,原來是因為有公式的關係,那我會用一個do loop來調整
04/29 12:07, 23F

04/29 12:07, 6年前 , 24F
往上找的次數,稍等
04/29 12:07, 24F

04/29 12:14, 6年前 , 25F
選取a2:c6的話,range.resize配合工作表函數count
04/29 12:14, 25F

04/29 12:14, 6年前 , 26F

04/29 12:22, 6年前 , 27F
實作發現end模式不會理會公式的結果,要搭配count計算資料
04/29 12:22, 27F

04/29 12:22, 6年前 , 28F
筆數,但就是資料一定要連續
04/29 12:22, 28F

04/29 12:43, 6年前 , 29F
感謝N大的解說及S大提供的範例!! 我再研究一下~
04/29 12:43, 29F

02/15 16:11, 7年前 , 30F
更正一下11:39的回文,應是range.end(參數direction)
02/15 16:11, 30F
文章代碼(AID): #1QvJeK_W (Office)
文章代碼(AID): #1QvJeK_W (Office)