作者nash30113 (生活艺术家)
看板Office
标题Re: [算表] VBA 中寻找最後一列非空白位置并选取范围
时间Sun Apr 29 11:20:47 2018
爬文发现想用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://webptt.com/cn.aspx?n=bbs/Office/M.1524972052.A.FE0.html
1F:推 newacc: 不考虑用Range 04/29 11:24
2F:→ newacc: 不小心按到送出... 04/29 11:24
3F:→ newacc: 不考虑用Range("A" & Columns.Count).End(XlToLeft)吗? 04/29 11:25
4F:→ newacc: 不对,你是想要找到A栏最後一笔资料位置,还是第1列最右边 04/29 11:29
5F:→ newacc: 的资料? 04/29 11:29
6F:→ newacc: 然後你的程式第二行,你没有先Set myRange,所以myRange现 04/29 11:30
7F:→ newacc: 在是Nothing,所以会跳错误 04/29 11:31
不好意思以下再补充说明
我是想选取一个范围
我的想法是先寻找A栏中最个一个非空白的值储存格
再往右选取到最右边那栏
现在主要卡在判断寻找最後一个非空白值的储存格後
该怎麽套用的选取的范围
感谢!
※ 编辑: nash30113 (114.24.150.75), 04/29/2018 11:39:25
8F:→ soyoso: 要以回圈的话,可以i =1048576(或65536),缺点效率不好 04/29 11:37
9F:→ newacc: 刚睡醒真的不适合用手机打code... 04/29 11:38
10F:→ newacc: 你要找A栏最後一笔资料用这个: 04/29 11:38
11F:→ newacc: Range("A" & Rows.Count).End(xlUp) 04/29 11:38
12F:→ soyoso: 判断最後一列出现的列号或储存格用的是range.end(参数) 04/29 11:39
13F:→ newacc: 你要找第1列最右边资料用这个: 04/29 11:39
14F:→ soyoso: 参数为xlup或xldown 04/29 11:39
15F:→ newacc: Cells(1, Columns.Count).End(xlToLeft) 04/29 11:40
16F:→ soyoso: xlup为可能有非连续储存格且有可能只有单一储存格有值时使 04/29 11:40
17F:→ soyoso: 用,xldown则为连续储存格且复数以上 04/29 11:40
感谢newacc的code
目前套用会选到有公式的空白储存格
所以才会用S大的建议套用if的判断式
但不知道判断後该怎麽套进选取范围
实例如附档 我想选取档案中Sheets"资料产出"非空白储存格范围(如A2:C6)
档案连结:
https://goo.gl/jtLdXw
※ 编辑: nash30113 (114.24.150.75), 04/29/2018 12:01:53
19F:推 newacc: 想补充S大的做法,除非你很确定资料格式,否则不要用 04/29 12:00
20F:→ newacc: xlDown或xlToRight,有可能会直接选到最尾端的空白格 04/29 12:01
21F:→ newacc: 像是你原本的code连用三次xlToRight,如果该列资料是连续 04/29 12:02
22F:→ newacc: 的,就会选到最右边的空白,也就是XFD栏 04/29 12:03
23F:→ newacc: 噢,原来是因为有公式的关系,那我会用一个do loop来调整 04/29 12:07
24F:→ newacc: 往上找的次数,稍等 04/29 12:07
25F:→ soyoso: 选取a2:c6的话,range.resize配合工作表函数count 04/29 12:14
27F:→ newacc: 实作发现end模式不会理会公式的结果,要搭配count计算资料 04/29 12:22
28F:→ newacc: 笔数,但就是资料一定要连续 04/29 12:22
29F:→ nash30113: 感谢N大的解说及S大提供的范例!! 我再研究一下~ 04/29 12:43
30F:→ soyoso: 更正一下11:39的回文,应是range.end(参数direction) 02/15 16:11