Chia tách chuỗi phân chia giới hạn, giữ các mục trống


10

Tôi đang cố gắng sử dụng SPLITvà các JOINchức năng trong Google Sheets (phiên bản mới) để thao tác một số dữ liệu và tôi đang gặp vấn đề vì SPLITkhông lưu giữ các mục trống.

Nguồn dữ liệu được thiết lập như thế này, về cơ bản:

   |  A    B    C    D
-----------------------
1  |  q    5    r    2
2  |  s         t    4
3  |  u    8    v
4  |  w    3    x    6

(Các mục trống trong bộ dữ liệu này đại diện cho "không đo lường", khác với đo lường 0)

Trên các cột AC, tôi nhận được kết quả tôi muốn bằng cách sử dụng công thức:

=SPLIT(JOIN("~",A1:A4,C1:C4),"~")

Điều đó tạo ra một hàng đi, như mong đợi q s u w r t v x, mỗi trong một ô riêng của nó.

Tuy nhiên, phương pháp này không hoạt động trên các cột BD. JOINchức năng như mong đợi, cho đầu ra:

5~~8~3~2~4~~6

SPLITTuy nhiên, việc thực hiện trên đầu ra đó dẫn đến một vấn đề: Tôi bị bỏ lại 5 8 3 2 4 6, không có ô trống giữa 58hoặc giữa 46, điều đó có nghĩa là các cặp bị phá vỡ (ví dụ svnên tương ứng với các ô trống, nhưng thay vào đó wxlàm). Vấn đề dường như SPLITlà diễn giải ~~như một dấu phân cách đơn lẻ, thay vì hai dấu phân cách với một mục rỗng giữa chúng.

Có ai biết làm thế nào để giữ các mục trống trong loại kịch bản này?

Đầu ra mong muốn sẽ như thế này

q  s  u  w  r  t  v  x
5     8  3  2  4     6

Một không gian trong các trường trống sẽ khắc phục vấn đề?
ale

Việc gõ "" không dẫn đến mục nhập trống được bảo tồn (cảm ơn, @AlE.!), Nhưng vẫn nên có một giải pháp công nghệ, nhất là vì nhập thủ công "" vào tất cả các mục đó sẽ rất tốn thời gian và dễ bị lỗi
LiberalArtist

Công thức bảng tính không phải là sở trường của tôi. Có lẽ một cái gì đó có thể được thực hiện với IF()để tự động chuyển đổi các trường trống thành không gian.
ale

1
Cập nhật: Ý tưởng của @ AlE đã cho phép tôi tính toán ngay lập tức bằng cách sử dụng =ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))để tạo một tập hợp các cột giả với "" trong các ô trống, sau đó được sử dụng cho SPLITJOIN. Tuy nhiên, vẫn hy vọng ai đó có một giải pháp thanh lịch hơn: điều này bổ sung thêm một loạt các công cụ bổ sung vào tài liệu của tôi và nó vẫn cần tôi cập nhật số hàng ở một vài nơi khác nhau khi thêm nhiều phép đo vào tập dữ liệu. (Cảm ơn AI E. vì ít nhất hãy để tôi xử lý dữ liệu ngay bây giờ!)
LiberalArtist

Câu trả lời:


3

Hãy thử giải pháp sau đây.

Công thức

=ARRAYFORMULA(TRIM(SPLIT(JOIN(" ,", A1:A4,C1:C4), ",")))

Giải thích

Bạn đã cho chúng ta thấy rằng SPLIThàm bỏ qua các ô trống, do đó tôi chọn chuỗi này làm dấu phân cách : " ,". Kết quả trung gian của JOINhàm, trông như thế này:
nhập mô tả hình ảnh ở đây

Tôi chọn dấu phân cách cho SPLIThàm này là : ",". Kết quả trung gian của SPLIThàm, trông như thế này:
nhập mô tả hình ảnh ở đây

Bây giờ, tuy nhiên, chúng ta phải đối phó với các khoảng trắng được thêm vào. Do đó, tôi đã sử dụng TRIMchức năng này, để loại bỏ tất cả các dấu trắng hoặc dấu trắng hàng đầu (kết hợp với dấu ARRAYFORMULA). So sánh các LENgiá trị của từng kết quả trung gian.

Kết quả

nhập mô tả hình ảnh ở đây

Thí dụ

Tôi đã tạo một tệp ví dụ cho bạn: SPLIT để giữ các ô trống


2

Hãy thử giải pháp sau đây.

function myJoin() { 
  var output = []; 
  for(var i = 0, iLen = arguments.length; i < iLen; i++) {
    for(var r = 0, rLen = arguments[i].length; r < rLen; r++) {
      output.push(arguments[i][r][0]);
    }    
  }
  return [output];
}

Sử dụng

nhập mô tả hình ảnh ở đây

Thêm nhiều phạm vi cho chức năng như bạn muốn và chúng sẽ được xử lý. Thêm tập lệnh nhỏ này vào trình chỉnh sửa tập lệnh của bảng tính của bạn (Công cụ> Trình chỉnh sửa tập lệnh; Nhấn nút lưu).

Thí dụ

Tôi đã tạo một tệp ví dụ cho bạn: SPLIT để giữ các ô trống


2

Câu trả lời ngắn

Công thức sau đây trả về kết quả mong muốn.

=Transpose({A1:B4;C1:D4})

Câu trả lời mở rộng

Câu trả lời này được tập trung vào việc cung cấp một cách để có được kết quả mong muốn thay vì thảo luận về cách làm cho phương pháp được chọn để làm việc.

Vấn đề XY

OP muốn lấy X và nghĩ rằng Y nên trả lại kết quả đó. Cách tiếp cận này có vấn đề vì Y có một số cảnh báo. Đây có thể là một vấn đề của thị trưởng khi OP hỏi về cách làm cho Y hoạt động thay vì yêu cầu cách lấy X nhưng nó không quá lớn vì nó cung cấp bối cảnh và kết quả mong muốn.

Giải pháp

Google Sheets có thể xử lý các kết quả đa giá trị theo cách rất đơn giản theo quan điểm của người dùng cuối. Mặt khác, nó cho phép sử dụng một ký hiệu đặc biệt để cho phép người dùng cuối xác định mảng.

Các tính năng trên cho phép có được kết quả mong đợi mà không cần sử dụng các hàm SPLIT () và THAM GIA () và không có sự cẩn thận vốn có của chúng.

Giải thích công thức

{A1:B4;C1:D4}

Đó là một mảng 2 X 8 được tạo bởi hai mảng 2 X 4 / phạm vi. Dấu chấm phẩy ( ;) được sử dụng giả sử rằng dấu tách thập phân của bảng tính là dấu chấm ( .). Nếu dấu tách thập phân là dấu phẩy, hãy thay thế bằng dấu gạch chéo ngược ( \).

=Transpose({A1:B4;C1:D4})

Chuyển đổi mảng 2 X 8 thành mảng 8 X 2.

Một trong những ưu điểm của phương pháp này là nó không yêu cầu xử lý đặc biệt các ô trống. Các ưu điểm khác là nó là một công thức rất nhỏ gọn và rất dễ thích nghi.

Người giới thiệu


1

Nếu bạn tham gia và biến dấu phân cách thành "," về cơ bản là dấu phẩy có khoảng trắng trước, nó sẽ tự động giữ khoảng trống đó khi bạn chia lại:

=SPLIT(JOIN(" ,",A1:A4),",")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.