"Split" dibatasi string, mempertahankan entri kosong

10

Saya mencoba menggunakan SPLITdan JOINfungsinya di Google Sheets (versi baru) untuk memanipulasi beberapa data, dan saya mengalami masalah karena SPLITtidak menyimpan entri kosong.

Sumber data diatur seperti ini, pada dasarnya:

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

(Entri kosong dalam kumpulan data ini menunjukkan "tidak ada pengukuran", yang berbeda dari pengukuran 0)

Di kolom Adan C, saya mendapatkan hasil yang saya inginkan dengan menggunakan rumus:

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

Itu menghasilkan baris yang berjalan, seperti yang diharapkan q s u w r t v x, masing-masing di selnya sendiri.

Namun, metode ini tidak berfungsi pada kolom Bdan D. JOINberfungsi seperti yang diharapkan, memberikan output:

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

Melakukan SPLITpada output itu, bagaimanapun, menghasilkan masalah: Saya pergi dengan 5 8 3 2 4 6, tanpa sel kosong di antara 5dan 8atau di antara 4dan 6, yang berarti pasangan dipecah (misalnya sdan vharus sesuai dengan sel kosong, tetapi sebaliknya wdan xlakukan). Masalahnya tampaknya SPLITadalah menafsirkan ~~sebagai pembatas tunggal, bukan sebagai dua pembatas dengan entri nol di antara mereka.

Adakah yang tahu cara mempertahankan entri kosong dalam skenario semacam ini?

Output yang diinginkan akan terlihat seperti ini

q  s  u  w  r  t  v  x
5     8  3  2  4     6
LiberalArtist
sumber
Apakah ruang di bidang kosong itu dapat memperbaiki masalah?
ale
Mengetikkan "" tidak menghasilkan entri kosong yang dipertahankan (terima kasih, @AlE.!), Tetapi masih lebih disukai untuk memiliki solusi teknologi, paling tidak karena mengetik "" secara manual ke semua entri akan sangat memakan waktu dan rawan kesalahan.
LiberalArtist
Rumus spreadsheet bukan keahlian saya. Mungkin sesuatu dapat dilakukan dengan IF()mengonversi bidang kosong menjadi ruang secara otomatis.
ale
1
Pembaruan: @ AlE. Ide membuat saya menyelesaikan perhitungan dalam waktu dekat dengan menggunakan =ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))untuk membuat seperangkat dummy kolom dengan "" di sel kosong, yang kemudian digunakan untuk SPLITdan JOIN. Namun, masih berharap seseorang memiliki solusi yang lebih elegan: ini menambahkan banyak hal tambahan ke dokumen saya, dan masih membutuhkan saya untuk memperbarui nomor baris di beberapa tempat yang berbeda karena lebih banyak pengukuran ditambahkan ke kumpulan data. (Terima kasih kepada AI E. untuk setidaknya membiarkan saya
mengolah

Jawaban:

3

Coba solusi berikut ini.

Rumus

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

Dijelaskan

Anda sudah menunjukkan kepada kita bahwa SPLITfungsi mengabaikan sel kosong, karena itu saya memilih string ini sebagai pembatas: " ,". Hasil antara dari JOINfungsi, terlihat seperti ini:
masukkan deskripsi gambar di sini

Saya memilih pembatas untuk SPLITfungsi menjadi ini: ",". Hasil antara dari SPLITfungsi, terlihat seperti ini:
masukkan deskripsi gambar di sini

Sekarang, bagaimanapun, kita harus berurusan dengan ruang putih tambahan tambahan. Karena itu saya menggunakan TRIMfungsinya, untuk menghapus semua spasi putih spasi atau terdepan (dalam kombinasi dengan ARRAYFORMULA). Bandingkan LENnilai dari setiap hasil antara.

Hasil

masukkan deskripsi gambar di sini

Contoh

Saya telah membuat file contoh untuk Anda: SPLIT untuk mempertahankan sel kosong

Jacob Jan Tuinstra
sumber
2

Coba solusi berikut ini.

Kode

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];
}

Pemakaian

masukkan deskripsi gambar di sini

Tambahkan rentang sebanyak mungkin ke fungsi yang Anda inginkan dan mereka akan diproses. Tambahkan skrip kecil ini ke dalam editor skrip spreadsheet Anda (Alat> Editor skrip; Tekan tombol simpan).

Contoh

Saya telah membuat file contoh untuk Anda: SPLIT untuk mempertahankan sel kosong

Jacob Jan Tuinstra
sumber
2

Jawaban singkat

Rumus berikut mengembalikan hasil yang diinginkan.

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

Jawaban diperpanjang

Jawaban ini difokuskan dalam menyediakan cara untuk mendapatkan hasil yang diinginkan alih-alih membahas bagaimana membuat pendekatan yang dipilih untuk bekerja.

Masalah XY

OP ingin mendapatkan X dan berpikir bahwa Y harus mengembalikan hasil itu. Pendekatan ini bermasalah karena Y memiliki beberapa peringatan. Ini bisa menjadi masalah walikota karena OP bertanya tentang bagaimana membuat Y untuk bekerja alih-alih meminta cara untuk mendapatkan X tetapi itu tidak begitu besar karena menyediakan konteks dan hasil yang diinginkan.

Larutan

Google Sheets mampu menangani hasil multi-nilai dengan cara yang sangat sederhana dari sudut pandang pengguna akhir. Di sisi lain, memungkinkan untuk menggunakan notasi khusus untuk memungkinkan pengguna akhir untuk menentukan array.

Fitur-fitur di atas memungkinkan untuk mendapatkan hasil yang diharapkan tanpa menggunakan fungsi SPLIT () dan JOIN () dan tanpa peringatan yang melekat padanya.

Penjelasan rumus

{A1:B4;C1:D4}

Ini adalah array 2 X 8 yang dibuat oleh dua array / rentang 2 X 4. Titik koma ( ;) digunakan dengan asumsi bahwa pemisah desimal spreadsheet adalah titik ( .). Jika pemisah desimal adalah koma, ganti dengan garis miring terbalik ( \).

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

Mengubah array 2 X 8 menjadi array 8 X 2.

Salah satu kelebihan metode ini adalah tidak memerlukan penanganan khusus sel kosong. Keunggulan lainnya adalah formula yang sangat ringkas dan sangat mudah untuk beradaptasi.

Referensi

Rubén
sumber
1

Jika Anda bergabung dan menjadikan pembatas menjadi "," pada dasarnya koma dengan ruang sebelumnya, ia akan secara otomatis menyimpan ruang itu ketika Anda membaginya lagi:

=SPLIT(JOIN(" ,",A1:A4),",")
Aurielle Perlmann
sumber