精华内容
下载资源
问答
  • 即在Excel工作表中某列不连续的单元格数据进行连续编号,在下图中只有第三列的单元格数据是连续的,第二类数据不连续,我们希望针对第二列数据对结构体进行编号,常规的自动编号方法只适用于连续的单元格数据 ...

    在日常工作学习中我们可能遇到下图这种情况,即在Excel工作表中对某列不连续的单元格数据进行连续编号,在下图中只有第三列的单元格数据是连续的,第二类数据不连续,我们希望针对第二列数据对结构体进行编号,常规的自动编号方法只适用于连续的单元格数据
    在这里插入图片描述
    为了解决上述问题,我们可以通过excel自动的函数就行解决,首先我们先了解这个函数
    COUNTA:COUNTA函数功能是返回参数列表中非空的单元格个数。利用函数 COUNTA 可以计算单元格区域或数组中包含数据的单元格个数。
    因此我们可以通过判断B列单元格数据是否为空进行排序,我们要求编号排列在B列非空单元数据那一行,我们通过下面公式解决
    =IF(B2="","",COUNTA(B$2:B2))
    接着可以直接下拉A2这个单元格,完成自动编号,结果如下图所示
    在这里插入图片描述

    展开全文
  • 在 Excel 中多行多列进行条件求和

    万次阅读 2018-12-17 03:21:08
    在 Excel 中多行多列进行条件求和问题由来源数据格式我的解决过程用 SUMPRODUCT 函数的失败过程分析错误解决问题用 SUMPRODUCT 解决问题我在 CSDN 的第一篇博客 问题由来 前几天,一名网友在微信群里求助,说有一...

    问题由来

    前几天,一名网友在微信群里求助,说有一个表格汇总数据不会算。经过两天努力,我帮他写了一个宏,顺利完成了任务。这个按字段汇总的宏我以后再说,今天只说验算的公式。
    由于源数据比较多,出于谨慎,我需要将宏算出来的汇总表进行验算,并且最好是用一个单元格用单个公式完成对源数据的加和运算,因此想编写一个公式把源数据表所有符合条件的数据加和,再对汇总表加和,比较两个和是否一致。

    源数据格式

    源数据是由上百个结构相同的数据块组成的数据块纵列。下面展示连续的两个数据块:
    两个数据块

    每个数据块的格式如下:

    1. 总共有21行、13列;
    2. 第1行是标题,第20、21行是需要被忽略的数据,从第2行到第19行是需要汇总的数据;
    3. 所有数据块的第二列是纵向标题,每块都一样,都是18个同样次序排列的字母;
    4. 每块数据块的第一行是横向标题,此部分每个数据块都不一样,且数量有多有少;
    5. 由此可以看出,需要求和每个数据块从第2行、第3列开始到第19行、第13列的数据块内的数据;

    为什么不能直接求和

    也许有人会说,直接求 C:M 的和不就行了?还真不行。每个数据块的第20行是一个合计行,不能被计算进总数内,所以不能直接求和。而这一个合计行的业务逻辑比较奇怪,我没看出这一行数据和主体数据块的关系,至少不是主体数据块的纵向求和,否则可以用求 C:M 的和然后除以 2 的方式来求所需要的总和。

    我的解决过程

    用 SUMPRODUCT 函数的失败过程

    这个公式需求看上去一点都不难,我不想用数组公式,用 SUMPRODUCT 函数看上去应该是一个非常理想的选择。于是我写了如下的公式:

    =SUMPRODUCT(C:M,((MOD(ROW(C:M)-1,21)+1)>1)*((MOD(ROW(C:M)-1,21)+1)<20)) ​​​​
    

    看上去很完美,用 C:M 指定汇总的列区域,用 ROW 求出单元格所在行的值后用两个 MOD 指出汇总的行区域。两个参数涉及区域都是 C:M,大小完全一样,符合 SUMPRODUCT 函数对各参数之间大小完全匹配的要求。
    但是,输入之后 Excel 提示我 #VALUE!

    分析错误

    问题到底出在什么地方?
    我先构造了一个小范围的公式,即只计算一个数据块,公式如下:

    =SUMPRODUCT(C1:M21,((MOD(ROW(C1:M21)-1,21)+1)>1)*((MOD(ROW(C1:M21)-1,21)+1)<20)) ​​​​
    

    然后用公式标签页的公式求值功能对公式的运算过程进行跟踪,发现问题出在 ROW 函数身上。
    我原以为,因为数组涉及到 C:M 多列,所以按 SUMPRODUCT 函数的工作流程,应该把涉及到的每个单元格都先用 ROW 求行值,再用 MOD 函数取余以确定其在每个数据块中的位置,就是说会生成一个21行×11列的数组。但跟踪下来完全不是这样。ROW 函数偷懒了。
    ROW 看到要计算的是范围是一个 C1:M21 的方块,并没有一个单元格一个单元格去老老实实地求行值,而是把 C1:M1,C2:M2……C21:M21 这21行作为21个计算单元,只计算了21次,得出了21个结果,而不是 21×11=231 个结果,这样当然就跟 C1:M21 不匹配了。

    解决问题

    用 SUMPRODUCT 似乎走进了死胡同,我只能回头考虑用 SUM 的数组公式。一试之下,发现 SUM 比 SUMPRODUCT 果然要聪明一点,能清楚地领会我的意思。我的公式如下:

    {=SUM(((MOD(ROW(C:C)-1,21)+1)>1)*((MOD(ROW(C:C)-1,21)+1)<20)*IF(ISNUMBER(C:M),C:M,))}
    

    用了基本和上面 SUMPRODUCT 里一样的条件设置,就把和求出来了,对行值的判断还仅仅用了 C 一列。不同的是多加了一个 ISNUMBER 的判断,因为 SUM 毕竟不是 SUMPRODUCT,遇到非数值数据不会自动转化为零。

    用 SUMPRODUCT 解决问题

    那用 SUMPRODUCT 真的不能写这个公式吗?非也,经过我脑洞大开的思索,我在原来的公式里多加了一个条件判断

    C1:M1=C1:M1
    

    公式于是变成了这样:

    =SUMPRODUCT(C:M,((MOD(ROW(C:C)-1,21)+1)>1)*((MOD(ROW(C:C)-1,21)+1)<20)*(C1:M1=C1:M1))
    

    看上去是完全的废话条件,因为一个数肯定等于自身。但这个可谓是神来之笔,因为这一个多加的条件强迫 SUMPRODUCT 把参数内的单元格认真对待,横向的每一个单元格兄弟都不能被忽略,不能被第一列单元格大哥的光芒所掩盖。这样,逗号两边的两个参数所代表的数组终于得到平等,可以共同参与运算了。

    我在 CSDN 的第一篇博客

    这是我在 CSDN 的第一篇博客,见笑见笑。

    展开全文
  • listview数据自动排序

    千次阅读 2016-03-24 11:49:14
    但是有一些文件目录,未知等数据载入时,就要listview进行排序,当然网上有很标头排序,但是我们亦可以进行修改,就可以在载入时固定排序载入。 1、在载入数据进listview后,加入如下代码;  m_nDataColSort=...
    在载入listview数据排序时,如果被载入数据已排序,就只要依次载入即可。但是有一些文件目录,未知等数据载入时,就要对listview进行排序,当然网上有很多标头排序,但是我们亦可以进行修改,就可以在载入时固定排序载入。
    
    1、在载入数据进listview后,加入如下代码;   
    m_nDataColSort=0;
      //IsAsc=!IsAsc;
      RzListView1->AlphaSort();
    2、在listview事件OnCompare加入代码;
    if(m_nDataColSort==0)
    {//这里看你要对哪一列进行排序比对了相应的修改即可
    Compare=CompareText(Item1->SubItems->Strings[0] ,Item2->SubItems->Strings[0] );
    }
    展开全文
  • 通过索引找到每一行所对应数据,之后的所有数据进行排序(本实例只进行降序排列),排序结果的每个数据的索引就是该数据所对应行的位置。 【问题解决】 1、如何知道那一需要排...

    【提出需求】

           点击表格头部的时候根据对应列的所有值来进行排序,最终显示排序后的数据行。

    【具体效果】

    【步骤思路】

           点击需要排序列的数据头,获取数据头所在列的索引。通过索引找到每一行所对应列的数据,之后对该列的所有数据进行排序(本实例只进行降序排列),排序结果的每个数据的索引就是该数据所对应行的位置。

    【问题解决】

           1、如何知道那一列需要排序?

                 想要知道那些一列的数据需要排序,实现的方法有很多种,但是最重要的一点是必须要知道所点击的头部所在的列数。最简单的方法就是给需要排序的头部添加排序列名,之后判断该点击的头部是否是排序列名(判断的方式也有很多种,本实例使用的是className属性,因为就只有一个类名。还有其他方式getAttribute、match、search、indexOf、lastIndexOf等函数),如果是则执行排序处理代码块,如果不是则不做任何的处理。

    if(this.className)

           相关知识点:

                 文章:JavaScript对Html元素的Class操作 - className、classList、Attribute

                 文章:JavaScript字符串和数值对象

     

           2、虽然获取了排序列的索引,但是如何获取每一行的所对应列的数据呢?

                 排序列有一个特征就是相同一列所在行的索引都是相同的,所以获取了排序列的索引之后,只需要获取每一行的节点集合,然后再访问其节点内容的数据列集合,然后再通过索引去访问对应数据列的数据(通过innerText获取数据的文本值,如果数据是数值字符的话,一般会自动转化为数值,不过最好人为转化以下)。

    ContTrList[j].getElementsByTagName("td")[this.index].innerText;

           相关知识点:

                 文章:JavaScript之DOM操作总结

     

            3、虽然获取了每一行的数据,但是如何知道排序后该数据对应的是哪一行数据?

                 想要解决这个问题也有很多种方式,但是都比较困难,例如可以通过自定义属性,但是这种方式无法解决跨域问题,也可以通过其他数组存储索引等等。本实例使用了二维数组,对每组数组元素的第二个元素赋予该数值对应行的索引值,从而解决无法跨域或者获取麻烦的问题的

    for(var j = 0; j < ContTrList.length; j++) {
        //该for循环是遍历内容区中的tr标签,并且查找对应的td标签
        sortArray[j][0] = ContTrList[j].getElementsByTagName("td")[this.index].innerText;
        sortArray[j][1] = j;
    }

            相关知识点:

                 文章:JavaScript数组Array对象知识点详解

                 文章: JavaScript创建二维数组或多维数组

           注意:排序之前,需要确定行内的数据是数值还是字符串,是升序还是降序等等。通常的方法自然是遍历所有的列数据,看最终返回的结果。本实比较懒,只对第一个进行了判断,在这里安利一波isNaN ()函数。isNaN() 函数用于检查其参数是否是非数字值。如果是非数字值,则返回true,否则返回false。这样我就省去了通过正则表达式去数据是字符还是数值了。

    //判断是数值排序还是字符排序
    if(!isNaN(sortArray[0][0])){
        sortArray.sort(sortNumber);
    }else{
        sortArray.sort();
    }

     

            4、获取了行索引之后,如何更新行数据呢?

                 索引是无法重复的,所以我们可以通过循环去访问排序后的数值所对应的行索引,这里要注意的是我们获取的只是对应行的节点。所以想要更新数据行也有很多种方法,例如:删除容器内的所有数据行子节点,之后通过遍历一个一个的插入。本实例直接通过拼接数据行的HTML字符串,直接更新父容器的数据行。

    //排序完毕之后开始调序
    for(var x = 0; x < ContTrList.length; x++) {
        newNodeHtml += "<tr>" + ContTrList[sortArray[x][1]].innerHTML + "</tr>";
    }
    //删除当前内容,插入新的内容
    Container.innerHTML = newNodeHtml;

             相关知识点:

                 文章:JavaScript之DOM操作总结

     

    【最终代码】

    //HTML代码
    <table border="1" cellpadding="5" style="border-collapse: collapse;text-align: center;">
    	<tbody>
    		<tr id="HeadTD">
    			<td class="sort">姓名</td>
    			<td class="sort">学号</td>
    			<td class="sort">语文</td>
    			<td class="sort">数学</td>
    			<td class="sort">英语</td>
    			<td class="sort">总分</td>
    			<td class="sort">平均分</td>
    		</tr>
    	</tbody>
    	<tbody id="ContTD">
    		<tr>
    			<td>张三</td>
    			<td>220305</td>
    			<td>11</td>
    			<td>22</td>
    			<td>33</td>
    			<td>22</td>
    			<td>44</td>
    		</tr>
    		<tr>
    			<td>李四</td>
    			<td>220302</td>
    			<td>33</td>
    			<td>44</td>
    			<td>66</td>
    			<td>99</td>
    			<td>33</td>
    		</tr>
    		<tr>
    			<td>黄五</td>
    			<td>220307</td>
    			<td>22</td>
    			<td>55</td>
    			<td>22</td>
    			<td>55</td>
    			<td>66</td>
    		</tr>
    		<tr>
    			<td>赵六</td>
    			<td>220303</td>
    			<td>44</td>
    			<td>22</td>
    			<td>33</td>
    			<td>66</td>
    			<td>88</td>
    		</tr>
    	</tbody>
    </table>
    
    //JavaScript代码
    window.onload = function() {
    	var HeadTD = document.getElementById("HeadTD");
    	var ContTD = document.getElementById("ContTD");
    	var HeadList = HeadTD.getElementsByTagName("td");
    	var ContTrList = ContTD.getElementsByTagName("tr");
    	var sortArray = new Array();
    	var newNode;
    	for(var i = 0; i < HeadList.length; i++) {
    		HeadList[i].index = i;
    		HeadList[i].onclick = function() {
    			if(this.className) {
    				newNode = "";
    				for(var j = 0; j < ContTrList.length; j++) {
    					sortArray[j] = new Array();
    					sortArray[j][0] = ContTrList[j].getElementsByTagName("td")[this.index].innerText;
    					sortArray[j][1] = j;
    				}
    				
    				if(!isNaN(sortArray[0][0])){
    					sortArray.sort(sortNumber);
    				}else{
    					sortArray.sort();
    				}
    
    				for(var x = 0; x < ContTrList.length; x++) {
    					newNode += "<tr>" + ContTrList[sortArray[x][1]].innerHTML + "</tr>";
    				}
    
    				ContTD.innerHTML = newNode;
    			}
    		}
    	}
    }
    function sortNumber(b, a) {
    	if(a > b) {
    		return 1
    	} else if(a < b) {
    		return -1
    	} else {
    		return 0
    	}
    }

     

    展开全文
  • 对数据排序不仅可以是单列或单行进行排序,还可以进行多字段同时排序,从而达到想要的效果。excel如何对数据进行多字段同时排序条件组合和条件筛选呢如图所示 【解决方法,教程视频资料如下】 本教程视频...
  • 4、将人名对应数据多列)单行输出 其实就是在输出的时候,将对应数据用字符串连接起来写入即可 5、数据类型的训练,参数类型设置 例如,我们写的是text,那么在函数参数中的设置是怎样的,最后设置成如下类似的 ...
  • pandas多列数据合并的列名处理方法

    千次阅读 2018-08-28 15:45:23
    有时候我们需要将时间序列上个时间点的数据列按顺序合并到一个dataframe中,我们会使用 data = pd.merge(data, data_later, how='left', on=['code']) 这样的代码将数据进行合并 之前再加上一个for循环就可以...
  • delphi实现dbgrideh点击列自动排序

    千次阅读 2014-11-04 17:31:52
    dbgrideh控件本身是支持点击列自动排列的,只要设置
  • 在没有学习python用于办公自动化之前,都是采用漫长的复制黏贴,数据分列还有excel的次函数才能实现,非常重复浪费时间,然后经过学习,我将这一个过程进行自动化处理,使用glob文件夹进行遍历,把数据整理好...
  • 排序,是数据整理当中最常见的一个步骤,本文介绍在建模时对数据排序的方法
  • 您可以使用FME Data Inspector属性进行整理,以手动对列进行排序,也可以在Workbench中使用Sorter转换器。Sorter函数类似于SQL函数:ORDER BY。在本教程中,您将学习如何在FME Data Inspector中表格数据进行排序...
  • 2、使用pandas组件,文件进行排序。 3、命令行执行数据获取及排序,写入文件; 以下是完整代码: #coding:utf-8 import re import argparse import pandas as pd parser = argparse.ArgumentParser...
  • 基本功能实现后,由于程序方面的需要,保证程序的实用性,需要添加新功能:导入JTable的数据之后,或者添加,删除之后使JTable能自动进行排序。查阅相关资料后,以下相关实现方法: 首先需要Table添加...
  • MySql查询返回多条数据多列合并

    千次阅读 2018-11-30 17:12:22
    最近帮人做了一个成绩单打印的功能,需要在成绩单上打印出成绩划分等级和具体的成绩范围,左思右想~~~在一条SQL搞定和循环条记录拼接之间徘徊,由于时间匆忙,还是选择了简单的查询、循环、拼接。但是还是不甘心,...
  • Python3股票数据进行分析

    万次阅读 多人点赞 2019-04-19 10:40:17
    2、算法交易(自动交易、黑盒交易或机器交易) 3、量化策略 4、量化选股 5、股票回测 二、股票数据 三、股票数据分析 1、导入股票时间序列数据 2、绘制股票成交量的时间序列图 3、绘制股票收盘价和成交量的...
  • 首先想到的方法是使用Excel的分列功能(Textto Column),将C列拆分成多行多列,如下所示。剩下的问题就是:如何将这个分列后的数据块串联成一个单列数据?可使用Offset函数满足此需求。(在Excel中,OFFSET函数的...
  • Fastreport 分组多列排序问题

    千次阅读 2012-05-31 22:58:00
    但是只能当前做分组的列进行排序。 那么怎么办呢? 研究了一下,那就再弄一个你需要做排序的分组呗,哪个字段需要做排序,就给哪个字段做一个分组,再选择顺序还是逆序进行排序。 然后把分组页眉,和分组...
  • ☞ ░ 前往老猿Python博文目录 ░ 在前面老猿的文章中,《Python学习随笔:使用xlwings读取和操作Excel文件》、《Python学习随笔:使用xlwings读取和操作...展示Excel文件内容》介绍了部分使用xlwings操作excel数据
  • 27.1 问题描述在做EBS表单开发时,虽然使用folder功能提供了排序功能,多行数据块可以前三列进行指定排序,也可以单击前三标题进行排序,但是不能列进行排序,如果要列进行排序,需要将要...
  • 工作中,大家经常会使用excel去处理数据以及展示,但是对于部分工作我们可以借助程序帮忙实现,达到高效解决问题的效果...在处理海(大)量数据时,用Excel处理可能不会那么方便操作,特别是,一屏显示不全的话,
  • MySQL如何JSON某个属性排序

    千次阅读 2019-03-02 17:13:57
    项目中遇到了JSON中某个属性进行排序,在网上搜索了一下资料,总结了以下几个方法: SELECT * ,JSON_EXTRACT(ext, "$.maxNum") AS maxNum FROM prop_info ORDER BY maxNum DESC 在MySQL 5.7.9...
  • tvLLeft.DataSource = lst; tvLLeft.KeyFieldName = "Id"; tvLLeft.ParentFieldName = "ParentId...//排序 tvLLeft.Columns[0].SortIndex = 0; tvLLeft.Columns[0].SortMode = DevExpress.XtraGrid.ColumnSortMode.V...
  • 使用 DataView 对数据排序和筛选

    千次阅读 2008-04-14 20:46:00
    使用 DataView 对数据排序和筛选 DataView 提供了几项用于 DataTable 中的数据进行排序和筛选的功能: 使用 Sort 属性,您可以指定单个或列排序顺序并包含 ASC(升序)和 DESC
  • excel 删除重复行数据,列数据

    千次阅读 2012-07-30 11:52:50
    大家在使用Excel表格总汇大批量数据时,难免会发现一些重复行和重复数据,这时我们就应该将那些重复的数据删除,以免会影响我们的工作,在Excel中删除重复数据和重复行的方法有N,下面Word联盟(www.wordlm.com)...
  • 问题描述:26个大写字母(A-B)和10个阿拉伯数字进行定向排列和不定向排列,请分别出所有可能的排列。 解答: 公式如下: K2=INDEX(I$2:I$1048576,INT((ROW(I2)-2)/COUNTA(J$2:J$1048576))+1) L2=INDEX(J$...
  • sqlServer 定义自动增长除了使用 标识之外,还可以用触发器实现自定义的自动增长用于数据的特殊编码,增加数据库的可读性是非常有意义的。 go --删除已经存在的触发器 if exists(select * from sysobjects ...
  • 在本次调查中,我们根据他们如何将这个问题概念化的现有方法进行分类,即将描述作为生成问题或作为视觉或模态表征空间上的检索问题的模型。 我们提供了现有模型的详细回顾,突出其优点和缺点。 此外,我们概述...
  • sql语法基础,查询结果进行排序

    千次阅读 2019-11-09 21:13:15
    在学习GROUP BY 子句的时候我们知道要想结果进行排序,就要select进行相关命令。下面我们一起来学习一下,如何查询结果进行排序 01 order by子句 格式: SELECT 列名1,列名2。。。。。 FROM 表名 ORDER ...
  • ![图片说明]...读取数据表DY里的数据,序号如图自动排序,删除某一行,序号按顺序自动改变。 比如删除03行,那么04变03,后面的类推,新手没有头绪,老师们给出个主意,或者代码参考啊,谢谢老师们。
  • 然后在这一头增加排序按钮,已勾选和未勾选的行进行排序。 解决方案: 常用的解决方案有两种: 1,利用table组件本身的rowSelections属性,进行封装改造,实现需求。 2,给表格绑定的数据增加一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 285,053
精华内容 114,021
关键字:

对多列数据进行自动排序