精华内容
下载资源
问答
  • Vba获取表格某一列的值,判断单元格是否为空,是则开始计数并返回
  • 前景提要(文末提供源码下载)昨天我们学习了针对单列的数据进行获取唯一值的方法,今天我们提升下难度,来尝试下获取已多列为参照物,获取唯一值的方法,昨天有很多小伙伴说还可以用字典的方法更加的简单,其实,针对...

    前景提要(文末提供源码下载)

    昨天我们学习了针对单列的数据进行获取唯一值的方法,今天我们提升下难度,来尝试下获取已多列为参照物,获取唯一值的方法,昨天有很多小伙伴说还可以用字典的方法更加的简单,其实,针对这个问题,我还是那句话,方法无绝对,多学点终究是好的,针对获取唯一值的方法,我后续几天会展开至少3种方法,大家可以选择自己喜欢的方法来玩。

    场景说明

    很明显今天的问题,我们无法用常规的去重的方式来实现了,因为去重的方式只能针对某一列的上下文进行操作的,现在我们的操作对象并不仅仅是一列,而是两列,甚至可能是不相邻的两列,也可能是三列。

    4734105621409ebcb941916c8cd8ec81.png

    这就是我们今天构造的模拟数据源,我们来看看今天的效果要如何实现

    代码区

    多列取唯一值,在我们日常的工作中确实是比较常见的操作,但是牵涉到多列的数据,是不是操作起来非常的困难呢?,其实并不会很难,我们来看看今天的代码

    Sub test()Dim l&l = Cells(Rows.Count, 1).End(xlUp).RowWith Range(Cells(1, 1), Cells(l, 3)) .RemoveDuplicates Columns:=Array(1, 2), Header:=xlYesEnd WithEnd Sub

    是不是很简单,和上节的代码有很多地方都是非常的相似的,但是又有一些地方不相同

    其实我们使用的方式还是我们上节学习过的RemoveDuplicates的方法

    先来看看最终的结果是怎么样的

    ab4efd8b1604a78d306ff5330c4b4d00.gif

    如果我们希望的是不连续的两行是否能够实现呢?

    来实现下,我们现在希望在A-C两列之间进行取唯一值的操作

    Sub test1()Dim l&l = Cells(Rows.Count, 1).End(xlUp).RowWith Range(Cells(1, 1), Cells(l, 5)) .RemoveDuplicates Columns:=Array(1, 3), Header:=xlYesEnd WithEnd Sub
    9eeca9944f14a5d57c2f2978f9c36fd2.gif

    代码是稍微有一些点修改的,我们一会来讲述下。

    从上面的两个动图,我们可以看出来,上面的代码完全满足了我们的需求,那么今天我们来继续深入学习下RemoveDuplicates方法

    代码解析

    前面我们也说了,今天的功能的关键代码还是RemoveDuplicates方法的运用,上节我们学习了RemoveDuplicates在单列取唯一值的时候的运用,在今天的多列的取唯一值的需求中,依然能够用到RemoveDuplicates

    其实我们昨天留下了一个小的伏笔,

    295b11d20fc4120ac27e23ef79ced5ac.png

    那么针对多列的时候,这里要如何写呢?其实你如果仔细的观察代码的话,就会发现了。

    .RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes

    将1换成了一个类似数组的方式,array()代表的就是数组,想要获取多列的唯一值就是用这样的结构,那么如何表现是第几列呢?

    来比较下两个代码的不同

    .RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes

    很明显发现了,array()括号内的内容是不相同的,(1,3)代表的就是第一列和第三列合在一起取唯一值,而(1,2)代表的就是第二列和第一列合在一起取唯一值,

    这里的第一列第二列都是数据源整体,和单元格具体的位置无关,并且并不受其他列的数据的影响。

    cd8f50bfa7389c1705f9d4a679839939.png

    1 2 3

    这里只有两列,那么如果有多列呢?三列甚至更多列呢?好吧,容我再卖个关子

    ================================

    本节课的案例源码已经上传,需要的小伙伴请按照如下步骤操作,一个不能少哦~~

    1.加个粉(已关注的略过这一步)

    2.转发下本文章(算是对我的小小支持吧~)

    3.后台私信“8-2”

    希望大家多支持~~,多多关注 ~ ~

    好了,明晚19:00,准时再见!

    展开全文
  • 熟悉VBA 但是不熟悉 xlwings 怎么办,可以调用 api 操作,如 xlwings 取消自动换行,xlwings选中某一列,xlwings获取最大行号,行标,最大列号,列标等等 个人常用代码如下,返回结果,截图如下 import xlwings ...

    熟悉VBA 但是不熟悉 xlwings 怎么办,可以调用 api 操作,如 xlwings 取消自动换行,xlwings选中某一列,xlwings获取最大行号,行标,最大列号,列标等等

    个人常用代码如下,返回结果,截图如下

    下面50行及之后部分引用自:https://blog.csdn.net/weixin_42146296/article/details/103647940

    感谢分享,希望共同进步~

    另外,在2020-11-16写某程序过程中,发现安装了Pywin32库之后,WPS仍然不支持绑定已打开的Excel文件,MS Office是可以进行绑定的,代码测试如下

    # 这种格式的绑定,只能在 MS office 之中使用,无法在 金山WPS 中使用,其中 xxx.xlsx 为已打开工作簿的文件名
    import xlwings
    wb = xlwings.books['xxx.xlsx']
    wb.sheets[0].range("A1").value = 1
    # open 这种方式进行打开,在 MS office 和 金山WPS 中皆可用  其中 'C:/Users/Administrator/Desktop/xxx.xlsx' 为Excel的绝对路径
    import xlwings
    wb = xlwings.books.open('C:/Users/Administrator/Desktop/xxx.xlsx')
    wb.sheets[0].range("A1").value = 11111

     正文起始:

    '''
    Author: Liang
    LastEditors: Liang
    Date: 2020-10-07 19:22:54
    LastEditTime: 2020-11-17 19:47:52
    Email: str-liang@outlook.com
    FilePath: /测试练习e:/Python_project/xlwings练习/xlwings-常用代码段.py
    Environment: Win 10 Python 3.8
    Description: 
    '''
    import xlwings
    
    WB = xlwings.books('更新SKU (1).xlsx') # 绑定工作簿
    print(WB.sheets[0].used_range.last_cell.row) # 获取最大行号
    print(WB.sheets[0].used_range.last_cell.column) # 获取最大列号
    print(WB.sheets[0].used_range.last_cell) # 获取最后一个位置单元格   返回值:<Range [更新SKU (1).xlsx]SKU链接!$L$319>
    print(WB.sheets[0].used_range.last_cell.address) # 获取最后一个位置单元格的 Range坐标 返回绝对引用坐标值  返回值:$L$319
    print(WB.sheets[0].cells.rows.count) # xlwings 获取最大行号
    print(WB.sheets[0].cells.columns.count) # xlwings 获取最大行号
    
    # 重要 这两句代码在获取未知表格范围的场景下很重要,在这里我们只是考虑了最后一个行,或者最后一个列的位置,但是实际情况中,还要考虑上面如果不是从第一行,或者第一列开始的,我们也要加上去,这样才可以准确获取有内容的范围 和usedrange、used_range不同,对他们而言,即便是有一个填充的颜色,他们也会认为是有used的,往往现实情况中,我们只要有数据的内容
    
    WB.sheets[0].cells(WB.sheets[0].cells.rows.count,1).end('up').select() # 获取 A列 最后一个有内容的单元格 同 VBA 的 Cells(Rows.Count, 1).End(xlUp).Select
    WB.sheets[0].cells(1,WB.sheets[0].cells.columns.count).end('left').select() # 获取 第一行 最后一个有内容的单元格 同 VBA 的 Cells(1, Columns.Count).End(xlToLeft).Select
    
    # 部分测试调用 API 
    print(WB.sheets[0].api.rows.count) # 调用 api 返回最大行号 可区分 xls 和 xlsx 
    print(WB.sheets[0].api.columns.count) # 调用 api 返回最大行号 可区分 xls 和 xlsx 
    WB.sheets[0].cells.api.WrapText = False # 调用 api 全部单元格 设置取消自动换行  不懂的可以去MS Excel录制宏看看,WPS 目前是企业版才可以启用宏
    WB.sheets[0].cells.autofit() # xlwings自带的方法  autofit(axis=None):自动调整表格,列宽、行高,axis指定行或者列
    
    # !!!慎用 ,下面这句,调用 api 全部单元格 设置自动调整列宽 目前有个缺点,这行代码执行后不会自动结束,而是一直执行,
    # WB.sheets[0].cells.api.EntireColumn.AutoFit = True 
    
    
    rng = WB.sheets[0].range("A10")
    # 下面相当于在Excel中按快捷键,可以在MS Excel 中自行测试
    rng.end('up').select() # 相当于 ctrl + ↑
    rng.end('down').select() # 相当于 ctrl + ↓
    rng.end('left').select() # 相当于 ctrl + ←
    rng.end('right').select() # 相当于 ctrl + →
    
    # 在Excel中写入数组(因为数组默认写入是横着写的 即 A1,B1,C1这样,但是我们一般都是要竖着写,即 A1,A2,A3这样)
    
    a = [1,2,3]
    WB.sheets[0].cells(1,1).options(transpose = True).value = a
    WB.sheets[0].range("B1").options(transpose = True).value = a
    
    #  如下来源于 https://blog.csdn.net/weixin_42146296/article/details/103647940
    # python用 xlwings库对Excel进行 字体、边框设置、合并单元格, 版本转换等操作
    # xlwings 其他的一些单元格读取写入操作网上很多,
    # 下面就写些如何设置单元格的 字体对齐,字体大小、边框, 合并单元格, 这些设置。
    
    import xlwings as xw
    app = xw.App(visible=True, add_book=False)
    app.display_alerts = False    # 关闭一些提示信息,可以加快运行速度。 默认为 True。
    app.screen_updating = True    # 更新显示工作表的内容。默认为 True。关闭它也可以提升运行速度。
    wb = app.books.add()
    sht = wb.sheets.active
    
    '''工作簿'''
    # wb = app.books.add()                   # 新建工作簿。
    # wb = app.books.open(r'file_path')      # 打开现有的工作簿
    # wb = app.books.active                  # 获取当前活动的工作簿
    
    """工作表"""
    # sht = wb.sheets.active                 # 获取当前活动的工作表
    # sht = wb.sheets[0]                     # 按索引获取工作表
    # sht = wb.sheets['Sheet1']              # 按表名获取工作表
    # sht1 = wb.sheets.add()                 # 新建工作表,默认新建的放在最前面。
    # sht1 = wb.sheets.add('新建工作表', after=sht)   # 新建工作表,放在sht工作表后面。
    
    """ 读取单元格 """
    b3 = sht.range('b3')
    # 获取 b3 中的值
    v = b3.value
    # 也可以根据行列号读取
    b3_value = sht.range(3,2).value
    # 读取一段区间内的值
    a1_c4_value = sht.range('a1:c4').options(ndim=2).value       # 加上 option 读取二维的数据
    a1_c4_value = sht.range((1,1),(4,3)).options(ndim=2).value   # 和上面读取的内容一样。
    
    """ 写入 就是把值赋值给读取的单元格就可以了"""
    sht.range(3,2).value = 'b3'
    
    """设置单元格大小"""
    sht.autofit()    # 自动调整单元格大小。注:此方法是在单元格写入内容后,再使用,才有效。
    sht.range(1,4).column_width = 5    # 设置第4列 列宽。(1,4)为第1行第4列的单元格
    sht.range(1,4).row_height = 20     # 设置第1行 行高
    
    """设置单元格 字体格式"""
    b3.color = 255,200,255         # 设置单元格的填充颜色
    b3.api.Font.ColorIndex = 3     # 设置字体的颜色,具体颜色索引见下方。
    b3.api.Font.Size = 24          # 设置字体的大小。
    b3.api.Font.Bold = True        # 设置为粗体。
    b3.api.HorizontalAlignment = -4108    # -4108 水平居中。 -4131 靠左,-4152 靠右。
    b3.api.VerticalAlignment = -4130      # -4108 垂直居中(默认)。 -4160 靠上,-4107 靠下, -4130 自动换行对齐。
    b3.api.NumberFormat = "0.00"          # 设置单元格的数字格式。
    
    """设置边框"""
    # Borders(9) 底部边框,LineStyle = 1 直线。
    b3.api.Borders(9).LineStyle = 1
    b3.api.Borders(9).Weight = 3                # 设置边框粗细。
    
    # Borders(7) 左边框,LineStyle = 2 虚线。
    b3.api.Borders(7).LineStyle = 2
    b3.api.Borders(7).Weight = 3
    
    # Borders(8) 顶部框,LineStyle = 5 双点划线。
    b3.api.Borders(8).LineStyle = 5
    b3.api.Borders(8).Weight = 3
    
    # Borders(10) 右边框,LineStyle = 4 点划线。
    b3.api.Borders(10).LineStyle = 4
    b3.api.Borders(10).Weight = 3
    
    # Borders(5) 单元格内从左上角 到 右下角。
    b3.api.Borders(5).LineStyle = 1
    b3.api.Borders(5).Weight = 3
    
    # Borders(6) 单元格内从左下角 到 右上角。
    b3.api.Borders(6).LineStyle = 1
    b3.api.Borders(6).Weight = 3
    
    """如果是一个区域的单元格,内部边框设置如下"""
    # # Borders(11) 内部垂直边线。
    # b3.api.Borders(11).LineStyle = 1
    # b3.api.Borders(11).Weight = 3
    # 
    # # Borders(12) 内部水平边线。
    # b3.api.Borders(12).LineStyle = 1
    # b3.api.Borders(12).Weight = 3
    
    """合并拆分单元格"""
    sht.range('C8:D8').api.merge()      # 合并单元格 C8 到 D8
    sht.range('C8:D8').api.unmerge()    # 拆分单元格。
    
    '''插入 、删除 一行'''
    sht1.range('a3').api.EntireRow.Delete()     # 会删除 ’a3‘ 单元格所在的行。
    sht1.api.Rows(3).Insert()                   # 会在第3行插入一行,原来的第3行下移。
    
    '''插入 、删除 一列'''
    sht1.range('c2').api.EntireColumn.Delete()  # 会删除 ’c2‘ 单元格所在的列。
    sht1.api.Columns(3).Insert()                # 会在第3列插入一列,原来的第3列右移。(也可以用列的字母表示)
    
    '''选择sheet页面最右下角的单元格,获取最大行数,和列数'''
    # 区别 expand(), expand()只选中与之连续的单元格。
    cell = sht1.used_range.last_cell
    rows = cell.row
    columns = cell.column
    
    # cell = sht1.range("a1").expand("down")
    # max_rows = cell.rows.count              # 获取最大行数
    
    
    '''排序,删除重复值'''
    # 排序使用方法:
    # 1、选择需要排序的区域。这里用 'a2' 是因为排序的数据送从第二行开始的,第一行是标题,不应该参与排序。
    # 2、选择按那一列进行排序 Key1=sht.range('c2').api, 这里选择的是按 第 C 列排序,所以这里选择 c1 和 c2 都可以。
    # 3、Order1=1 为升序,2为降序。
    sht1.range('a2',(rows,columns)).api.Sort(Key1=sht.range('c2').api, Order1=1)
    
    # 删除重复值使用方法:
    # RemoveDuplicates(3) 为按第3列内容进行删除重复项。
    sht1.range('a2',(rows,columns)).api.RemoveDuplicates(3)
    
    
    """插入、读取公式"""
    sht1.range('d1').formula = '=sum(e1+f1)'    # 插入公式
    print(sht1.range('d1').formula)
    
    '''同个表格复制、粘贴'''
    # 复制 a2 到 a6 之间单元格的值,粘贴到'a15'中
    sht.range('a2','a6').api.Copy(sht.range('a15').api)
    
    '''跨表格复制、粘贴'''
    my_values = sht_1.range('a2:d4').options(ndim=2).value    # 读取二维的数据
    sht_2.range('a1').value = my_values
    
    wb.save()
    #wb.close()
    #app.quit()
    
    """ 颜色索引:
    无色 = -4142,   自动 = -4105,  黑色 = 1,
    白色 = 2 ,    红色 = 3,    鲜绿 = 4,
    蓝色 = 5 ,    黄色 = 6,    粉红 = 7,
    青绿 = 8 ,    深红 = 9,    绿色 = 10,
    深蓝 = 11,    深黄 = 12 ,   紫罗兰 = 13,
    青色 = 14,    灰色25 = 15,  褐色 = 53,
    橄榄 = 52,    深绿 = 51,   深青 = 49,
    靛蓝 = 55,    灰色80 = 56,  橙色 = 46,
    蓝灰 = 47,    灰色50 = 16,  浅橙色 = 45,
    酸橙色 = 43,   海绿 = 50,    水绿色 = 42,
    浅蓝 = 41,     灰色40 = 48,   金色 = 44,
    天蓝 = 33,     梅红 = 54,   玫瑰红 = 38,
    茶色 = 40,    浅黄 = 36,   浅绿 = 35,
    浅青绿 = 34,   淡蓝 = 37,   淡紫 = 39,
     """
    # EXcel 版本转换
    import xlwings as xw
    
    file_name = '2222.xls'
    new_name = file_name+'x'
    
    app = xw.App(visible=False, add_book=False)
    app.display_alerts = False
    wb = app.books.open(file_name)   # 打开现有excel
    wb.api.SaveAs(new_name, 51)      # 参数 51 为xlsx格式。56为 Excel 97-2003的xls版本
    app.quit()

     

    展开全文
  • vba里的listbox是一个既需要有恶心的控件。 如果你是将二维数组赋值给Listbox.rowsource的话,当需要取得...如果listbox是多列的情况下,将listbox.column属性看作一个二维数组使用,比如获取第一行第一列的值 list

    vba里的listbox是一个既需要用又十分恶心的控件。


    如果你是将二维数组赋值给Listbox.rowsource的话,当需要取得listbox中某行某列的值时,会报属性索引值无效等错误。


    看官方文档,文档,文档。得到并记住以下一点,就不在茫然了。


    如果listbox是多列的情况下,将listbox.column属性看作一个二维数组使用,比如获取第一行第一列的值 listbox.column(0,0),单列就是一维数组。


    或者定义一个variant型变量,然后将listbox.list赋值给它,也会得到一个数组。



    以上,备注


    展开全文
  • Find方法按行查找和按查找的区别 实现代码2 获取工作表总行数 实现代码3 单元格对象的End属性 End属性的局限性 其他获取最后数据行行号的方法 1.定位(SpeciaICells) 2.UsedRange 实现代码4 3. ...

    目录

    示例:

    实现代码1

    使用Find方法查找最后的单元格

    Find方法按行查找和按列查找的区别

    实现代码2

    获取工作表总行数

    实现代码3

    单元格对象的End属性

    End属性的局限性

    其他获取最后数据行行号的方法

    1.定位(SpeciaICells)

    2.UsedRange

    实现代码4

    3. CurrentReion


    示例:

        在VBA中,经常需要对原始数据进行统计。然而在大多数情况下,数据的总行数是未知的,因而会给编写通用性较高的代码造成一些麻烦。如图所示,该表为某公司某月的销售人员销售数据。现需要对该表进行统计,由于销售人员的人数每月不固定,如何利用VBA动态获取最后一行数据的行号(以C列为准),以使程序更具备通用性?

    销售地区 销售人员 销售金额
    广州 程建华 135000
    深圳 李国敏 67200
    深圳 袁志刚 79500
    深圳 周汉林 225000
    广州 骈永富 15400
    广州 孙玉梅 2500
    上海 陈亚菁 37400
    上海 康小芸 12000
    上海 刘晨 22500
    广州 齐光 73500
    广州 于健惠 235000
    山东 王文群 136500
    山东 曾国安 21000
    广州 刘志峰 16000
    广州 刘玉录 78000
    广州 俞卫广 36000
    广州 杨建军 170000
    深圳 曲波 38000
    深圳 林革壮 73500
    深圳 李卫卿 45000
    广州 申玲 132000
    上海 孙正发 63000
    上海 毛传阳 106500
    广州 张元端 147000
    广州 朱凌波 265000
    山东 张宏 34500
    山东 郦锡文 300000
    广州 张占斌 32500
    广州 曹阳 205000
    广州 周书敬 22400
    广州 姚胜 215000
    深圳 郭建 19500
    深圳 高波 114000
    深圳 卢卫 120000
    广州 赵秀池 660000


    实现代码1

    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
        Next
    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) '上移一格
        Else
            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。

    展开全文
  • 前景提要(文末提供源码下载)之前我们介绍了如何通过RemoveDuplicates的方法来实现快速去重并提取唯一值的,RemoveDuplicates方法不仅仅能够实现针对某一列的去重,同时还可以实现2列的数据去重,但是有时候可能我们...
  • i = 7 '从第7行开始遍历,只要i行B还有边框,行数统计+1,直到遇到没有边框的那行为止 While aimSheet.Range("b" & i).Borders.LineStyle <> xlNone ' i = i + 1 Wend count = i '返回最后有边框的行数 ...
  • 展开全部java运行在虚拟机上,获取系统其他窗口比较麻烦。最好还是使用Excel的vba来实现。但是如果非要用java实现也32313133353236313431303231363533e58685e5aeb931333365646237可以1: java和vbs,vba通信2: JNA/JNI...
  • 注意:这个是我突然想合并两个Excel是做的某列值随机判断进行赋值的VBA执行脚本,如果要更改可自行根据需求更改; Sub loopDb() Set dbsheet1 = ThisWorkbook.Sheets("Sheet1") ---获取个页签 Set dbsheet2 ...
  • Vba总结

    2020-01-10 15:22:29
    1、获取某一列的行数 ActiveSheet.Range("A65535").End(xlUp).Row 2、获取某一行的列数 ActiveSheet.Range("IV1").End(xlToLeft).Column 3、给某一个sheet的某一个位置写上数据 Sheets("Sheet2").Cells(i, 1)....
  • vba 插入图片

    2013-03-19 17:34:16
    根据某一列的值获取相应的图片名称,插入到某一列
  • 学习Excel技术,关注微信公众号:excelperfect在Excel VBA中,可以使用End属性来获取最后行,例如...如果想要使用公式来获取某列中最后行呢?如下图1所示。图1可以看到,我们使用了LOOKUP函数,公式为:=LOOK...
  • 鼠标停留在数据透视表【型号】的任意数据上(通过该单元格可以获取数据透视表和字段) 由于数据透视表的字段不能全部取消筛选(至少要保留项),所以先找到红色内的第个有效值(本例中的红字本来就是数据源,...
  • Excel VBA 基本操作

    2021-04-15 15:08:07
    获取 A 这一列的有效行数 [A65536].End(xlUp).Row 新建一个工作表 Worksheets.Add().name = "SheetX" 解释一下工作表和工作簿的区别,工作簿是一个 Excel 文件,而工作表是一个表,一个工作簿可以有很多工作表,...
  • VBA与数据库

    2015-11-19 18:07:38
    •实例3-13 查询某一区间内的记录(BETWEEN) 65 •实例3-14 查询存在于某个集合里面的记录(IN) 67 •实例3-15 将查询结果进行排序(ORDER BY) 68 •实例3-16 进行复杂条件的查询(WHERE) 69 •实例3-17 利用...
  • 例如:个综合性的excel报表,第1行C是省份,而且此综合性报表有多个sheet要拆分,想要实现拆分所有sheet,并按省份合并成一个excel表,比如所有辽宁省的数据合并成一个excel文件以不同的sheet体现。用此脚本即可...
  • 01048利用GetOpenFilename方法获取某类型文件名 01049改变GetOpenFilename方法的默认路径 01050改变GetOpenFilename方法的标题文字 01051使用GetOpenFilename方法时出现错误的处理 01052利用GetSaveAsFilename方法...
  • Excel VBA与数据库整合应用范例精讲

    热门讨论 2011-10-29 18:48:38
    实例3-13 查询某一区间内的记录(BETWEEN) 实例3-14 查询存在于某个集合里面的记录(IN) 实例3-15 将查询结果进行排序(ORDER BY) 实例3-16 进行复杂条件的查询(WHERE) 实例3-17 利用合计函数进行查询...
  • 2.查询某一值第num次出现的值 3.返回当个人工资薪金所得为2000元(起征点为850元)时的应纳个人所得税税额 4.从形如"123545ABCDE"的字符串中取出数字 5.从形如"ABCD12455EDF"的字符串中取出数字 6.按SplitType取得...
  • 函数作用:将工作表中最后一列作为页脚打印在每一面页尾101 '102.函数作用:获取vbproject引用项目.................102 '103.函数作用:移除Excel工作表中的外部数据连接.......103 '104.函数作用:将选择定单元格作成...
  • 实例3-13 查询某一区间内的记录(BETWEEN) 实例3-14 查询存在于某个集合里面的记录(IN) 实例3-15 将查询结果进行排序(ORDER BY) 实例3-16 进行复杂条件的查询(WHERE) 实例3-17 利用合计函数进行查询...
  • 》一文中提到一个场景,即excel表中至少有两列,一列是图片,另一列是对应的图片名称,我们希望批量地提取当中的图片,并根据对应列为图片重命名。为解决这个问题,我们提供了Python和VBA两种实现办法。该文还将...
  • EXCEL集成工具箱V6.0

    2010-09-11 01:44:37
    财 务 工 具 【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,取相邻的上不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万行ERP或KingDee...
  • 【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,取相邻的上不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万行ERP或KingDee原始数据。...
  • 财 务 工 具 【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,取相邻的上不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万行ERP或KingDee...
  • 【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,取相邻的上不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万行ERP或KingDee原始数据。...
  • Excel百宝箱

    2012-10-27 17:09:21
    【合并与合计】:可以任意指定两列,对其中一列的数据合并同类项,而另一列对应的数值则求合计,合计结果存放在合并区域中 【建立图片目录】:对指定文件夹下所有图片(GIF、PNG、JPG,JPEG)建立目录,并批量导入 ...
  • Excel百宝箱9.0无限制破解版

    热门讨论 2012-02-03 19:05:29
    【合并与合计】:可以任意指定两列,对其中一列的数据合并同类项,而另一列对应的数值则求合计,合计结果存放在合并区域中 【建立图片目录】:对指定文件夹下所有图片(GIF、PNG、JPG,JPEG)建立目录,并批量导入 ...
  • 【合并与合计】:可以任意指定两列,对其中一列的数据合并同类项,而另一列对应的数值则求合计,合计结果存放在合并区域中 【建立图片目录】:对指定文件夹下所有图片(GIF、PNG、JPG,JPEG)建立目录,并批量导入 ...
  • Excel百宝箱8.0

    2011-06-07 21:32:17
    【取消合并还原合并数据】:对一列中合并后的单元格取消合并,且恢复合并前所有数据 【合并数据并复制】:可以将一个区域的数据直接复制到一个单元格中 【合并区域自动换行】:可以让具有合并单元格的区域在自动换行...

空空如也

空空如也

1 2 3 4 5
收藏数 82
精华内容 32
关键字:

vba获取某一列