精华内容
下载资源
问答
  • Excel VBA判断最后一行/列

    千次阅读 2017-11-14 15:20:00
    判断到哪里结束应该是Excel VBA最常见的操作之,下面代码能实现这个功能: FunctionLastColumn()AsLong DimixAsLong ix=ActiveSheet.UsedRange.Column-1+ActiveSheet.UsedRange.Columns.Co...

    判断到哪里结束应该是Excel VBA最常见的操作之一,下面代码能实现这个功能:

     

    
    
    1. Function LastColumn() As Long     
    2.     Dim ix As Long 
    3.     ix = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count 
    4.     LastColumn = ix   
    5. End Function 
    6.  
    7.  
    8. Function LastRow() As Long 
    9.     Dim ix As Long 
    10.     ix = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 
    11.     LastRow = ix 
    12. End Function 









    本文转自 h2appy  51CTO博客,原文链接:http://blog.51cto.com/h2appy/825128,如需转载请自行联系原作者
    展开全文
  • vba 快速定位当前EXCEL最后一栏 工作的需要,有时会对EXCEL数据进行处理,比如格式化,有数据的单元格画横线。 最初,傻傻的,直接用个循环从第1,一直往后找,判断是否为空,真傻。 Function ...

    工作的需要,有时会对EXCEL数据进行处理,比如格式化,有数据的单元格画横线。

    最初,傻傻的,直接用个循环从第1行,一直往后找,判断是否为空,真傻。

    Function FindLastCell()
    
        Dim i As Long
        
        For i = 1 To 65536
            
            If Cells(i, 1).Value = "" Then
                Exit For
            End If
            i = i + 1
        Next
           
        FindLastCell = i-1
    
    End Function 
    

     

    后来用CTRL+END,然后录制宏,终于发现最后的行 原来VBA 一早就有个常量放在那里等着你用啦———》 xlLastCell

     

    posted on 2013-11-21 18:11 szsunny 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/sxypeace/p/3436108.html

    展开全文
  • 这张sheet最后一行有边框的应该是51行,但返回值是错的。 ![图片说明](https://img-ask.csdn.net/upload/201904/14/1555251282_731458.png) 但是在另外一张测试表格里,返回值是正确的。 ![图片说明]...
  • 前景提要之前我们分享了一些简单的工作表数据的拆分,之所以说是比较的简单,因为工作表的数据比较的标准,并没有太复杂的结构,也并不需要做出太多的判断,所以我觉得还是属于简单的工作表拆分,不过这样的工作表...

    前景提要

    之前我们分享了一些简单的工作表数据的拆分,之所以说是比较的简单,因为工作表的数据比较的标准,并没有太复杂的结构,也并不需要做出太多的判断,所以我觉得还是属于简单的工作表拆分,不过这样的工作表拆分,已经没有办法满足大家工作的需要了,毕竟日常工作中怎么可能会有这么标准的数据,之前就有小伙伴提供过一个案例,就是和我们昨天的内容差不多,但是也有一点不同,单元格中空行,常规的筛选都不可能实现,想要筛选似乎很难,我们来看看案例

    场景说明

    我们来看看我们的数据源

    08b1b1b2969b9d6af1723a27c75ad954.png

    在进行数据统计的过程中,为了方便区分,所以每个班级的数据中间都是间隔了一个空行,这也是很多小伙伴们日常做表常规操作吧,看起来是很清晰,但是数据处理则是非常的麻烦,筛选?不可能的

    7dbce223c56e2649a64192a60dbea976.png

    只能筛选到其中的很小一部分,那么在这样的情况下,我们要如何进行数据拆分呢?来,和我一起来尝试下吧

    代码区

    Sub chai()
    Dim rng As Range, sth As Worksheet, sthn As Worksheet, Trng As Range, firstR As Range
    Set sth = ActiveSheet
    Set rng = Application.InputBox("请选择表头区域", "表头区域的确定", , , , , , 8)
    TitleR = rng.Rows.Count
    TitleC = rng.Column
    TitleColNum = rng.Columns.Count
    TargetRowNum = InputBox("请输入拆分标准列的列数")
    TargetRowNum = Int(TargetRowNum)
    l = Cells(Rows.Count, TargetRowNum).End(xlUp).Row
    Set firstR = Cells(TitleR + 1, TargetRowNum)
    k = 0
    For i = TitleR + 2 To l
        If firstR <> "" And i <> l Then
        k = k + 1
            If Cells(i, TargetRowNum) <> firstR Then
                Worksheets.Add after:=Worksheets(Worksheets.Count)
                Set sthn = ActiveSheet
                sthn.Name = firstR
                rng.Copy sthn.Cells(1, 1)
                sth.Activate
                sth.Range(Cells(i - k, TitleC), Cells(i - 1, TitleColNum + TitleC)).Copy sthn.Cells(TitleR + 1, 1)
                k = 0
                Set firstR = Cells(i, TargetRowNum)
            End If
            Else
                If i <> l Then
                    Set firstR = firstR.Offset(1, 0)
                        Else
                            k = k + 1
                            Worksheets.Add after:=Worksheets(Worksheets.Count)
                            Set sthn = ActiveSheet
                            sthn.Name = firstR
                            rng.Copy sthn.Cells(1, 1)
                            sth.Activate
                            sth.Range(Cells(i - k, TitleC), Cells(i, TitleColNum + TitleC-1)).Copy sthn.Cells(TitleR + 1, 1)
                End If
        End If
    Next i
    End Sub

    好吧,我也觉得今天的代码有点长了。先来看看这个代码执行的效果

    b99f43559cc42dd98a6db707fce72ce6.png

    039647c54a83f56dd93dac1365fa21d6.png

    这里有一点变化,这里需要输入的是拆分的标准列,这里标准列其实应该是依据列比较合适,这份表我们现在要按照班级来进行拆分,这里我们不手动选择,因为有空行,我们要选择区域的话,不太好选择,这里我们换成直接手动输入列数,这里我们按照班级来进行拆分,所以直接输入第3列

    然后就可以出结果了。

    eb373ebb151aea6bfa56556d45e2aac8.png

    已经完成了班级的拆分,随便抽一个来看看结果

    9c8c7d8821ad3cc2ba881ff575809f03.png

    代码分析

    看看代码

    Set rng = Application.InputBox("请选择表头区域", "表头区域的确定", , , , , , 8)
    TitleR = rng.Rows.Count
    TitleC = rng.Column
    TitleColNum = rng.Columns.Count
    TargetRowNum = InputBox("请输入拆分标准列的列数")
    TargetRowNum = Int(TargetRowNum)

    这一大段应该都是基础知识了,主要是实现表头的确认以及inputbox输入框的利用,很简单的

    今天的重点和难点就是要找到一个合理的判断方式,因为班级是从上往下是完全一致的,仅仅是空格隔开了,所以我们只需要循环班级列,如果碰到了单元格内容不等于上面一个内容的就是,就证明完成了一个班级,就可以将这部分的数据复制过去了,

    f333e08ed8bf97a71f65a57935723da0.png

    真的是这样的嘛?不对,因为如果这样执行的话,我们忽略了表格中最大的一个BUG,空格,如果是空格,我们还要做出进一步的判断,来看其中一部分代码

    For i = TitleR + 2 To l
        k = k + 1
            If Cells(i, TargetRowNum) <> firstR Then
                Worksheets.Add after:=Worksheets(Worksheets.Count)
                Set sthn = ActiveSheet
                sthn.Name = firstR
                rng.Copy sthn.Cells(1, 1)
                sth.Activate
                sth.Range(Cells(i - k, TitleC), Cells(i - 1, TitleColNum + TitleC)).Copy sthn.Cells(TitleR + 1, 1)
                k = 0
                Set firstR = Cells(i, TargetRowNum)
            End If
            Else
                    Set firstR = firstR.Offset(1, 0)
        End If
    next i 

    我们先忽略i和l之间的判断,来研究其中的一部分代码

    这里就是判断单元格的内容和之前的单元格不同的时候的操作,这里我们需要涉及对于空格的判断

    进入第一个小判断,这时候已经是来到了空格区域了

    0510409debd8fa71365c5675e86a9295.png

    当我们将上面的这一段常规数据复制到新建表格之后,我们还是要将初始单元格firstR进行重新定义,这时候我们定义为现在i所指向的单元格,也是是空格,空格是没有办法进行判断的,所以当我们再次进行循环判断的时候,我们要在前面加一个句

    If firstR <> "" then

    这样就可以规避单元格为空的情况,如果单元格为空,则将下一个单元格定义为新的firstR,

    可能这里有小伙伴们会说,为什么不直接将下一行作为firstR呢?这样不是更方便嘛?这里就牵涉到一个通用性的问题,如果其他的数据表,中间的间隔行不是1行,是2行,或则跟多行呢?所以这里还是通过判断的方式比较好

    这样就结束了嘛?

    没有

    和我们上面的完整代码还有一大段的差距,差距在哪里呢?

    末尾是否到达最后一行的判断

    5af89d5e8ae2c20b39f3ab5cb8845e72.png

    当然上面的方法并不是唯一也不是最简单的方法,不过我还是希望大家能够理解者方法的思路和代码执行的过程,这对于大家独立分析这种情况有很大的帮助,

    展开全文
  • 程序功能: 判断excel文件中某个工作簿中第一列的最后一行数据的行数(假设第一行有数据,以后每行数据为连续的,无空值。)
  • 从65536往上数 ...第一列往上数,最后一个单元格行号 cells(rows.count,1).end(xlup).row 需要注意03版excel文件处理行号边界为65536 新版的为1048576。在使用过程中请注意文件边界问题。 ...
    1. 从65536行往上数
      range(“A65536”).end(xlup).row

    2. 从使用过的行号计算
      会导致重复多数行号,需要慎用
      usedrange.rows.count

    3. 第一列往上数,最后一个单元格行号
      cells(rows.count,1).end(xlup).row

    4. 需要注意03版excel文件处理行号边界为65536
      新版的为1048576。在使用过程中请注意文件边界问题。

    展开全文
  • VBA常用技巧

    2014-12-21 16:39:28
    技巧3 获得指定、列中的最后一个非空单元格 12 技巧4 定位单元格 12 技巧5 查找单元格 12 5-1 使用Find方法 12 5-2 使用Like运算符 12 技巧6 替换单元格内字符串 12 技巧7 复制单元格区域 12 技巧8 仅复制数值到另...
  • VBA实用代码拾零

    千次阅读 2007-04-20 21:03:00
    比如,我以前判断一个表的最后一行使用的是这个办法:i=3do while not(isempty(sheets("工作表名").cells(i,1).value)) i=i+1loop结果行数就是:i-1后来,才发现居然用一行代码就可以实现:i = Range("A65536").
  • VBA与数据库

    2015-11-19 18:07:38
    •实例3-25 使用FIRST函数与LAST函数查询第一条记录和最后一条记录的字段 78 •实例3-26 使用Parameters参数动态查询记录(DAO)指定单个参数 79 •实例3-27 使用parameters参数动态查询记录(DAO):指定多个参数 ...
  • 注意,每个excel文件中有效数据判断标准是A列的最后一个有数据的单元格的行号,比如A列到第10结束,B列到第11结束,那么程序将不会复制第11。 说明:鄙人也不是大闲人,也就没有去迎合各种需求,只是...
  • VBA编程技巧大全

    2013-08-05 09:03:19
    技巧3 获得指定、列中的最后一个非空单元格 17 技巧4 定位单元格 20 技巧5 查找单元格 21 5-1 使用Find方法 21 5-2 使用Like运算符 25 技巧6 替换单元格内字符串 26 技巧7 复制单元格区域 27 技巧8 仅复制数值到另...
  • EXCEL VBA常用技巧

    2010-02-09 22:28:27
    技巧3 获得指定、列中的最后一个非空单元格 10 技巧4 定位单元格 13 技巧5 查找单元格 14 5-1 使用Find方法 14 5-2 使用Like运算符 18 技巧6 替换单元格内字符串 19 技巧7 复制单元格区域 20 技巧8 仅复制数值到另...
  • 原文排版如下(红色是自动编号,黑色是手动编号): 用代码全部变成自动编号后如下: ...n = ActiveDocument.Paragraphs.Count '判断文章共有几个段落,要注意,最后一个段落很可能只是一个换符,...
  • Excel VBA技巧实例手册

    2016-07-28 22:29:39
    技巧031l引用数据列的最后一列单元格 技巧032引用整行数据列 技巧033引用不同长度的非连续列 技巧034引用条件格式单元格 技巧035引用工作表的所有单元格 3.2 获取单元格信息 技巧036获取标题的信息 技巧037获取...
  • 例如:个综合性的excel报表,第1C列是省份,而且此综合性报表有多个sheet要拆分,想要实现拆分所有sheet,并按省份合并成一个excel表,比如所有辽宁省的数据合并成一个excel文件以不同的sheet体现。用此脚本即可...
  • Excel VBA实用技巧大全 附书源码

    热门讨论 2010-10-08 18:59:24
    04046引用输入了任何内容的最后一行单元格(多列情况之一) 04047引用输入了公式或值的最后一行单元格(多列情况之二) 04048引用输入了任何内容的最后一列单元格(单行情况之一) 04049引用输入了公式或值的最后一...
  • 经过多方查找原因,最后在一些博客中发现了可能存在的原因为Excel使用ADODB操作时,默认会以前8数据来判断整列的数据类型及结构,包括字符串的长度。如果第9开始出现都大于前8中最长的单元格内容时,将会被...
  • 函数作用:获取最后一行行数.........................54 '27.函数作用:判断是否连接在线.........................54 '28.函数作用:币种转换.................................54 '29.函数作用:检验工作表是否有可...
  • Excel VBA与数据库整合应用范例精讲

    热门讨论 2011-10-29 18:48:38
    实例3-25 使用FIRST函数与LAST函数查询第一条记录和最后一条记录的字段 实例3-26 使用Parameters参数动态查询记录(DAO):指定单个参数 实例3-27 使用Parameters参数动态查询记录(DAO):指定多个参数 实例3-28...
  • 26.获取最后一行行数 27.判断是否连接在线 28.币种转换 29.检验工作表是否有可打印内容 30.查找一字符串(withinstr)在另一字符串中(findstr1)中某一次(startnum)出现时的位置,返回零表示没找到。 31.增加文件路径...
  • 实例3-25 使用FIRST函数与LAST函数查询第一条记录和最后一条记录的字段 实例3-26 使用Parameters参数动态查询记录(DAO):指定单个参数 实例3-27 使用Parameters参数动态查询记录(DAO):指定多个参数 实例3-28...
  • Excel百宝箱8.0

    2011-06-07 21:32:17
    函数功能与参数:判断指定区域中是否有重复单元格的函数只有个参数即为引用,结果为True时表示有重复,否则无重复。 函数名称:File  函数功能与参数:用于创建带链接的文件目录,有三个参数,包括路径、文件名...
  • 【筛选唯一值】:以选择区域左边列为条件进行唯一值筛选,输入1则删除重复值所在,输入2则隐藏重复值所在 【相同项与不同项】:提取两列数据的共同项和不同项,也可以对两列数据的不同项或者相同项进行标示 ...
  • 【筛选唯一值】:以选择区域左边列为条件进行唯一值筛选,输入1则删除重复值所在,输入2则隐藏重复值所在 【相同项与不同项】:提取两列数据的共同项和不同项,也可以对两列数据的不同项或者相同项进行标示 ...
  • 【清除列中重复值】将选择中重复出现的数据删除(提供保留第一次出现还是最后一次出现的数据 的选择机会,也提供是否对删除数据加背景色突出的选择机会) 【标示重复值】将重复出现的数据用 颜色标示出来,不同值...
  • • 计算目标日期所在季度的最后一天 • 返回目标日期是全年中的第几天 • 判断是否为闰年 • DATEDIF函数基本用法 • 利用日期函数计算员工工龄 • 计算指定日期的星期值 • 计算上月月末日期的星期 • 指定某月的第...
  • EXCEL百宝箱8.0终极版

    2011-11-05 16:48:02
    函数功能与参数:判断指定区域中是否有重复单元格的函数只有个参数即为引用,结果为True时表示有重复,否则无重复。 函数名称:File  函数功能与参数:用于创建带链接的文件目录,有三个参数,包括路径、文件名...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

vba判断最后一行