在电子表格中,电子元器件清单按其值列出,例如,1R0 (1欧姆),1K0 (1公斤-欧姆)或22 p(22微微-法拉第),1n0 (1纳米-法拉第)。如何将这种格式的数字按数字顺序排序?
之前,未排序:
电阻器
电容器
后,排序:
电阻器
电容器
发布于 2019-10-24 11:32:41
您可以使用以下自定义函数来排序您的值:
var unitMap = {
'p': 1e-12,
'n': 1e-9,
'u': 1e-6,
'm': 1e-3,
'R': 1,
'K': 1e3,
'M': 1e6,
}
var unitRegex = /[pnumRKM]/;
function parseValue(val) {
var result = {};
var unitIdx = val.search(unitRegex);
var int = parseInt(val.substring(0, unitIdx));
var dec = parseFloat("0." + val.substring(unitIdx+1));
var multiplier = unitMap[val[unitIdx]];
return (int + dec) * multiplier;
}
/**
* Sorts E96 values.
*
* @param {range} input The range to sort.
* @param {number} input The column to sort by, starting at 1.
* @param {boolean} input Is ascending
* @return Sorted range.
* @customfunction
*/
function CUSTOMSORT(values, sort_column, is_ascending) {
values.sort(function (a, b) {
var a_value = parseValue(a[sort_column-1]);
var b_value = parseValue(b[sort_column-1]);
return is_ascending ? a_value - b_value : b_value - a_value;
});
return values;
}这种行为与您预期的页面内置=SORT()函数的行为基本相同,尽管功能较少。您可以看到以下两个示例:


发布于 2019-10-23 20:28:29
您可以像这样自定义排序,定义每个标量的排序顺序:
=ARRAYFORMULA(SUBSTITUTE(TRANSPOSE(QUERY(TRANSPOSE(IFERROR(
ARRAY_CONSTRAIN(SORT({REGEXEXTRACT(A2:A, "(\d+)(.*)"),
VLOOKUP(REGEXEXTRACT(A2:A, "\d+(.*)"),
{"R0", 1;
"K0", 2;
"M0", 3}, 2, 0)}, 3, 1, 1, 1), 999^99, 2))),,999^99)), " ", ))

https://stackoverflow.com/questions/58513269
复制相似问题