如何在Microsoft Excel中对KB文件大小和MB文件大小的混合数的列进行排序

r3i60tvu  于 2023-03-24  发布在  其他
关注(0)|答案(2)|浏览(295)

我有一个Excel文件,其中包含文件的名称和大小。下面是我在Excel文件中的示例结构。我有大约10000行,我想按文件大小对它们进行排序。Excel中是否有可以做到这一点的工具?

woobm2wo

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
结果:

在旧版本中,在C1中使用类似于以下内容的helper列:

=VLOOKUP(RIGHT(B1,2),$G$2:$H$4,2,FALSE)*LEFT(B1,FIND(" ",B1)-1)

下拉并使用Data -〉Sort和sort by column C
之前:

之后:

mzsu5hc0

mzsu5hc02#

这里,一个溢出整个结果的解决方案,并且 * 不需要使用辅助列 *。我们使用KB作为参考单位,并使用不同单位之间的关系作为1000的幂,即1MB=1000KB1GB=1000^2KB1TB=1000^3KB1PB=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" .
下面是输出:

如果关系不能建立为一个公共单位的幂,那么你可以使用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))

例如,它可用于从国际公制转换为美国公制。

注意:在这种情况下,我更喜欢使用TEXTBEFORETEXTAFTER,因为当输入是数组时,它们都可以正常工作。不需要迭代每个单元格。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))

相关问题