Đây là một công thức dựa trên regex tương tự như câu trả lời của Rubén :
=arrayformula({regexextract(A1:A3,"^[^ ]+"), regexextract(A1:A3,"[^ ]+$")})
Ở đây, ^[^ ]+
có nghĩa là: tất cả các ký tự không phải khoảng trắng ở đầu chuỗi và [^ ]+$
có nghĩa là: tất cả các ký tự không phải khoảng trắng ở cuối chuỗi. Người ta có thể thay thế không gian bằng dấu phẩy, v.v .: ví dụ:[^,]
Điều này chỉ có nghĩa đối với các chuỗi chứa chính xác một dấu phân cách: nếu không, đầu ra sẽ sai.
Chức năng tùy chỉnh
Để xử lý việc chia thành một số chuỗi tùy ý, tôi đã viết một hàm tùy chỉnh có thể được sử dụng như arraysplit(A1:A3, " ")
. Nó chấp nhận các phạm vi cột (hoặc các ô đơn) làm tham số đầu tiên và dấu phân cách làm tham số thứ hai.
Không giống như split
hàm tích hợp, hàm này không bỏ qua các chuỗi trống: ví dụ: a,b,,c
phân tách bằng dấu phẩy trở thành bốn ô, phần thứ ba trống. (Theo tôi, bỏ qua các chuỗi trống là một lỗ hổng lớn trong thiết kế của split
hàm tích hợp.)
/**
* Splits a column of strings by a separator.
*
* @param {A1:A3} range Column range or a single cell
* @param {" "} separator Separating character or substring
* @returns Substrings, including empty strings
* @customfunction
*/
function arraysplit(range, separator) {
if (range.constructor !== Array) {
range = [[range]]; // handle single-cell input
}
if (range[0].length !== 1) {
throw new Error('First argument must be a column range');
}
var i, j, split, output = [], width = 1;
for (i = 0; i < range.length; i++) {
split = range[i][0].split(separator);
output.push(split);
width = Math.max(width, split.length); // max number of pieces
}
for (i = 0; i < output.length; i++) {
for (j = 0; j < width - output[i].length; j++) {
output[i].push(''); // empty string to make rectangular array
}
}
return output;
}
Tính năng phần thưởng: không giống như phần tách rời tích hợp, arraysplit
chấp nhận chuỗi rỗng dưới dạng dấu tách, trong trường hợp đó, phần tách chuỗi thành các ký tự riêng biệt. (Tất nhiên, hành vi này chỉ được kế thừa từ phương thức phân tách của JavaScript.)
=arrayformula(split(A1:A3," "))
nhưng dù sao nó cũng không hoạt động với tôi như mong muốn.