Option Explicit
Sub 获取数据的总行数1()
Dim RowN As Integer
Dim Rng As Range
Set Rng = Range("C:C").Find("*", after:=Range("C1"), searchdirection:=xlPrevious)
RowN = Rng.Row
Debug.Print "最后一个单元格为:"; Rng.Address; ; "行号为:"; RowN
'另一个方法
Set Rng = Range("A:C").Find("*", after:=Range("A1"), searchorder:=xlByColumns, searchdirection:=xlPrevious)
RowN = Rng.Row
Debug.Print "最后一个单元格为:"; Rng.Address; ; "行号为:"; RowN
End Sub
使用Find方法查找最后的单元格
利用Find方法可以查找非空单元格,只需填写查找内容为“*”即可。如要查找C列的最后一个非空单元格,因而将参数After设为Range(“C1”),而SearchDirection设为xIPrevious,表示按照向上的方向进行查找。Excel默认的方向为向下和向右,xlPrevious
表示按照向左或向上的方向查找。而Find方法查找是在指定的范围内循环的。若设置在C列范围内,起始查找单元格为C1,方向为xIPrevious,Find方法会接着从C列最后一个单元格(即C1048576)开始查找。因而找到最后一个非空单元格(即C36)。
Find方法按行查找和按列查找的区别
Find方法中,SearchOrder参数可以设置为xIByRows(按行查找)或者xIByColumns(按列查找),当SearchDirection设置为xINext时,其查找顺序如图所示。
当SearchDirection设为xIPrevious时,其方向正好与图所示的方向相反。本例中,在A至C列,从A1开始向xIPrevious的方向,按列查找非空的单元格,即也是从C列的最后一个单元格开始找C列的非空单元格。在本例中,由于各列数据的行数相同,因而按行或按列的方式查找均可。但在下图所示的情况下,若按行(xIByRows)查找,则会找到A37单元格,而非C36单元格。
实现代码2
'计算量超大
Sub 获取数据的总行数2()
Dim RowN As Long '不可用integer类型
For RowN = Rows.Count To 1 Step -1
If Cells(RowN, "C").Value <> "" Then
Debug.Print "最后一个单元格为:C"; RowN
Exit For
End If
End Sub
获取工作表总行数
在不同版本的Excel中,工作表的总行数是不同的,在Excel 2003及之前的版本中,工作表的总行数为65536(即2的16次方),而自Excel 2007开始的版本,总行数扩大到了1048576(即2的20次方)。为了让程序更通用,一般以以下方式表示工作表的总行数。其中,Rows表示所有的行,Count属性表示数量,即所有行的数量,也就是工作表的总行数。
实现代码3
Sub 获取数据的总行数3()
Dim RowN As Long
Dim Rng As Range
If Cells(Rows.Count, "C").Value = "" Then
Set Rng = Cells(Rows.Count, "C").End(xlUp) '上移一格
Set Rng = Cells(Rows.Count, "C")
End If
RowN = Rng.Row
Debug.Print "最后一个单元格为:"; Rng.Address; ; "行号为:"; RowN
End Sub
单元格对象的End属性
单元格对象的End属性相当于寻找以某个单元格为起点按组合键【Ctrl+方向键】所定位到的单元格。当起始单元格值不为空时,将找到该方向上最后一个非空单元格,当起始单元格值为空时,将找到第一个非空单元格。使用End属性将返回一个单元格对象(Range),其语法为:
Rng.End(Direction)
其中,Rng为单元格对象,表示起始单元格。Direction为方向参数,可以为表中的任何一个常量。
表 End属性Direction参数
常 量 | 值 | 说 明 |
xlDown | -4121 | 向下 |
xlToLeft | -4159 | 向左 |
xlToRight | -4161 | 向右 |
xlUp | -4162 | 向上 |
本例中,程序首先判断C列最后一个单元格是否为空,若为空,则向上查找第一个非空单元格,反之,则C列最后一个有数据的单元格为该单元格。
End属性的局限性
由于Excel的数据量通常不可能填满最后一个单元格,因而在绝大多数情况下可以方便地使用以下表达式表示某列最后一个非空单元格的行号。
Cells(Rows.Count,列号).End(xlUp).Row
但是End属性返回的只能是可见单元格,一旦最后一行数据被隐藏了,则End属性将不会得到正确的结果,如图所示。因而在使用End属性时需要格外小心。
其他获取最后数据行行号的方法
本例展示了3种获取最后数据行行号的方法,每个方法各有各的优点。除此之外,还有以下几种方法可以获取最后数据行的行号。
1.定位(SpeciaICells)
使用SpeciaICells方法,查找最后一个单元格,语句如下:
Range ("C:C").SpecialCells( xlCellTypeLastCell).Row
但Excel判断最后一个单元格的方法并不以数据为准,在最后的数据行之后,只要设置过单元格格式或者曾经使用过的单元格,Excel都将断定其为最后的单元格。
2.UsedRange
UsedRange是工作表对象(Worksheet)的一个属性,表示用户使用过的单元格区域。可以使用以下方法获取最后一个数据行的行号:
实现代码4
Sub 获取数据的总行数4()
Debug.Print "最后一个单元格为:C"; ActiveSheet.UsedRange.Rows.Count
End Sub
与SpeciaICells一样,只要是用户设置过格式或者写入任何内容的都将断定其为使用过的单元格。
3. CurrentReion
CurrentReion属性是单元格对象的一个属性,表示该单元格所在的连续的数据区域。可以使用以下表达式获取最后数据行的行号:
Range("A1").CurrentRegion.Rows.Count
该方法同样有局限,因为CurrentReion始终返回一个矩形的单元格区域。只要有一个单元格数据接壤,该区域将会扩大到包围接壤的数据单元格。如图所示,单元格A1的CurrentReion为A1:D37,因而上述表达式求得的行号为37。
目录示例:实现代码1使用Find方法查找最后的单元格Find方法按行查找和按列查找的区别实现代码2获取工作表总行数实现代码3单元格对象的End属性End属性的局限性其他获取最后数据行行号的方法1.定位(SpeciaICells)2.UsedRange实现代码43. CurrentReion示例: 在VBA中,经常需要对原始数据进行统计。然而在大多数情况下,数据的总行数是未知的,因而会给编写通用性较高的代码造成一些麻烦。如图所示,该表为某公..
求出A列最后1行:Cells(Rows.Count, 1).End(3).Row
"Cells(Rows.Count, 1)"表示是查找A列最后一个非空单元格,按列的可以改成"Cells(1, Columns.count)"
"end(3)"表示的向上查找,也可以写成“end(xlup)”,还有其他3个方向,向下,向左,向右:xldown,xltoleft,xltoright
在编写代码时我们时常用到的是: 取得数据表的最后一行数据所在的行号?这样在编写循环语句时就不用猜着自定义终止值?
代码 code
Dim FinalRow As Integer
FinalRow = Range("A65536").End(xlUp).Row '得到A列最后数据的行数
自A65536单元格开始向上询查,A列第一个有内容的单元格所在的行号。
如果A列或B列或C列等列行数不同,就可以将A65536修改为
统计数据区域最后一行行号,可以说是入门VBA时最基础的一行代码,可以让你获取某列或者某一区域的最后一行的行号,本文给出7中不同的方法,得出数据区域最后一行行号,当然每种方法之间有些许差别。
工具/原料
OFFICE 2016(已打开“开发工具”选项卡)
方法/步骤
[第一种方法] ActiveSheet.Range("A" & Rows.Count).End (xlUp).Row
你需要做的更改:把需要打印的文件路径更改一下
我的使用场景:
金山表单收集-->自动汇集成的金山文档-->金山文档右上角的“WPS打开”按钮点击一下把云端数据自动下载到电脑端,然后直接关闭就行-->调出小工具输入打印的范围-->选择打印机-->打印成功
我的打印机打印 80*60的热敏标签
我留的有例行,如果要测试的话,把“打印标签”按钮事件里面的第一行Call 抓数据注释掉就行了
可以使用 Microsoft Graph API 来访问 SharePoint 上的数据。下面是一段 VBA 代码,它使用 WinHttpRequest 对象来执行 HTTP GET 请求,以获取 SharePoint 网站上列表中的数据:
Sub GetDataFromSharePoint()
Dim httpRequest As Object
Dim url As String
Dim accessToken As String
' 填写 SharePoint 网站 URL
url = "https://[your_tenant].sharepoint.com/sites/[your_site]/_api/web/lists/getbytitle('[list_name]')/items"
' 填写访问令牌
accessToken = "[your_access_token]"
Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
httpRequest.Open "GET", url, False
httpRequest.SetRequestHeader "Authorization", "Bearer " & accessToken
httpRequest.SetRequestHeader "Accept", "application/json;odata=verbose"
httpRequest.Send
If httpRequest.Status = 200 Then
Dim response As Object
Set response = JsonConverter.ParseJson(httpRequest.ResponseText)
' 对返回的数据进行处理,例如写入到 Excel 中
End If
End Sub
在上面的代码中,请填写您的 SharePoint 租户、网站、列表名称以及访问令牌。需要注意的是,此代码需要一个 JSON 转换器,用于将 API 的响应转换为可供 VBA 处理的数据结构。可以在网上搜索免费的 JSON 转换器,并将其导入到 VBA 项目中。