首页
学习
活动
专区
圈层
工具
发布

Excel实战技巧55: 在包含重复值的列表中查找指定数据最后出现的数据

文章详情:excelperfect 本文的题目比较拗口,用一个示例来说明,如下图1所示,是一个记录员工值班日期的表,在安排每天的值班时,需要查看员工最近一次值班的日期,以免值班时间隔得太近。...得到一个由行号和0组成的数组,MAX函数获取这个数组的最大值,也就是与单元格D2中的值相同的数据在A2:A10中的最后一个位置,减去1是因为查找的是B2:B10中的值,是从第2行开始的,得到要查找的值在...B2:B10中的位置,然后INDEX函数获取相应的值。...组成的数组,由于这个数组中找不到2,LOOKUP函数在数组中一直查找,直至最后一个比2小的最大值,也就是数组中的最后一个1,返回B2:B10中对应的值,也就是要查找的数据在列表中最后的值。...图3 使用VBA自定义函数 在VBE中输入下面的代码: Function LookupLastItem(LookupValue AsString, _ LookupRange As Range,

15.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【汇编语言】包含多个段的程序(一)—— 在代码段中使用数据和栈

    我们通过在源程序中定义段来进行内存空间的获取。 上面是从内存空间获取的角度上,谈定义段的问题。我们再从程序规划的角度来谈一下定义段的问题。...对于使用多个段的问题,我们先简单说到这里,后面我们将以这样的顺序来深入地讨论多个段的问题: (1)在一个段中存放数据、代码、栈,我们先来体会一下不使用多个段时的情况。...从规范的角度来讲,我们是不能自己随便决定哪段空间可以使用的,应该让系统来为我们分配。我们可以在程序中,定义我们希望处理的数据,这些数据就会被编译、连接程序作为程序的一部分写到可执行文件中。...当可执行文件中的程序被加载入内存时,这些数据也同时被加载入内存中。与此同时,我们要处理的数据也就自然而然地获得了存储空间。 2.2 代码实现 具体的做法看下面的程序。...在代码段中使用栈 3.1 问题引入 完成下面的程序,利用栈,将程序中定义的数据逆序存放。

    41610

    C++核心准则R.30: 只有在包含明确的生命周期语义时使用智能指针作参数

    R.30: Take smart pointers as parameters only to explicitly express lifetime semantics R.30: 只有在包含明确的生命周期语义时使用智能指针作参数...如果一个函数只是需要一个部件本身,接受一个智能指针作参数是错误的。它应该可以接受所有部件对象,而不只是一个生命周期被按照特定方法管理的对象。不需要管理生命周期的函数应该使用原始的指针和引用。...(简单)如果一个函数使用了可拷贝的(重载了操作符->和操作符*的)智能指针类型的参数但是只是调用了运算符*、->或者get(),发出警告并建议使用T*或者T&。...标记定义了(重载了操作符->和操作符*的)可拷贝/可移动智能指针类型的参数,但在函数体中却从未使用拷贝和移动功能,指针从未被修改也没有交给一个会那么做的函数的情况。那意味着所有权语义根本没有被使用。...建议使用T*或者T&。

    92120

    在 SQL 中,如何使用子查询来获取满足特定条件的数据?

    在 SQL 中,可以使用子查询来获取满足特定条件的数据。子查询是嵌套在主查询中的查询语句,它返回一个结果集,可以用来过滤主查询的结果。...下面是使用子查询来获取满足特定条件的数据的一般步骤: 在主查询中使用子查询,将子查询的结果作为条件。 子查询可以在主查询中的 WHERE 子句、FROM 子句或 HAVING 子句中使用。...子查询可以返回单个值或多个值,具体取决于使用的运算符和子查询的语法。 以下是一些示例: 使用子查询在 WHERE 子句中过滤数据: SELECT column1, column2, ......FROM (SELECT column FROM table WHERE condition) AS temp_table; 使用子查询在 HAVING 子句中过滤数据: SELECT column1,...FROM table GROUP BY column1 HAVING column1 > (SELECT AVG(column1) FROM table); 请注意,子查询的性能可能会较低,因此在设计查询时应谨慎使用

    9.9K10

    PG原生解码工具pg_recvlogical的使用-在脑裂时帮我们找回丢失的数据

    另外逻辑解码在某些关键时候可以救命,比如主从脑裂的场景,如果在主备切换后原主库还有业务写入会造成脑裂,这时候如果创建了逻辑复制槽,那么可以将某段时间的xlog日志解码成sql语句,找回丢失的数据,这一点很有用...pg有很多逻辑解码的插件,其中pg原生的逻辑解码工具pg_recvlogical就可以使用,它使用默认的test_decoding的插件,该插件位于pg源码contrib/test_decoding目录下...下面具体看看pg_recvlogical的使用以及在主备脑裂时候如何找回丢失的数据。...,也可以不启动,在需要解码xlog时再启动解码) [postgres@db1 pginst1]$ pg_recvlogical --start -S logicslot -d test -f logical_decoding.log...使用逻辑解码有几点需要注意: 1、逻辑复制槽使用一定要注意因为无法消费造成主库的xlog堆积的问题 2、如果之前已经解码过一段区间的xlog,restart_lsn会进行推进,这时如果新解码的区间包含原有

    2.2K20

    POI判断某个单元格是否是合并单元格

    有时我们需要读取复杂的excel的数据,比如下面表格: image.png 注:比如我们的数据是上面N个单元组成,且每个单元所占行数可能不同。...第一列占据一列,中间数据每个占用一个单元格,最后一列与第一列占用相同的行数,这时我们需要获取起始单元格占用几行(起始行--结束行),获取到这些数据后我们就能读取中间单元格数据(这些数据可以作为上面单元的一个属性...range.getLastColumn(); int firstRow = range.getFirstRow(); int lastRow = range.getLastRow...} return new Result(false,0,0,0,0); } 注:通过上面这个方法我们就能验证某个单元格是否是合并单元格,以及该单元格所属的合并单元格的开始行...、结束行、起始列以及结束列,由于我们使用excel时习惯上把第一行当做行1(POI中第一行行号为0),所以每个数据都加了1.

    3.8K20

    使用Google App Script和Google Sheet自动生成数据仪表盘

    从表面上来看这是一个简单的任务,但是在使用仪表盘前需要记住以下两点: 保持数据的易用性。 保持数据的时效性,无需繁琐的数据输入就可以使数据保持最新的状态。...上面的第一点已经在我的队友发布的如何使用Google Sheet制作杀手级的数据仪表盘一文中得到了解决。这周我们专注于利用Google App Script来实现仪表盘数据的自动更新。...花一些时间来熟悉你将要使用的API是很有必要的。下面概述的方法非常灵活,但是在某些类型数据或者数据量很大的情况下,使用专用软件可能是更佳的选择。...这部分的结果是完全依赖于合约的内容的,我们约定当遇到空白的单元格时就认为已经获取了所有需要的字段名。...xtract的SUBSCRIBE值对应的就是前面获取到的数组中的最大值,如果某月范围内没有值,那么就会执行IF语句并在相应的位置填充0或者保持空值。 最后,我们可以根据格式化的数据创建得到仪表盘。

    8.7K60

    Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查

    今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都是...终于凭借着一次Debugg发现的问题,原来在使用Mabatis中的insert或者insertSelective方式插入时,如使用int insert(TestGenKey testGenKey)时,返回值...int表示的是插入操作受影响的行数,而不是指的自增长id,那么返回的自增id到底去哪里了呢?...通过下面的Debugg我们知道自增id返回到testGenKey的原对象中去了。 举例示范配置 数据库示例表  generator的配置文件 给需要获取自增长

    3.6K10

    EasyExcel自定义下拉注解的三种实现方式

    一、简介 在使用EasyExcel设置下拉数据时,每次都要创建一个SheetWriteHandler组件确实比较繁琐。...创建后设置下拉列表 在隐藏的sheet中存储下拉选项,然后设置数据验证以实现下拉功能 最后这里添加了阻止输入非下拉选项的值的校验 /** * 处理Excel下拉列表的SheetWriteHandler...row.createCell(col).setCellValue(values[i]); } } } 三、实际应用 包含三种方式,固定值、动态获取、码值数据库获取...>) null); } } 下拉效果 输入非下拉框数据效果 总结 方式一只需要添加注解@ExcelSelected(source = {"x1", "x2"})即可 方式二在查询复杂的情况下使用...,然后在ExcelSelectedResolve类中去添加获取下拉数据的方法。

    1.5K10

    DataGridView使用小结

    dataGridView1.Rows[e.RowIndex].Selected = true;                     }                     //只选中一行时设置活动单元格...GetClipboardContent()); 3).只显示自定义列 dataGridView1.AutoGenerateColumns = false;//必须在代码中设置 4).显示图片 通常,我们将图片路径保存在数据库中...DataGridViewElementStates.Visible); //所有可见行总高         int k = myDataGridView.Height; //控件高度         int l = myDataGridView.Rows.GetLastRow...(DataGridViewElementStates.Visible);//最后一行索引         int count = myDataGridView.Columns.Count;//列总数         ...,原因是列可以进行排序,排序标志符号在列标题上占了空间。

    3.3K20

    精读《Excel JS API》

    一句话概括就是,在 JS API 内可以使用 formula,即 JS API 是公式能力的超集,它包含了对 Excel 工作簿的增删改查、数据的限制、RangeAreas 操作、图表、透视表,甚至可以自定义...第二步就是对单元格级别进行操作,比如对单元格进行区域选中,获取选中区域,或者设置单元格属性、颜色,或者对单元格数据进行校验。...自定义公式也在这个环节,因为单元格的值可以是公式,而公式可以利用 JS API 拓展。 最后一步是拓展行为,即在单元格基础上引入图表、透视表拓展。...这么做是出于 API 设计的合理性,因为 Excel 使用 Range 概念表示连续单元格。...这种设计理念的好处是,把范围局限在单格单元格,就可以覆盖 Cell 概念,而聚焦在多个单元格时,可以很方便的基于二维数据结构创建表格、折线图等分析图形,因为二维结构的数据才是结构化数据。

    3.6K20

    【C语言必学知识点七】你知道在动态内存管理中存在的内存泄露问题吗?遇到内存泄露时应该如何处理?今天跟你好好介绍一下如何正确使用calloc与realloc!!!

    接下来我们就来认识一下最后一个动态函数realloc; 二、realloc函数 在动态内存函数中,realloc的存在让动态内存管理变的更加便捷。...其实单从过程上来看,他们之间就是存在区别的: 通过动态函数申请的空间,因为可以通过free来主动释放,因此我们经过上述操作后,在内存空间中仍在使用的只有重新申请的空间; 通过数据类型创建的数组,因为它的内存空间我们无法主动释放...,所以上述过程中并不会执行释放空间的操作,因此最后内存空间中还在使用的是两块空间: 因此对于无法进行大小修改的空间,realloc是无法发挥它的作用的。...下面我们就来看一下realloc如何改变空间大小: 可以看到,当我们在使用realloc时,realloc会直接在传入的指针p的基础上进行扩容。...函数便会在有足够空间的位置申请一块新的空间,并将源空间中的数据复制到新的空间中,最后再释放源空间的内存; 从这里我们不难看出,通过realloc进行空间扩容时,函数的返回值不一定是传入的指针所指向的地址

    55910
    领券