我有一个Excel文件,其中包含文件的名称和大小。下面是我在Excel文件中的示例结构。我有大约10000行,我想按文件大小对它们进行排序。Excel中是否有可以做到这一点的工具?
woobm2wo1#
假设SIZE始终是“数字空间度量”,您可以用途:
=SORTBY(A1:B7,BYROW(B1:B7,LAMBDA(x,DROP(TEXTSPLIT(x," "),,-1)*VLOOKUP(DROP(TEXTSPLIT(x," "),,1),$G$2:$H$4,2,FALSE))),1)
其中A1:B7是要排序的数组,B1:B7是大小数组,$G$2:$H$4是辅助表。如果需要降序排序,请将最后一个SORTBY参数调整为-1。结果:
A1:B7
B1:B7
$G$2:$H$4
SORTBY
-1
在旧版本中,在C1中使用类似于以下内容的helper列:
C1
=VLOOKUP(RIGHT(B1,2),$G$2:$H$4,2,FALSE)*LEFT(B1,FIND(" ",B1)-1)
下拉并使用Data -〉Sort和sort by column C:之前:
C
之后:
mzsu5hc02#
这里,一个溢出整个结果的解决方案,并且 * 不需要使用辅助列 *。我们使用KB作为参考单位,并使用不同单位之间的关系作为1000的幂,即1MB=1000KB,1GB=1000^2KB,1TB=1000^3KB,1PB=1000^4KB等:
KB
1000
1MB=1000KB
1GB=1000^2KB
1TB=1000^3KB
1PB=1000^4KB
=LET(in, A2:B4, s, DROP(in,,1), n, TEXTBEFORE(s, " "), u, TEXTAFTER(s, " "), m, 1000^(XMATCH(u, {"KB","MB","GB","TB","PB"})-1), SORTBY(in, m*n))
我们使用XMATCH来获得索引位置,并使用它来构建幂,因此顺序是相关的(从低到高的单位)。由于所有单位都有一个公共后缀(B),因此您也可以像这样编写单位数组:{"K","M","G","T","P"}&"B" .下面是输出:
XMATCH
B
{"K","M","G","T","P"}&"B"
如果关系不能建立为一个公共单位的幂,那么你可以使用XLOOKUP代替,我使用相同的转换规则,只是为了说明:
XLOOKUP
=LET(in, A2:B4, s, DROP(in,,1), n, TEXTBEFORE(s, " "), u, TEXTAFTER(s, " "), m,XLOOKUP(u,{"KB","MB","GB","TB","PB"},HSTACK(1,1000,1000^2, 1000^3,1000^4)), SORTBY(in, m*n))
例如,它可用于从国际公制转换为美国公制。
注意:在这种情况下,我更喜欢使用TEXTBEFORE和TEXTAFTER,因为当输入是数组时,它们都可以正常工作。不需要迭代每个单元格。TEXTSPLIT不是这样工作的,你需要迭代每个元素或连接数组然后再拆分它:TEXTSPLIT(TEXTJOIN(",",,s)," ", ",")并提取每一列,这将导致更冗长的公式。类似地使用BYROW:
TEXTBEFORE
TEXTAFTER
TEXTSPLIT
TEXTSPLIT(TEXTJOIN(",",,s)," ", ",")
BYROW
=LET(in, A2:B4, s,DROP(in,,1), su, BYROW(s,LAMBDA(x, LET(nu, TEXTSPLIT(x," "), n,TAKE(nu,,1), u,DROP(nu,,1),m, 1000^(XMATCH(u, {"KB","MB","GB","TB","PB"})-1), m*n))), SORTBY(in, su))
2条答案
按热度按时间woobm2wo1#
假设SIZE始终是“数字空间度量”,您可以用途:
其中
A1:B7
是要排序的数组,B1:B7
是大小数组,$G$2:$H$4
是辅助表。如果需要降序排序,请将最后一个SORTBY
参数调整为-1
。结果:
在旧版本中,在
C1
中使用类似于以下内容的helper列:下拉并使用Data -〉Sort和sort by column
C
:之前:
之后:
mzsu5hc02#
这里,一个溢出整个结果的解决方案,并且 * 不需要使用辅助列 *。我们使用
KB
作为参考单位,并使用不同单位之间的关系作为1000
的幂,即1MB=1000KB
,1GB=1000^2KB
,1TB=1000^3KB
,1PB=1000^4KB
等:我们使用
XMATCH
来获得索引位置,并使用它来构建幂,因此顺序是相关的(从低到高的单位)。由于所有单位都有一个公共后缀(B
),因此您也可以像这样编写单位数组:{"K","M","G","T","P"}&"B"
.下面是输出:
如果关系不能建立为一个公共单位的幂,那么你可以使用
XLOOKUP
代替,我使用相同的转换规则,只是为了说明:例如,它可用于从国际公制转换为美国公制。
注意:在这种情况下,我更喜欢使用
TEXTBEFORE
和TEXTAFTER
,因为当输入是数组时,它们都可以正常工作。不需要迭代每个单元格。TEXTSPLIT
不是这样工作的,你需要迭代每个元素或连接数组然后再拆分它:TEXTSPLIT(TEXTJOIN(",",,s)," ", ",")
并提取每一列,这将导致更冗长的公式。类似地使用BYROW
: