excel如何快速局部排序

excel如何快速局部排序,第1张

1、打开EXCEL,如图。

2、打开所需排序的数据,点击开始,如图。

3、点击右侧的排序与筛选中,右键,选择筛选,如图。

4、此时所以数据会出现下拉按钮,选择所需数据进行排序,选择一列数据,即可进行升序或降序的排列,如图。、

5、这是对第一例数据进行降序排列的效果图。

在 Excel 中,Rank函数用于实现一个数字在指定数字列表中的排位,并且可以通过拖动的办法实现对整个数字列表的自动排序。Rank函数共有三个参数,前两个为必选项,后一个为可选项;如果省略可选项,将默认按降序排序。Rank函数怎么用呢?文章先介绍Rank函数的语法,再用四个由浅入深的具体实例分享Rank函数的使用方法;四个实例分别为无重复数字的自动排序、重复数字并排的自动排序、重复数字顺排的自动排序和Rank函数与OffSet函数组合实现分段排序,实例 *** 作所用版本均为 Excel 2016。

一、Rank函数语法

1、表达式:RANK(Number, Ref, [Order])

中文表达式:RANK(要排序的数字, 数字列表, [排序方式])

2、说明:

A、Ref 为数字列表数组或对数字列表的引用,如果有非数字将被忽略。

B、Order 为可选项,用于指定数字的排序方式;如果省略,则默认值为 0,则按降序排序;如果为非 0,则按升序排序。

二、Rank函数怎么用

(一)无重复数字的自动排序

1、假如要对销量按降序排序。选中 G2 单元格,输入公式 =RANK(F2,$F$2:$F$12),按回车,返回 F2 在 F2:F12 中的排位;再次选中 G2,把鼠标移到 G2 右下角的单元格填充柄上,鼠标变为黑色加号后,按住左键,往下拖一直拖到 F12,则所经过单元格都对应 F2:F12 中的数值排好序; *** 作过程步骤,如图1所示:

2、公式说明:

A、公式 =RANK(F2,$F$2:$F$12) 中,F2 是要排序的数字,是对 F2 的相对引用,往下拖时,会变为 F3、F4、……;$F$2:$F$12 是对 F2 至 F12 的绝对引用,往下拖时,F2 和 F12 都不会自动加 1,即无论拖到哪个单元格都始终返回从 F2 到 F12 的数字列表。

B、公式省略了排序方式 Order,默认按降序排序,F2:F12 中的最大值 982 排序在第一位;如果要按升序排序,可以把 Order 设置为非 0,如设置为 1,则公式变为 =RANK(F2,$F$2:$F$12,1)。

(二)重复数字并排的自动排序

1、假如要对价格按升序排序。把公式 =RANK(E2,$E$2:$E$12,1) 复制到 G2 单元格,如图2所示:

2、按回车,返回 E2 在 E2 至 E12 中的排位,同样用往下拖的方法把其余价格排序,排好后,如图3所示:

3、排在第一的是 65,它是 E2 至 E12 中最小的值,说明排序方式为升序;E2 至 E12 中共有两组重复数字,一组是 89,另一组是 99,两个 89 都排在第 4 位,两个 99 都排在第 6 位,而第 5 位和第 7 位却留空。

(三)重复数字顺排的自动排序

1、同样对价格按升序排序。把公式 =RANK(E2,$E$2:$E$12,1)+COUNTIF(E$2:E2,E2)-1 复制到 G2 单元格,按回车,则返回 E2 在 E2 至 E12 中的排位;用往下拖的方法把其余价格排好序, *** 作过程步骤,如图4所示:

2、价格中的第一组重复数字 89 分别排到了第 4 位和第 5 位;第二组重数字 99 分别排到了 第 6 位和第 7 位。

3、公式说明:

公式 =RANK(E2,$E$2:$E$12,1)+COUNTIF(E$2:E2,E2)-1 用 CountIf函数统计当前数字在当前单元格之前有几个重复值;例如 COUNTIF(E$2:E2,E2) 统计 E2 在 E2 之前(即 E2)有几个重复数字,统计结果为 1,1 - 1 = 0,即 COUNTIF(E$2:E2,E2)-1 = 0;当拖到 E3 时,COUNTIF(E$2:E2,E2)-1 变为 COUNTIF(E$2:E3,E3)-1,统计 E3 在 E2 至 E3 有几个重复数字,统计结果为 1,COUNTIF(E$2:E3,E3)-1 = 0,则 =RANK(E3,$E$2:$E$12,1)+0=4;当拖到 E4 时,COUNTIF(E$2:E2,E2)-1 变为 COUNTIF(E$2:E4,E4)-1,统计 E4 在 E2 至 E4 有几个重复数字,统计结果为 2,COUNTIF(E$2:E4,E4)-1 = 1,则 =RANK(E4,$E$2:$E$12,1)+1=5。

(四)Rank函数与OffSet函数组合实现分段排序

1、假如要把销量按每段四个数分段排序。把公式 =RANK(F2,OFFSET($F$2:$F$5,INT((ROW()-2)/4)4,),1) 复制到 G2 单元格,按回车,则返回 F2 在 F2 至 F5 中的排位;用往下拖的方法排好其余数字与其它分段的序; *** 作过程步骤,如图5所示:

2、公式说明:

A、公式 =RANK(F2,OFFSET($F$2:$F$5,INT((ROW()-2)/4)4,),1) 用 OFFSET($F$2:$F$5,INT((ROW()-2)/4)4,) 来实现分段,它是如何实现分段的?我们选择第二个分段的第一个单元格,即 G6 单元格,双击它,它的公式为 =RANK(F6,OFFSET($F$2:$F$5,INT((ROW()-2)/4)4,),1),如图6所示:

B、其它的都没有变,只有 F2 变为 F6;Row() 用于返回当前行的行号,F6 的行号为 6,即 ROW()-2 = 4,INT(4/4) = 1,14 = 4,即 OffSet 变为 OFFSET($F$2:$F$5,4),也就是要往下移 4 行,由于 OffSet函数返回对单元格的引用,所以 OffSet 返回 $F$6:$F$9。

C、Rank 变为 =RANK(F6,$F$6:$F$9,1),也就实现了对第二段 F6 至 F9 数字列表的排序。

提示:由于是从 F2 开始,所以用 ROW()-2,如果从 F1 开始,则用 ROW()-1,其它的以此类推。另外,每个分段有几个数,用 (ROW()-2) 除几,如公式中的 (ROW()-2)/4;用 Int 取整后再乘几也是一样。

#include <stdioh>
#include <conioh>
#define LEN 100 /数组长度上限/
#define elemType int /元素类型/
/输入数组/
void inputArr (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
scanf ("%d",&arr[i]);
putchar ('\n');
}
/升序冒泡排序/
/参数说明:/
/int arr[]:排序目标数组/
/int len:元素个数/
void bubbleSortAsc (elemType arr[], int len) {
elemType temp;
int i, j;
for (i=0; i<len-1; i++) /外循环控制排序趟数,len-1个数进行len-1趟/
for (j=0;j<len-1-i; j++) { /内循环每趟比较的次数,第j趟比较len-j次/
if (arr[j] > arr[j+1]) { /相邻元素比较,逆序则交换/
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
/打印数组/
void printArr (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
printf ("%d\t",arr[i]);
putchar ('\n');
}
int main (void) {
elemType arr[LEN];
elemType arrOdd[LEN], arrEven[LEN]; /存储奇数、偶数/ 
int len, oddLen, evenLen;
int i, j ,k;

printf ("请输入数组长度:");
scanf ("%d",&len);
printf ("请输入数组内容:\n");
inputArr (arr, len);

/先分奇偶,后分别排序,最终合并/
for (i=0, j=0, k=0; i<len; i++) {
if (arr[i]%2) {
arrOdd[j] = arr[i];
j++;
}
else {
arrEven[k] = arr[i];
k++;
}
}
oddLen = j;
evenLen = k;

bubbleSortAsc (arrOdd, oddLen);
bubbleSortAsc (arrEven, evenLen);

for (k=0, i=0; k<evenLen; k++, i++)
arr[i] = arrEven[k];
for (j=0; j<oddLen; j++, i++)
arr[i] = arrOdd[j];

printArr (arr,len);
putchar ('\n');

getch (); /屏幕暂留/
free (arr);
return 0;
}

运行结果

注:运行结果略去输入数组部分


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13393435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存